学习ARM开发的第一件事就是先搭建编程环境,如今有非常多的IDE以及调试软件/仿真硬件,但能支持Cortex-A8的低价仿真器很少。本文介绍一种能仿真FS_S5PC100的低成本仿真器,目前价格不超过200元。
一、 OpenJtag仿真器介绍
目前市面上的仿真器数量众多,并且价格也有很大差异,如Keil ,IAR,RowleyAssociates等,它们的安装使用很便利,并且功能强大,但是价格很贵,几百美元甚至更多,还要购买相应的硬件,如J-LINK,U-LINK等USB到JTAG的转换器。
针对个人学习还是企业需求的话,则需要从多方面出现选择一款适合的仿真器。如果是学习使用,推荐使用OpenJtag。价格便宜,使用开源的openOCD接口,操作稍微繁琐。
如果需要专业一些的调试,则应该选择TRACE 32这类专业级的仿真器,操作简单,调试功能强大,但价格昂贵。
Openjtag是一款基于开源的OpenOcd接口的调试方案,外观小巧,但有着很全的调试功能,集成了一个usb转串口,打印终端操作更容易,再加上eclipse这样强大的集成开发环境,使得它同样能成为工程师的首选,它有着如下的硬件特点:
图1 OpenJtag仿真器
● USB特性
USB2.0全速接口
USB电源供电
● JTAG特性
IEEE 1149.1标准
大速率6Mbits/s (是并口JTAG的150倍)
Multi-ICE10-pin 插座
Multi-ICE20-pin 插座
目标系统3.0v
● 集成的USB转串口
RS232标准
在线调试功能
支持多种cpu系列,arm经典系列,cortex众多系列。
再来看看配套的软件有哪些特点
● 集成的USB转串口Eclipse集成开发环境
提供实时调试功能。如单步,全速运行,复位,软/硬断点,跳转动态查看寄存器,存储器,变量观察。
● 源码级别调试器OpenOCD,开源,并且提供良好的交互界面
● 支持烧写nor/nand Flash。
二、 eclipse 环境搭建
2.1 下载并安装eclipse
本书大量实验代码都可在eclipse下进行编译(以windows为例),因此重点介绍eclipse的用法,先到官方网站上下一个新的eclipse。
网址:http://www.eclipse.org/downloads/
注意下载的版本应该是集成CDT的Eclipse IDE for C/C++ Developers。下载完成后直接安装,注意设置安装路径。
2.2 下载并安装JDK6.0
1、同样在官方网站上下载JDK6.0
2、安装时,选择自动添加环境变量,这样安装好后,就不需要再去添加,比较方便,不过也可以手动添加。
2.3 下载学习代码
后面所用到的相关代码,读者都可以从http://www.hqyj.com/FarsightBBS/这个论坛上获得。请读者自行下载并分析之。
2.4 工程
1、运行eclipse,如果正常运行的话,可以看到如下的界面
图2 eclipse的启动界面
2、新建工程
(1)File->New->C project,如下图所示。
图3 创建工程
(2)在弹出的窗口中,按照下图所示分别填写工程名,这个是可以自己喜好填写,其次是你的源代码的存放位置,剩下只要按照图上的方式选择即可,后点击finish。
图4 创建选项
(3)做到这里,应该会出现类似的工程源文件列表(下图是笔者当前的工程列表),它会自动找出工程目录下的所有文件。这样我们的前期准备工作就做完了,剩下的就需要做两件事,一个是安装交叉编译工具链,一个是安装GDB,后面会逐一介绍。
图5 创建后的界面
(4)安装交叉编译工具链
首先,请到http://www.yagarto.de/这个地址下载新的工具链,将YAGARTO Tools以及YAGARTO GNU ARM toolchain下载并安装。
图6 下载列表
简单介绍下这两个工具,YAGARTO是GNU 交叉编译器的基础上制作的在windows下使用的arm交叉编译工具链,除了是在windows下使用意外,其他和linux下使用没有太大区别,推荐使用当前新版本。
提示:安装的时候好按照默认的方式安装,并且都选择自动添加环境变量。
安装好后,请立刻作如下的测试:
图7 cmd下测试工具
打开cmd,并输入命令,arm-none-eabi-gcc -v 看是否有类似的打印信息,注意,读者的命令名称可能会和笔者的不同,所以读者应当参看安装主目录下的bin目录,并以目录下的命令的名称为准。
(5)开始编译吧
在开始编译前,还有件事不得不去做,那就是编写Makefile,以及lds脚本链接文件,既然是GNU-ARM风格,当然要按照它的规则来了,其实编写Makefile是为了给我们刚才下的交叉编译工具使用,现在列出一个简单的Makefile样本以及lds样本。
● Makefile例子:
CROSS_COMPILE=arm-none-eabi-
SRC=leds
all : start.o leds.o
$(CROSS_COMPILE)ld –T $(SRC).lds -o $(SRC).elf $^
$(CROSS_COMPILE)objcopy -O binary $(SRC).elf $(SRC).bin
$(CROSS_COMPILE)objdump -D $(SRC).elf > $(SRC).dis
%.o : %.S
$(CROSS_COMPILE)gcc -g -c -O0 -o $@ $^
%.o : %.c
$(CROSS_COMPILE)gcc -g -c -O0 -o $@ $^
clean:
rm -f *.o *.bin *.elf *.dis
读者只需要改变CROSS_COMPILE以及SRC这两个环境变量就可以使用了。
● test.lds链接脚本例子:
SECTIONS
{
. = 0x20008000;
.text :
{
start.o
* (.text)
}
. = ALIGN(4);
.rodata :
{
* (.rodata)
}
. = ALIGN(4);
.data :
{
* (.data)
}
. = ALIGN(4);
bss_start = . ;
.bss :
{
* (.bss)
* (.common)
}
bss_end = . ;
}
(6)编译并烧写程序
如果上面步骤都正确的话,那么可以开始编译了,看到下图所示:
图8 提示信息
图9 eclipse中的MAKE操作
Project -> Clean ,会执行Makefile中clean这个段内容。Build ALL会执行一次make,相当于按照makefile的规则编译一次。在console中会打印编译信息,对我们编译程序很有帮助。
图10 console打印
将生成的.bin文件烧写到s5pc100上可以看到流水灯现象。
2.5 使用OpenJtag进行调试
1、点击图示中的按钮,并打开Debug configuration,进行相应的配置,并将OpenJtag与开发板连接好,准备开始调试。
图11 Debug
2、如何设置eclipse的debug配置项
图12 配置一
图13 配置二
图14 配置三
后点击Apply,并且点击Debug按钮后,就会跳转到debug界面,如图所示:
图15 调试主界面
从图中可以看出一个大概的调试界面,下面图中的按钮是和调试有关的,有单步,step over,step in方式。还有eclipse自带的挂起,中断连接功能。下面简单介绍下各个窗口的用途。
图5-17 调试按钮
该窗开用来查看函数变量,可以看到当前i,j的值。
图16 查看变量
该窗口是用来查看ARM寄存器的窗口,从r0-r15通用寄存器的值可以被很清楚的观察到,并且还可观察到 cpsr当前状态寄存器的值。
图17 查看寄存器
该窗口则是单步调试的时候,代码的跟踪显示,左侧的箭头则是当前pc位置。
下面紧接着的窗口则是断点信息。
图18 单步调试
到这里,已从大体上介绍eclipse的使用,工程的创建,编译以及如何使用JTAG调试,如果要熟练掌握的话,还需要大量的实验做练习,本书说用的实验代码均可到华清远见官网论坛上找到,地址是:http://www.hqyj.com/FarsightBBS/