使用硬件:FriendlyArm mini2440 开发板一个,J-Link v7 一个。
工做平台:可运行 virtual box 版 winxp 的 FC13。
linux
这个 J-Link 有很大的欺骗性,其表面塑料壳上有 www.100ask.net 和 OpenJTAG 字样,这让我一直试图以 OpenJTAG 的方式操纵它。但卖家给个人清单上确实代表“一个J-LINK全功能仿真器V7带USB转串口功能”,唉,这个壳子实在是让人无力吐槽了。Anyway,若是你在linux 下 lsusb 看到相似:
Bus 002 Device 005: ID 1366:0101 SEGGER J-Link ARM
别再怀疑了,你手里的是 J-Link。若是你用 OpenOCD,interface 用 jlink 吧。
windows
s3c2440A 启动模式有2个,你们所熟知的从 nand 和从 nor 启动:机械点说,是从nand 或 nor 拷贝前4k数据到片内ram,而后把 pc 寄存器瞄准片内ram开始工做cpu。所以不管哪一种启动模式nand和nor都是能够访问的,区别只在片内ram的地址空间。nand模式下是0x0,nor模式下是0x40000000。
以前看了韦东山的《嵌入式Linux应用开发彻底手册》,这本书自己仍是不错的,只惋惜书中标配的 s3c2440A 开发板不是我手头这个,这意味着外围电路接法会有不一样,例如个人 mini2440 有6个按键且全接在GPG上,在作key_led 这个实验时就不能照搬代码了。启动模式会影响 .text 段和 sp 指针位置,关于这个后面还会说到。
.net
用 OpenOCD 在 Linux 上玩 J-Link 一直不顺利,这让我不得不先使用 windows。若是你和我同样使用的虚拟机,在其设备菜单上把SEGGER J-Link勾上就够了。安装 Setup_JLinkARM_V402.exe会获得 J-Link Commander 和 J-Link GDB Server还有其余几个程序,但我目前只用了这两个。
1. 连好 J-Link,记着你用的启动模式,开发板上电。
2. 打开 J-Link Commander,若是正常或显示一下板子信息,具体看相关文档。
3. 默认会处在 halt 状态,若是不放心输入 'h' 按回车;halt后能够用'regs'看当前各寄存器状态。
4. loadbin foo.bar 0x0/0x40000000,这里选0x0仍是0x40000000取决于你怎么启动的板子,显然nand用0x0,nor用0x40000000,由于如今只有这点片内ram可用。
5. 输入'g'回车。
J-Link 不是彻底稳定,若是有时程序跑飞了,可能和你的芯片设置以及 jtag 速率有关系,通常重复上述3~5就够了。中途能够'h'和'regs'查看寄存器状态,看看是否是还在你掌控中。指针
另外还能够用 J-Link GDB Server配合Linux上的 arm-linux-gdb 进行调试。
1. 连好 J-Link,记着你用的启动模式,开发板上电。
2. 打开 J-Link GDB Server,若是正常会显示 Jtag/Target 状态等信息,也就是会有1个红灯加3个绿灯。
3. 在Linux里打开arm-linux-gdb foo,这个foo就是用arm-linux-gcc 编译出来的待测程序了。在编译的时候就已经指定好连接路径了(用-T),必定要和当前的启动模式配套(这里耗时很多,泪奔...)。
4. gdb 中输入 target remote WINDOWS-IP:2331,若是没有防火墙拦着你到WINDOWS-IP的路径,J-Link GDB Server最后一盏绿灯将亮起。
5. 下来就是在 gdb 里输入 load 和 c了,load将用编译时指定的加载路径载入二进制码,c将退出halt状态开启cpu。在gdb里若是想看寄存器状态,先ctrl+c在 i r 就行了。
调试
这些成功以后又想试试踢开 winxp,改用 OpenOCD做 gdb server,注意到启动模式和J-Link 不彻底稳定这两个因素后,一切也都比较顺利了。用了 OpenOCD 0.7.0(当前最新的 release),配合 mini2440.cfg 和 jlink.cfg。编译的时候别忘了把 --enable-jlink 带上。
server