【转】Linux下ARM裸板程序编写
2013-04-19 12:01
204 查看
有些学习过Bootloader和内核的朋友肯定会知道,在调用C语言函数之前肯定会有一段汇编代码在前面铺路,进行一些必要的初始化工作;而那些只学过单片机而没有学过ARM的朋友肯定会觉得很奇怪,在单片机中写C代码,前面完成可以不用任何汇编代码。这是为什么呢?
这主要是因为我们的开发环境(这里主要是指编译环境)的不同,在开发单片机程序的时候,开发环境(如KEIL)会在编译C代码的时候,给我添加启动代码(startup-51)或者在编译时已经由编译器在后台为我们初始化好了。而在开发ARM程序时,ARM处 理器支持多种模式,多种功能,而在不同的领域不同的项目里面,我们可以有选择的、适当的选择这些功能,这时,编译器就不知道我们需要什么功能,需要什么模 式,编译器也就无法给我们提供默认的“初始化”代码,所以,编译器干脆就“不管”这些了,把这些工作交由我们开发者来处理。
这里最简单的启动代码。
这里要注意的一点是S3C6410中RAM的地址,见datasheet,如图。
最后是Makefile文件。
东西很简单没什么好说的,在此记录,以免忘记,如有疑问或发现本文有何错误,欢迎提出。
---------------------------------------------------------------------------------------------------------------------------------------
作者:庞辉
出处:http://www.cnblogs.com/pang123hui/
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名庞辉(包含链接).
这主要是因为我们的开发环境(这里主要是指编译环境)的不同,在开发单片机程序的时候,开发环境(如KEIL)会在编译C代码的时候,给我添加启动代码(startup-51)或者在编译时已经由编译器在后台为我们初始化好了。而在开发ARM程序时,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
这里要注意的一点是S3C6410中RAM的地址,见datasheet,如图。
最后是Makefile文件。
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
东西很简单没什么好说的,在此记录,以免忘记,如有疑问或发现本文有何错误,欢迎提出。
---------------------------------------------------------------------------------------------------------------------------------------
作者:庞辉
出处:http://www.cnblogs.com/pang123hui/
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名庞辉(包含链接).
相关文章推荐
- linux下程序简单编写_TQ2440第一裸板程序
- linux下通过编写测试程序的方式来确认arm-linux-gnueabihf-gcc-4.6lib和.h文件的安装位置,为复制libnl做准备
- 在Linux编写程序arm程序,通过usb烧写在Android系统中安装和运行C程序
- arm-linux-gnueabihf编译器在ubuntu环境下交叉编译opencv2.4.10 排版3(没有跑通例子程序)
- 在Linux下用C语言写一个小程序实现一个进度条编写Makefile来进行运行
- linux下用C编写的基于smtp的邮件发送程序
- Linux下编写进度条小程序
- ARM与51编写程序的区别
- [LINUX]利用Ncursesw编写支持中文的终端程序
- Linux及Arm-Linux程序开发笔记(零基础入门篇)
- linux下.desktop桌面程序图标文件编写
- ARM程序工程Makefile 讲解及通用版例子编写
- 闲来瞎扯 -- 在vs2008下编写linux程序
- 如何用linux系统编写c程序
- 用lazarus开发Linux daemon程序及编写启动脚步
- Linux下使用codeblocks交叉编译ARM-LINUX-GCC程序
- ARM-LINUX学习笔记-(虚拟机linux串口终端以及USB程序下载,基于TQ2440)
- 怎么在linux下用vim编写一个C程序
- Windows下与Linux下编写socket程序的区别
- Linux多任务编程 编写多进程程序及其代码