OpenJTAG 来烧写、调试 cortex M3
1 使用 Eclipse 调试程序:以 S3C2410/S3C2440 的 u-boot 程序为例
注意:调试网上下载的 u-boot 时,需要定义 CONFIG_SKIP_LOWLEVEL_INIT,它表示“跳过底层的初始始化”,就是不要初始化存储控制器,不要再次复制 u-boot 本身到 SDRAM中。对于光盘中的 u-boot,已经增加的自动识别代码,无需定义这个宏。
虽然不能在 Windows 下编译 u-boot,但是只要有 elf 格式的可执行文件和源代码,还是可以在 Eclipse 下调试的。
E:\eclipse_projects\u-boot 目录下的 u-boot.bin、u-boot 是 u-boot-1.1.6_OpenJTAG.tar.bz2 在Linux 下编译好的可执行文件,u-boot.bin 是二进制格式,u-boot 是 elf 格式。
- 首先,在 E:\eclipse_projects\u-boot 目录下将 u-boot-1.1.6_OpenJTAG.tar.bz2 解压缩。
- 然后,仿照前面创建 leds 工程的方法创建 u-boot 工程。
- 最后,为 u-boot 重新配置调试器,配置内容如图 2.62~2.67 所示。
Elf 格式的文件本身包含有路径信息,u-boot 是在 Linux 下编译的,现在要在 Windows 下调试,肯定要更改路径信息──这称为“Path Mapping”。
光盘上 u-boot 可执行文件的编译路径为:
/work/eclipse_projects/u-boot/u-boot-1.1.6_OpenJTAG
在 Windows 下 u-boot 源码路径为
E:/eclipse_projects/u-boot/u-boot-1.1.6_OpenJTAG。
可以使用以下 gdb 命令进行设置,FROM 表示原来的路径,TO 表示修改后的路径。
set substitute-path FROM TO
图 2.64 进行命令设置,命令罗列如下:
set substitute-path /work/eclipse_projects/u-boot/u-boot-1.1.6_OpenJTAG E:/eclipse_projects/u-boot/u-boot-1.1.6_OpenJTAG load break start_armboot c
注 1:以下的命令是进行“Path Mapping”:
set substitute-path /work/eclipse_projects/u-boot/u-boot-1.1.6_OpenJTAG E:/eclipse_projects/u-boot/u-boot-1.1.6_OpenJTAG
注 2:u-boot 执行时调用的第 1 个 C 函数是 start_armboot,它没有 main 函数。
注3:Eclipse查找源文件的默认方式是搜索工程目录下的文件(对于简单的程序,比如leds,可以使用默认方式),由于我们已经在图 2.64 中设置了“Path Mapping”,要把默认方式删除,如图 2.65 所示。
为了让 Eclipse 能正确定位到源文件,还得在图 2.65 中使用“Add” 按钮增加“Path Mapping”──这是个不起作用的“Path Mapping”。原因在于:Linux 下路径名用“/”,而Windows 下路径名用“\”,Eclipse 会把路径名里的“/”强制改为“\”,使得“Path Mapping”不起作用。直正起使用的是图 2.64 中的第 1 个命令。
图 2.66~图 2.67 用来增加一个“不起作用的”“Path Mapping”。在图 2.66 中点“Add”按钮,在出现的对话框中选中“Path Mapping”,再点“OK”。
在图 2.67 中,点击“Add”按钮,在“Compilation path”里填入编译 u-boot 时代码的路径,就是/work/projects/OpenPDA/u-boot-1.1.6_OpenJTAG;在“Local file system path”中选择当前的、本地的、要调试的源码路径,即 E:/eclipse_projects/u-boot/u-boot-1.1.6_OpenJTAG
配置完成后,先启动 OpenOCD,然后启动“u-boot Default”调试器,稍等一会就可以看到如图 2.68 所示的界面,u-boot 停在 start_armboot 函数的第一条指令上。
除调试器的设置不同外,u-boot 工程的调试方法与 leds 工程的基本一样,不再赘述。
2 使用 OpenOCD 烧写 cortex M3
把 OpenJTAG 的 JTAG 线与 cortex M3 连接好后,上电。
启动 OpenJTAG GUI,在“target”里选择“stm32”,然后点击“connect”,即可识别出cortex M3。如图 2.85 所示。
点击“telnet”按钮,即可在 telnet 界面使用 openocd 本身的命令烧写 Flash:
- ① 执行以下命令识别 Flash,如图 2.86 所示:
halt flash probe 0
- ② 执行以下命令擦除烧写 Flash,如图 2.87 所示:
flash write_image erase STM3210B.bin 0x08000000 verify_image STM3210B.bin 0x08000000
- 第一条命令的含义为:烧写 STM3210B.bin 文件到的 0x08000000 地址──这是 Flash 的开始地址,“erase”表示自动擦除。
- 第二条命令是较验。
注意:如果第一条命令不成功,多执行几次就可以了;最后再用 verify_image 命令较验一下。
可以执行“help”命令查看更多的命令,或者“help 命令”查看这个命令的详细用法。比如“help flash”。