首先说明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的知识,另一方面就是驱动的开发。一般情况下我们进行系统上的开发,不会用到裸机开发。
学习要点
1、如何修改默认路径
用户 root
#vim /root/.bashrc
添加:export PATH=$PATH:路径
生效路径:source /root/.bashrc
2、裸机开发流程: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.bin
3、Makefile
all: led.o
arm-linux-ld -Tled.lds -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin
led.o : led.S
arm-linux-gcc -g -o led.o -c led.S
.PHONY: clean
clean:
rm *.o led.elf led.bin
4、烧写与运行
运用超级终端与开发板进行通信,用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-objdump
3、演示
led.lds led.S
arm-linux-gcc -g -c led.S
led.o led.lds led.S
arm-linux-ld -Tled.lds -o led.elf led.o
led.elf led.o led.lds led.S
查看elf文件
arm-linux-readelf -a led.elf
编译产生的文件为elf文件,如果生产文件不能运行,一般会有三方面原因:
arm-linux-gcc -static -o hello hello.c
1、file查看运行环境(ARM、X86)
2、readelf查看大小端
3、查看库arm-linux-readelf -d hello
可以自己用gcc和arm-linux-gcc两种方式编译生产elf文件,然后查看他们的运行环境。
反汇编:arm-linux-objdump -D -S hello/led.elf >dump
cat dump
elf格式的文件不能在ARM中运行(带系统的ARM中如果含有elf解析器除外)。所以要进行格式的转换,将应用程序转换为二进制的映像程序。
arm-linux-objcopy -O binary led.elf led.bin
产生的led.bin文件可以在ARM中直接运行。
查看帮助文件方法:arm-linux-gcc --help
6、Makefile工具管理
1、为什么要用Makefile
主要是为了提高编译、链接的效率。我们可以将多条编译命令写在一个Makefile文件中,然后只用一条make命令就可以实现多条命令的功能。
2、Makefile怎么构成
规则和变量
规则: 目标:依赖
变量:自定义obj=func.o func1.o
命令中引用:$(obj)
系统默认:$^:所以依赖文件 $< 第一个依赖文件 $@目标文件
3、Makefile使用技巧
直接输入make默认执行第一条规则,第一条规则默认为最终目标。
make 目标 选择性的执行某一个目标
内核还有uboot中经常使用一种通用规则 %.o %.s
1、取消回显:@命令
2、使用文件名:系统默认make命令作用于makefile或Makefile文件。如果想作用于自己定义的文件则要这样进行:
make -f file clean
7、链接器脚本
1、链接器脚本有什么作用?
在源程序不变的情况下,不同的链接器脚本对程序会产生不同的效果。特别在设置代码段首文件的时候,这会对程序的后期运行产生很大的作用。
2、链接器脚本的构成
主要分为:段
起始链接地址
对齐设置
使用变量
设置代码段首文件
下面是一个例子,可以参考:
ENTRY(_start) SECTIONS { . = 0x50008000; //起始地址,.代表当前地址 . = ALIGN(4); //对齐方式为4字节对齐,就是说存取地址要为4的倍数 .text : //代码段 { led.o (.text) //代码段首文件设置 *(.text) } . = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } . = ALIGN(4); .data : //数据段 { *(.data) } . = ALIGN(4); bss_start = .; //使用变量,此变量可以在源程序中应用 .bss //未初始化全局变量 { *(.bss) . = ALIGN(4); } bss_end = .; }
下面有几个问题说明一下:对齐设置是为了提高数据的存取效率。代码段首文件是cpu上电时开始运行的文件。
7、eclipse的集成开发
1、为什么要使用eclipse
目的是集成编译和在线调试
2、整个的集成开发环境构成
eclipse arm-linux-gdb jlinkgdbserver
1、eclipse的安装十分简单,解压缩后,直接运行就可以了。
2、arm-linux-gdb解压缩后还要设置默认路径,因为之前已经安装了arm-tools里面含有arm-linux-gdb。设置默认路径时要将刚安装的gdb路径放在前面,因为这里的默认路径执行靠前优先的原则。
3、jlinkgdbserver的安装要相对复杂一点,解压缩后还要三个文件到新的文件夹下:1、cp -d libjlinkarm.so.* /usr/lib -f 2、cp 45-jlink.rules /etc/udev/rules.d/。完成之后,运行jlinkgdbserver就可以了。
3、eclipse使用之前的配置
1、首先安装jlink插件,这要在网上下载然后安装。方法:选择help-installnewsofteware然后填入网址http://opensource.zylin.com/zylincdt直接点击ok,等待找到zylin embedded cdt 选中后点击next 再next 选accept 后点击finish。最后restart。
2、配置eclipse
1、file-new-makefile project with existing code
2、去掉自动组件:project-bulid automatical
3、如何编译
选中工程led后,点project中的build all在console中可以查看make。
4、调试,Debug-debug configurations然后双击zylin embedded debug
5、main:选中c/c++ application的browse选择led.elf。Debugger:arm-linux-gdb,去掉stop on startup at maincommands:运行geditinit6410进行初始化设置。之后就可以使用eclipse。
上一篇:ARM裸机开发bootloader时钟初始化ARM跑快了
下一篇:ARM裸机开发bootloader汇编语言
推荐阅读最新更新时间:2024-03-16 14:56
设计资源 培训 开发板 精华推荐
- 让是德科技带我们一起 了解汽车电子车载系统解决方案 看视频答题赢好礼!
- TI直播| 低功耗技术在 Wi-Fi 摄像头及 PIR 红外传感器设计中的应用
- 免费体验业界最快编译速度&最好性能 Quartus II v15.0网页版下载有礼!
- Littelfuse 高效 • 可靠 • 精准的功率控制和电路保护方案在工业、交通、通讯、医疗及新能源中的应用
- 【EE团】TI M4开发板超低价尝鲜体验,分享心得赢百元返现!
- 西门子白皮书下载《物联网在电子制造行业的成功应用》
- 浪漫爱情季:TI MSP430,狠狠爱!
- 【EEWORLD第二十五届】2011年04月社区明星人物揭晓!
- 免费申请评测:1.3元起的国产USB和Touchkey单片机CH554评估板