首页 / 操作系统 / Linux / Linux下ARM裸机开发-交叉工具链
初识linux下ARM的裸机开发全过程。现在总结如下:首先说明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的知识,另一方面就是驱动的开发。一般情况下我们进行的系统上的开发。学习要点1、如何修改默认路径用户 root#vim /root/.bashrc添加:export PATH=$PATH:路径生效路径:source /root/.bashrc2、裸机开发流程:1编写裸机程序。2调试裸机程序。3生产二进制映像(编译、链接、格式转换)。4烧写/运行二进制映像。led.lds led.SMakefile编译:arm-linux-gcc -g -c led.S 生产led.o链接:arm-linux-ld -Tled.lds -o led.elf led.o格式转换:arm-linux-objcopy -O binary led.elf led.bin3、Makefileall: led.o
arm-linux-ld -Tled.lds -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.binled.o : led.S
arm-linux-gcc -g -o led.o -c led.S.PHONY: clean
clean:
rm *.o led.elf led.bin4、烧写与运行运用superboot与开发板进行通信,用dnw下载映像程序到nandflash。以nandflash重新启动6410,可以看到led亮起来了。烧写的整个过程都是在windowsXP下进行的,如何在linux下运用minicom代替超级终端?并结合linux下的dnw驱动烧写成功。再续有关linux下minicom与开发板通信的问题,本人查找了一个晚上的资料,终于搞定了。1、首先要设置vmware,vm-setting-hardware-serial port添加串口设备。然后重新启动linux,这个时候一定要保证超级终端是关闭的,以免串口被除linux以外的软件占用。这一步也是很多朋友忘记的,至关重要。2、minicom的设置,这很简单,root登录下,输入minicom -s 就进入了设置界面。保证115200 bps。串口要设置为/dev/ttyUSB0或ttyS0(我使用的是前者,在我的电脑上后者不能用,所以就用了一根usb转串口线就可以了,也不知道怎么回事)。退出时一定要保持,选择save to df1.3、设置好以后,直接输入minicom就可以启动了。sd卡模式下启动开发板就可以实现开发板与linux系统的通信了。关于dnw驱动安装不上的原因,我已经查实。原因是驱动编写时用的内核版本与我用的linux内核不是一个版本。输入命令insmod dnw_usb.ko然后输入dmesg可以查看到原因dnw_usb: version magic "2.6.32-279.el6.i686 SMP mod_unload modversions 686 " should be"2.6.18-53.el5xen SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1"5、初识交叉工具链1、什么是交叉工具链?链是集合的意思,交叉工具链也就是交叉工具集合的意思。之所以称为交叉工具,是因为嵌入式的开发有宿主机和目标机两个角色,宿主机主要用来编译、链接嵌入式软件,而嵌入式软件要在目标机上运行,也就是目标硬件。2、常用的交叉工具链交叉编译器 arm-linux-gcc (gcc编译器头文件在/usr/include/,而arm-linux-gcc头文件用arm-linux-gcc --help中的命令可以查看头文件地址)交叉链接器 arm-linux-ld交叉转换器 arm-linux-objcopy交叉ELF文件工具 arm-linux-readelf交叉反汇编器 arm-linux-objdump3、演示led.lds led.Sarm-linux-gcc -g -c led.Sled.o led.lds led.Sarm-linux-ld -Tled.lds -o led.elf led.oled.elf led.o led.lds led.S查看elf文件arm-linux-readelf -a led.elf编译产生的文件为elf文件,如果生产文件不能运行,一般会有三方面原因:arm-linux-gcc -static -o hello hello.c1、file查看运行环境(ARM、X86)2、readelf查看大小端3、查看库arm-linux-readelf -d hello可以自己用gcc和arm-linux-gcc两种方式编译生产elf文件,然后查看他们的运行环境。反汇编:arm-linux-objdump -O -S hello/led.elf >dumpcat dumpelf格式的文件不能在ARM中运行(带系统的ARM中如果含有elf解析器除外)。所以要进行格式的转换,将应用程序转换为二进制的映像程序。arm-linux-objcopy -O binary led.elf led.bin产生的led.bin文件可以在ARM中直接运行。查看帮助文件方法:arm-linux-gcc --help6、Makefile工具管理1、为什么要用Makefile主要是为了提高编译、链接的效率。我们可以将多条编译命令写在一个Makefile文件中,然后只用一条make命令就可以实现多条命令的功能。2、Makefile怎么构成规则和变量规则: 目标:依赖 <Tab>命令变量:自定义obj=func.o func1.o 命令中引用:$(obj) 系统默认:$^:所以依赖文件 $< 第一个依赖文件 $@目标文件3、Makefile使用技巧直接输入make默认执行第一条规则,第一条规则默认为最终目标。make 目标 选择性的执行某一个目标内核还有uboot中经常使用一种通用规则 %.o %.s1、取消回显:@命令2、使用文件名:系统默认make命令作用于makefile或Makefile文件。如果想作用于自己定义的文件则要这样进行:make -f file clean