Linux下ARM裸板程序编写

发布者:andyliow1980最新更新时间:2016-06-22 来源: eefocus关键字:Linux  ARM裸板  程序编写 手机看文章 扫描二维码
随时随地手机看文章
 有些学习过Bootloader和内核的朋友肯定会知道,在调用C语言函数之前肯定会有一段汇编代码在前面铺路,进行一些必要的初始化工作;而那些只学过单片机而没有学过ARM的朋友肯定会觉得很奇怪,在单片机中写C代码,前面完成可以不用任何汇编代码。这是为什么呢?

  这主要是因为我们的开发环境(这里主要是指编译环境)的不同,在开发单片机程序的时候,开发环境(如KEIL)会在编译C代码的时候,给我添加启动代码(startup-51)或者在编译时已经由编译器在后台为我们初始化好了。而在开发ARM程序时,ARM处 理器支持多种模式,多种功能,而在不同的领域不同的项目里面,我们可以有选择的、适当的选择这些功能,这时,编译器就不知道我们需要什么功能,需要什么模 式,编译器也就无法给我们提供默认的“初始化”代码,所以,编译器干脆就“不管”这些了,把这些工作交由我们开发者来处理。

 这里最简单的启动代码。

转Linux下ARM裸板程序编写
@****************************************
@    File: startup.s
@    function: start up
@   author: pang123hui
@****************************************
.text
.global _start
_start:
    LDR R0,=0x7E004000        @ WATCHDOG寄存器地址
MOV R1,#0x0
STR R1,[R0]                @ 写入0,禁止WATCHDOG,否则CPU会不断重启
    LDR SP,=0x0c001000        @ 设置堆栈,注意:这时我们是将程序直接烧录到SDRAM中,所以堆栈要设置在SDRAM中
                            @ 如果将程序烧在NAND FLASH中,需将堆栈改为1024*4,因为NAND FLASH中的代码
                            @ 在复位后会移到内部RAM中,此RAM只有4K
    BL    main                @ 调用C程序中的main函数
halt_loop:
    B    halt_loop    
转Linux下ARM裸板程序编写

这里要注意的一点是S3C6410中RAM的地址,见datasheet,如图。

转Linux下ARM裸板程序编写

最后是Makefile文件。

转Linux下ARM裸板程序编写
CC=arm-linux-gcc
CFLAGS=-g -c -o
led_on.bin:startup.s main.c
    $(CC) $(CFLAGS) startup.o startup.s
    $(CC) $(CFLAGS) main.o main.c
    arm-linux-ld -Ttext 0x0c000000 -g startup.o main.o -o led_on_elf
    arm-linux-objcopy -O binary -S led_on_elf led_on.bin
clean:
    rm -f led_on.bin led_on_elf *.o
转Linux下ARM裸板程序编写
 

关键字:Linux  ARM裸板  程序编写 引用地址:Linux下ARM裸板程序编写

上一篇:arm 裸板程序编译过程
下一篇:ARM汇编之MOV指令

推荐阅读最新更新时间:2024-03-16 14:58

