mini2440 + jlink 第一步

使用硬件:FriendlyArm mini2440 开发板一个,J-Link v7 一个。
工作平台:可运行 virtual box 版 winxp 的 FC13。

这个 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 吧。

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 指针位置,关于这个后面还会说到。

用 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 带上。

你可能感兴趣的:(Jlink,openocd)