第3季-裸奔吧-ARM-专题0/专题1
2013年9月21日 23:57:42
专题0-课程规划与学习方法

五步学习法
1.硬件相关理论
2.导读芯片手册
3.四维导图设计(流程图)
4.程序设计
5.在线调试程序
2013年9月22日 00:01:12
专题1-工欲善其事,必先利其器
第1课-裸机开发快速体验
1-1安装交叉工具链
新建新课程文件夹,进入文件夹
cd /home/S3/Part1/lesson1/,拷贝ARM-Tools工具包。
解压 tar xvzf ARM-Tools.tar.gz
cd ARM-tools/
安装工具链
tar xvzf arm-linux-gcc-4.3.2.tgz -C /
进入到解压到的目录 cd /usr/local/arm/4.3.2/bin
修改环境变量,使arm-linux-gcc成为全局命令。
打开文件 vim /root/.bashrc
打开后添加 export PATH=$PATH:/usr/local/arm/4.3.2/bin 保存
使用命令使修改生效 source /root/.bashrc
再次运行 arm-linux-gcc 就不会提示 command not found
1-2编译裸机程序
复制裸机程序的三个文件到课程文件夹中
然后使用交叉工具链生成led.o文件 arm-linux-gcc -g -c led.S 会产生 led.o文件
然后使用链接器脚本生成.elf文件 arm-linux-ld -Tled.lds -o led.elf led.o
然后将.elf转换为二进制的文件 arm-linux-objcopy -O binary led.elf led.bin
也可以使用Makefile来生成以上文件:
使用make clean清除一下之前的文件
使用 make命令,也能生成led.bin文件
烧写二进制文件到开发板
先写入bootloader到SD卡,连接串口,然后从SD卡启动,
先格式化NoadFlash,再选择[v] Download uboot.bin
进入到 cd ARM-tools/ 目录,insmod dnw_usb.ko 安装驱动
在虚拟机中连接USB接口。
运行dnw命令 ./dnw ../led.bin 50000000
终端显示:Sent 100% 234 bytes !OK
串口显示:DNW download succeeded
Download uboot succeed
此时,从NandFlash启动开发板,LED灯会点亮。
2013年9月22日 01:35:32
第2课-交叉工具链
#include<stdio.h>
int main()
{
printf("hello world->\n");
}
使用 arm-linux-gcc
常用交叉工具:
1.交叉编译器 arm-linux-gcc 使用方法和gcc完全相同,不同之处在于,gcc是在/usr/include目录下寻找头文件,而arm-linux-gcc是在(使用arm-linux-gcc --help可以查看帮助)
e.g arm-linux-gcc -g -c led.s 只编译,不链接,生成中间文件led.o
2.交叉链接器 arm-linux-ld
e.g arm-linux-ld -Tled.lds -o led.elf led.o 将led.o文件链接成led.elf文件
-T 说明是连接器脚本 -o 指明链接之后的程序的名字 led.o 所在的位置是用来说明,这个elf文件是由哪些文件来连接生成的。
3.交叉转换器 arm-linux-readelf
e.g1 arm-linux-readelf -a led.elf 可以查看程序运行的平台(file hello命令来查看程序的属性)以及大端小端运行模式。
-a表示要查看这个文件的全部的信息
e.g2 如果以上两种可能都正确,程序还是不能运行,则要判断程序所在的平台是否包含了所需的库文件
arm-linux-readelf -d hello (查看所需库)
4.交叉ELF文件工具 arm-linux-objdump
使用arm-linux-gcc hello.c -o hello命令生成的hello程序实际是一个elf格式的文件,如下图。

使用 arm-linux-objdump -D -S hello >dump (如果不加>dump会直接显示反汇编生成的文件,加了会输出到dump的文件中,可以使用vim dump命令查看反汇编生成的文件)
也可以在编译时先使用 arm-linux-gcc -g hello.c -o hello 命令生成调试信息,
然后再使用 arm-linux-objdump -D -S hello >dump 将C语言和反汇编生成的文件做对比
5.交叉反汇编器 arm-linux-objcopy
使用交叉链接器 arm-linux-ld 生成的是elf格式的文件。不能在ARM平台上运行(PC机之所以能运行是因为Linux自带了elf文件解析器,而ARM不带),所以需要elf->2进制文件。
使用 arm-linux-objcopy -O binary led.elf leb.bin
-O表明输出文件的格式
2013年9月25日 23:19:38
第3课-Makefile工程管理
2013年9月25日 23:19:49
第4课-链接器脚本
2013年9月22日 00:02:33
第5课-Eclipse集成开发环境
1-1.格式化Nand Flash
Farmat the Nand Flash
1-2.硬件连接
JTAG,串口,电源
从Nand启动
2-1.安装gdb server
解压 arm-linux-gdb-7.5.tar文件 tar xvzf arm-linux-gdb-7.5.tar.gz
进入 cd arm-linux-gdb-7.5文件目录
执行 ./build-all
2.2.修改环境变量
vim /root/.bashrc
在/usr/local/arm/4.3.2/bin/上边添加
export PATH=$PATH:/opt/arm-linux-gdb/bin/
2-3.保存,注销登录,查看arm-linux-gdb
版本显示:GNU gdb (GDB) 7.5
按q可以退出。
3-1.安装Jlink软件
解压 tar xvzf JLink_Linux_V434a.tgz
进入 cd JLink_Linux_V434a 目录
3-2.复制文件
cp -d libjlinkarm.so* /usr/lib -f
cp 45-jlink.rules /etc/udev/rules.d/
3-3.运行 ./JLinkGDBServer
(进入 /home/S3/Part1/lesson1/ARM-tools/JLink_Linux_V434a 目录,SD卡启动)
读出ARM11
4-1.安装eclipse
使用 which eclipse 找到eclipse安装路径
进入到 cd /usr/bin 目录下
使用 mv eclipse eclipse-back 给原来的eclipse改个名字
因为原来的eclipse版本不对。
4-2.回到 cd /home/S3/Part1/lesson1/ARM-tools 目录
解压 tar xvzf eclipse-cpp-helios-SR2-linux-gtk.tar.gz
进入 cd eclipse 目录
4-3.运行 ./eclipse 可执行程序
选择工程路径,修改为 /home/S3/Part1/lesson1 选择OK
4-4.启动后会出现错误,再次启动。
5-1.配置eclipse
安装插件,首先确保linux能上网

输入地址 http://opensource.zylin.com/zylincdt
点击Add 出现Pending 等待之后出现 Zylin Em....插件,选择插件,然后点击 Next 之后安装。安装完成后选择 Restart Now 重启eclipse
5-2 新建工程
File-New-MakeFileProject...
输入工程名字,找到工程文件路径。
5-3编译工程
Project-BuildAuto... 去掉自动编译
点击工程,右键CleanProject 清除编译好的文件
点击Project-BuildAll 即可编译工程。
5-4点击Dubeg,配置文件
双击最下边的Zylin添加调试文件
输入调试名称,找到调试的elf文件,/home/S3/Part1/lesson1/led/led.elf
修改Debugger文件,去跳停止到main处,修改GDB debugger的工具名为arm-linux-gdb
在第三也Conmads中添加初始化命令,使用gedit打开init文件,复制,然后点击 Apply 保存。
5-5点击Dubeg,使用刚才的调试名称的文件启动调试。调试窗口如下:


Variables:变量
Registers:寄存器
Breakpoints:断点
Dubeg:调试
错误

浙公网安备 33010602011771号