在搭建调试uboot的环境中,参考了网上很多资料,调试uboot比较廉价的方案。大概有
*硬件使用jlink 在linux虚拟机下编译,调试使用gdb 通过TCP 同Windows下的jlink gdbserver
*硬件使用openJTAG 在Linux下 使用openOCD和gdb
*硬件使用jlink 在linux下使用openOCD和gdb。
本人也是使用了这种方法,因为手里只有jlink。其实这个方案和使用openJTAG的方案差不多一样。在搭建时参考了《Eclipse,OpenOCD,OpenJTAGv3.1嵌入式开发教程版本4》。这是介绍的比较好的一份资料。
本人用的环境如下:
操作系统:ubuntu 12.04 (vmware中运行)
软件: openOCD 0.7.0
硬件: jlink V8
开发板是TQ2440
前提条件:安装好了交叉编译环境。我这里是arm-linux-gcc,当然环境变量配好。
安装openOCD
下载openOCD源码包 解压后 进入目录,在安装前先看下README是个好习惯,看到需先安装libftdi和libusb.
先安装这两个
然后在openOCD源码包中 执行
- ./configure --prefix=/xx/ --enable-maintainer-mode --enable-jlink //--prefix=/xx/是你想安装到的目录
- make
- make install
然后配置下环境变量
安装insight
下载insigh安装包 insight只是gdb的一个图形界面前端,安装时会也会有交叉调试器。
- ./configure --prefix=/xx/ --target=arm-linux //target是你要用于什么平台,host是在哪一平台运行。
- make
- make install
然后配置下环境变量
安装完毕后配置openOCD,这个可以参考openOCD的手册。
主要就是写一个openocd.cfg 在执行openOCD时会使用,其搜索路径参考手册
其实在安装目录中的script目录中有许多已经写好的配置可以调用
这里我选择该目录下两个脚本是jlink.cfg和samsung_s3c2440.cfg
这里我选择该目录下两个脚本是jlink.cfg和samsung_s3c2440.cfg
主要配置有以下几个方面
Daemon (守护);interface(接口);target(目标);board(主板)
如果你是mini2440开发板 在script/board目录下有mini2440.cfg配置文件。可以直接引用。再引用interface中的jlink.cfg。你的配置文件就两行引用差不多就可以了
此时我们将openocd.cfg文件写在uboot目录下
进入uboot目录(uboot已经编译好)。
开发板上电
启动openOCD 直接输入
$:openocd -f jlink.cfg -f samsung_s3c2440.cfg
这个要在root用户下执行,脚本因为就在当前目录下所以不用指定
将出现如下信息
- root@CheneyMec:/opt/openocd/bin# ./openocd -f jlink.cfg -f samsung_s3c2440.cfg
Open On-Chip Debugger 0.7.0 (2013-12-19-14:57)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst
Info : J-Link initialization started / target CPU reset initiated
Info : J-Link ARM V8 compiled Aug 24 2011 17:23:32
Info : J-Link caps 0xb9ff7bbf
Info : J-Link hw version 80000
Info : J-Link hw type J-Link
Info : J-Link max mem block 9424
Info : J-Link configuration
Info : USB-Address: 0x0
Info : Kickstart power on JTAG-pin 19: 0xffffffff
Info : Vref = 3.287 TCK = 1 TDI = 0 TDO = 0 TMS = 0 SRST = 0 TRST = 0
Info : J-Link JTAG Interface ready
Error: An adapter speed is not selected in the init script. Insert a call to adapter_khz or jtag_rclk to proceed.
in procedure 'init'
- 脚本有错误在jlink.cfg的最后添加adapter_khz 6000,然后继续使用上述命令;将显示如下信息,说明成功了。
- Open On-Chip Debugger 0.7.0 (2013-12-19-14:57)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 6000 kHz
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst
Info : J-Link initialization started / target CPU reset initiated
Info : J-Link ARM V8 compiled Aug 24 2011 17:23:32
Info : J-Link caps 0xb9ff7bbf
Info : J-Link hw version 80000
Info : J-Link hw type J-Link
Info : J-Link max mem block 9424
Info : J-Link configuration
Info : USB-Address: 0x0
Info : Kickstart power on JTAG-pin 19: 0xffffffff
Info : Vref = 3.280 TCK = 1 TDI = 0 TDO = 0 TMS = 0 SRST = 0 TRST = 0
Info : J-Link JTAG Interface ready
Info : clock speed 6000 kHz
Info : JTAG tap: s3c2440.cpu tap/device found: 0x0032409d (mfg: 0x04e, part: 0x0324, ver: 0x0)
Info : Embedded ICE version 2
Info : s3c2440.cpu: hardware has 2 breakpoint/watchpoint units
这时你的openOCD已经启动成功
然后启动insight 之间在uboot目录下输入
$:arm-linux-insight
可看到insight打开了 然后打开console窗口
gdb的命令可以在此窗口输入。也可以写成脚本自动依次执行
- file /xx/xx/u-boot //加载你的uboot /xx/xx/是你的路径
- target remote localhost:xxxx //xxxx是你在opencfg中定义的gdb端口号。此命令使高蛋白链接到openOCD
- monitor halt //停止目标板运行
- monitor arm920t cp15 2 0 //关闭MMU,I/D CACHE
- monitor arm7_9 sw_bkpts enable //打开调试断点
- monitor halt
- load //将uboot写入目标板内存
- break start_code //插入一个断点
- continue //将运行到断点处
然后就可以单步等操作调试了。