24.Linux-2440下的DMA驱动
1.DMA(Direct Memory Access)   即直接存储器访问, DMA 传输方式无需 CPU 直接控制传输,通过硬件为 RAM 、I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。   学了这么多驱动,不难推出DMA的编写套路:   1)注册DMA中断,分配缓冲区   2)注册字符设备,并提供文件操作集合fops    - 2.1)file_operations里设置DMA硬件相关操作,来启动DMA  由于我们是用字符设备的测试方法测试的,而本例子只是用两个地址之间的拷贝来演示DMA的作用,所以采用字符设备方式编写 2.驱动编写之前,先来讲如何分配释放缓冲区、DMA相关寄存器介绍、使
[单片机]
24.<font color='red'>Linux</font>-2440下的DMA驱动
基于Blackfin处理器的嵌入式数码相框
当今的嵌入式应用已经无处不在,无论是消费电子、通信终端,还是系统设备、工业控制、汽车电子系统或航空航天,都无处不见嵌入式应用的身影。现在,全球每年生产数十亿颗微处理器,其中大部分都被广泛应用于各类嵌入式系统。 目前,在嵌入式系统硬件平台方面,各种微控制器以及数字信号处理器(DSP)产品,无论从品牌、功能特性方面,还是针对目标应用的成本、处理能力、功耗要求、集成度、开发周期、技术难度等具体要求,都可以精心选择出最具综合优势的硬件核心平台。而在嵌入式操作系统方面,无论是开放源代码的Linux阵营的各种商业版本或免费版本,还是WinCE、vxWorks等“重量级”平台,抑或针对特定应用优化的Windows Mobile、Symb
[单片机]
基于Blackfin处理器的嵌入式数码相框
ARM linux解析之压缩内核zImage的启动过程
首先,我们要知道在zImage的生成过程中,是把arch/arm/boot/compressed/head.s 和解压代码misc.c,decompress.c加在压缩内核的最前面最终生成zImage的,那么它的启动过程就是从这个head.s开始的,并且如果代码从RAM运行的话,是与位置无关的,可以加载到内存的任何地方。 下面以arch/arm/boot/compressed/head.s为主线进行启动过程解析。 1. head.s的debug宏定义部分 最开始的一段都是head.s的debug宏定义部分,这部分可以方便我们调试时使用。 如下: #ifdef DEBUG #if defined(CONFIG_DEBUG
[单片机]
<font color='red'>ARM</font> <font color='red'>linux</font>解析之压缩内核zImage的启动过程
基于ARMLinux下LonWorks总线设备驱动设计
LonWorks是美国Echelon公司1992年推出的局部操作网络,最初主要用于楼宇自动化,但很快发展到工业现场网。LonWorks技术为设计和实现可互操作的控制网络提供了一套完整、开放、成品化的解决途径,它协议完整、通信可靠,而且为用户提供了功能强大的开发工具(LONBU ILDER,NODEBU ILDER)。 在LonWorks现场总线设备的使用过程中,由于其设备驱动与操作系统的相关性,从而要求开发者在开发过程不仅实现硬件构成,更需要熟悉操作系统及设备驱动程序的制定。本文给出在ARM平台下实现LonWorks总线设备的互联,并在嵌入式Linux系统下,介绍LonWorks现场总线设备驱动程序的设计与实现。 1 LonW
[单片机]
基于<font color='red'>ARM</font>的<font color='red'>Linux</font>下LonWorks总线设备驱动设计
第七篇:gcc和arm-linux-gcc常用选项
一、gcc和arm-linux-gcc的常用选项 常用选型 -v 查看gcc编译器的版本,显示gcc执行时的详细过程 -o Place the output into 指定输出文件名为file,这个名称不能跟源文件名同名 -E Preprocess only; do not compile, assemble or link 只预处理,不会编译、汇编、链接 -S Compile only; do not assemble or link 只编译,不会汇编、链接 -c Compile and assemble, but do not link 编译和汇编,不会链接 举例 //举例一: gcc hell.c
[单片机]
第七篇:gcc和<font color='red'>arm</font>-<font color='red'>linux</font>-gcc常用选项
汽车级Linux发布第十版统一代码库
最近,汽车级Linux(AGL)为汽车制造商发布了其统一代码库(UCB)的第十版,代号为“Jumping Jellyfish”。由数十家成员公司共同开发的AGL统一代码库是一个用于信息娱乐,远程信息处理和仪表盘应用的开源软件平台。 Linux基金会汽车级Linux执行董事Dan Cauchy说:“ AGL平台基于Yocto,对于Jumping Jellyfish,我们已更新到Yocto的第一个长期支持(LTS)版本,名为Dunfell。这意味着Yocto项目将在很长一段时间内提供补丁,修复和更新,这对于汽车系统来说是必不可少的,因为汽车系统的生命周期比许多其他嵌入式Linux应用程序更长。” 对于熟悉AGL和Linux的人
[汽车电子]
汽车级<font color='red'>Linux</font>发布第十版统一代码库
iTOP-4418开发Qt和最小linux系统-扩展root
本文档介绍如何修改 iTOP-4418 开发板用户区大小。文档中的分区数据是针对 16G 的 eMMC。 uboot 设置 进入 iTOP-4418 的 uboot,如下图所示。 输入命令: setenv fastboot flash=mmc,2:uboot:2nd:0x200,0x78000;flash=mmc,2:2ndboot:2nd:0x200,0x4000;flas h=mmc,2:bootloader:boot:0x8000,0x70000;flash=mmc,2:boot:ext4:0x00100000,0x040 00000;flash=mmc,2:system:ext4:0x04100000,0x34000
[单片机]
iTOP-4418开发<font color='red'>板</font>Qt和最小<font color='red'>linux</font>系统-扩展root
采用ARM+Linux 的仪器控制系统设计
0 引 言   嵌入式系统的开发都有其特殊的应用场合与特定功能,而嵌入式Linux操作系统因其开源和广泛的处理器支持、易于移植而备受行业青睐。AT91RM9200是Atmel公司针对系统控制、通信领域推出的基于ARM920T内核的32位RISC微处理器,它具有小体积,低功耗,低成本及高性能等特点,其内部集成了SPI、串口、PIO、以太网、EBI、USB、MCI等多种接口。   在Linux系统中,应用层不可以直接操作硬件,需设计驱动程序向下屏蔽硬件特性,实现硬件与用户间的通信。系统平台为在虚拟机中安装Fedora 8,目标系统采用Linux 2.6.21.7内核,定制文件系统建立NFS根文件系统,使用双网卡方式搭建成交叉开发环
[单片机]
采用<font color='red'>ARM</font>+<font color='red'>Linux</font> 的仪器控制系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved