Linux下arm裸机开发环境搭建与实例
首先是arm工具链,arm工具链的编译我就不写了,一方面很麻烦,另一方面是这方面的资料网上已经有很多了,我就不在这里多言浪费大家时间了。我这里有自己编译的arm工具链,当然,用网上现成的也不是不可以,但是最好是自己熟悉过程,免得必要的时候不会从源码配置。我将工具链上传到空间,如果需要,尽管拿去,链接地址为,使用说明看资源备注:
http://download.csdn.net/detail/girlkoo/3689485
这样,就可以开发普通的arm裸机程序了,现在开发环境是有了,编写可以编译通过的代码很是容易,但是编写真正运行正常的却不那么简单,因此,烧录工具还是必要的,我推荐是用minicom和dnw,minicom模拟与windows下的超级终端有相同的功能,这样就可以像windows下开发环境一样与vivi对话了,另外,我在网上下来多个dnw和dnw2,但是发现dnw2在某些情况下不是很稳定,当然也有听说的成分,不管怎么说,就是个工具,不管哪个,用着顺手就行,我用的是dnw,也可能是我点背,下载的几个dnw烧录大的镜像可以,但是烧录自己开发的程序,只有二三百K的小文件却老是出错,还好linux下是开放源码的,于是我就修改了一番,当然,限于水平因素,可能曲解了原作者的意图,不过巧合的是烧录小文件正常了,大的文件也可以,或许你用的时候并没有这个问题,那么请您使用原版的dnw,指出小弟缺点,如果不幸弄巧成拙求诸位不要喷我,下面是我修改后的dnw源码及使用说明,下载地址是:
http://download.csdn.net/detail/girlkoo/3689525
配置好上面两个工具后就可以开发arm2440的裸机程序了,当然移植系统可能还会用到其他牛B的工具,等用到再去研究,如果有幸小弟弄明白了,还会来这里记录下来的,下面附上两个linux下的arm裸机程序及makefile,感觉对我这样的新手来说还是有帮助的。
例子1:汇编文件led_on.S,代码如下,这里我想告诉大家的是GNU的汇编跟标准的arm汇编是有出入的,具体的大家可以搜索“linux arm 汇编”来学习了解,网友给我们提供了足够丰富的资源。
- .text
- .global_start
- _start:
- ldrr0,=0x56000010
- ldrr1,=0x00155555
- strr1,[r0]
- ldrr0,=0x56000014
- movr1,#0x0
- strr1,[r0]
- MAIN_LOOP:
- bMAIN_LOOP
编译指令如下:
编译:arm-linux-gcc -g -c -o led_on.o led_on.S
链接:arm-linux-ld -Ttext 0x30000000 -g -o led_on.elf led_on.o
转换:arm-linux-objcopy -O binary -S led_on.elf led_on.bin
makefile可以这样写:
- led_on.bin:led_on.S
- arm-linux-gcc-g-c-oled_on.oled_on.S
- arm-linux-ld-Ttext0x30000000-gled_on.o-oled_on_elf
- arm-linux-objcopy-Obinary-Sled_on_elfled_on.bin
- clean:
- rm-fled_on.binled_on_elf*.o
例子2:如果使用厂家提供的Download and run,还可以编写纯C语言代码来操作arm芯片,下面是流水等的代码:
- #defineGPBCON(*(volatileunsigned*)0x56000010)
- #defineGPBDAT(*(volatileunsigned*)0x56000014)
- #defineGPBUP(*(volatileunsigned*)0x56000018)
- #defineMPLL100MHz0x0007f022
- #defineCLKdiv20x02
- #definerMPLLCON(*(volatileunsigned*)0x4c000004)
- #definerCLKdivN(*(volatileunsigned*)0x4c000014)
- intmain()
- {
- inti=0;
- intcount=0;
- intLEDS[4]={0x1c0,0x1a0,0x160,0xe0};
- rMPLLCON=MPLL100MHz;
- rCLKdivN=CLKdiv2;
- GPBCON=0x00155555;
- GPBUP=GPBUP&0xFF00;
- while(1)
- {
- for(count=0;count!=4;++count)
- {
- GPBDAT=LEDS[count];
- for(i=0;i<0x30000;i++);
- }
- }
- }
命令行下的编译流程我就不写了,直接把makefile贴在这里吧
- led.bin:led.c
- arm-linux-gcc-g-c-oled.oled.c
- arm-linux-ld-Ttext0x30000000-gled.o-oled.elf-emain
- arm-linux-objcopy-Obinary-Sled.elfled.bin
- .PYTHON:clean
- clean:
- rm*.oled.elfled.bin
Linuxarm裸机开发环 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)