J-Link 硬件连接
参考下图将 J-Link 的 SWCLK 和 SWDIO 连接到 SoC 的 SWD CLK 和 SWD DATA,然后将 J-Link 连接到 PC。
J-Link 连接到 SWD 的接线图
备注
J-Link 的版本必须高于或等于 v9。
J-Link 软件连接和配置
从 SEGGER 官网下载并安装最新版 GDB Server:
CA32 采用对称双核架构,支持双核独立调试。各核对应连接脚本:
ca32_jlink_core0.bat
(默认端口 2337)ca32_jlink_core1.bat
(默认端口 2339)
小心
开启 core1 的 GDB server 时,遇到断点/观察点会导致双核同时挂起,但继续运行 core1 时,core0 不会同步运行(J-Link 软件限制)。
如需独立调试 core0/core1,请注释 AP3_CA32_Corex.JLinkScript 中的 EnableCrossTrigger()。
void InitTarget(void) {
Report("******************************************************");
Report("J-Link script: AmebaSmart (Cortex-A32 CPU0) J-Link script");
Report("******************************************************");
/*...*/
//EnableCrossTrigger(); // 按需注释
}
连接J-Link
Core0 连接:
双击
{SDK}\amebasmart_gcc_project\utils\jlink_script\ca32_jlink_core0.bat
Core1 连接:
双击
{SDK}\amebasmart_gcc_project\utils\jlink_script\ca32_jlink_core1.bat
配置 J-Link
TBD
按以下步骤部署 GDB Server:
下载最新版 J-Link 软件包
执行安装命令:
$ dpkg -i jlink_6.0.7_x86_64.deb
验证安装结果:
``/opt/SEGGER/JLink/JLinkGDBServer``
连接 J-Link
打开新终端,进入目录
amebalite_gcc_project/utils/jlink_script
执行命令:
$/opt/SEGGER/JLink/JLinkGDBServer -select USB-device Cortex-M33 -if SWD -scriptfile AP0_KM4.JLinkScript port 2335


设置 J-Link
打开新终端,进入目录
project_km4
执行命令:
$make setup GDB_SERVER=jlink

KM4 连接 J-Link
打开新终端,进入目录
amebalite_gcc_project/utils/jlink_script
执行命令:
$/opt/SEGGER/JLink/JLinkExe -device Cortex-M33 -if swd -autoconnect 1 -speed 1000 -JLinkScriptFile KM4_SEL.JLinkScript


KR4 连接 J-Link
完成 KM4 连接后,在相同目录下执行:
$/opt/SEGGER/JLink/JLinkGDBServer -select USB-device RV32 -if cjtag -port 2331
注意:需保持此终端开启以进行 KR4 调试,KM4 终端可关闭


设置 J-Link
打开新终端,进入目录
project_kr4
执行命令:
$make setup GDB_SERVER=jlink

连接 J-Link
打开新终端,进入目录
amebalite_gcc_project/utils/jlink_script
执行命令:
$/opt/SEGGER/JLink/JLinkGDBServer -select USB-device Cortex-M33 -if SWD -scriptfile AP0_KM4.JLinkScript port 2335


设置 J-Link
打开新终端,进入目录
project_km4
执行命令:
$make setup GDB_SERVER=jlink

KM4 连接 J-Link
打开新终端,进入目录
amebalite_gcc_project/utils/jlink_script
执行命令:
$/opt/SEGGER/JLink/JLinkExe -device Cortex-M33 -if swd -autoconnect 1 -speed 1000 -JLinkScriptFile KM4_SEL.JLinkScript


KR4 连接 J-Link
完成 KM4 连接后,在相同目录下执行:
$/opt/SEGGER/JLink/JLinkGDBServer -select USB-device RV32 -if cjtag -port 2331
注意:需保持此终端开启以进行 KR4 调试,KM4 终端可关闭


设置 J-Link
打开新终端,进入目录
project_kr4
执行命令:
$make setup GDB_SERVER=jlink

打开新终端,进入目录
{SDK}/amebasmart_gcc_project/utils/jlink_script
执行命令:
$/opt/SEGGER/JLink/JLinkGDBServer -device cortex-a32 -if SWD -scriptfile AP3_CA32_Core0.JLinkScript -port 2337

打开新终端,进入目录
{SDK}/amebasmart_gcc_project/utils/jlink_script
执行命令:
$/opt/SEGGER/JLink/JLinkGDBServer -device cortex-a32 -if SWD -scriptfile AP3_CA32_Core1.JLinkScript -port 2339

J-Link 固件烧录
我们更推荐使用 Realtek 提供的 Image Tool 软件下载固件。更多信息请参考 Image Tool。
如果必须使用 J-Link 下载固件,请参考如下内容:
编译固件(参考 编译代码)并连接 J-Link
键入
build.py -gdb
命令开始下载,之后固件将被下载到 Flash 中,整个过程需要几秒钟,如下所示:

下载固件到 Flash

下载成功的日志提示
为确认固件是否被正确地下载进去,可以在下载之前勾选 verify download,在固件下载过程中,将会有 verified OK
的日志提示。

验证下载
下载完成后按下 Reset
按键,可以看到设备使用新的固件启动。
调试模式进入流程
编译固件并连接 J-Link
执行命令:
进入 SDK 根目录
运行
build.py -debug
根据目标设备选择对应命令
KM4:
"{Jlink_path}\JLink.exe" -device Cortex-M33 -if SWD -speed 4000 -autoconnect 1
KM0:
"{Jlink_path}\JLink.exe" -device Cortex-M23 -if SWD -speed 4000 -autoconnect 1
KM4:
"{Jlink_path}\JLink.exe" -device Cortex-M33 -if SWD -speed 4000 -autoconnect 1
KR4:
First:
"{Jlink_path}\JLink.exe" -device Cortex-M33 -if SWD -speed 4000 -autoconnect 1 -JLinkScriptFile {script_path}\KM4_SEL.JLinkScript
Then:
"{Jlink_path}\JLink.exe" -device RV32 -if cjtag -speed 4000 -JTAGConf -1,-1 -autoconnect 1
KR4 -> KM4:
First:
"{Jlink_path}\JLink.exe" -device RV32 -if cjtag -speed 4000 -JTAGConf -1,-1 -JLinkScriptFile {script_path}\KR4_DMI.JLinkScript
Then:
"{Jlink_path}\JLink.exe" -device Cortex-M33 -if SWD -speed 4000 -autoconnect 1
KM4:
"{Jlink_path}\JLink.exe" -device Cortex-M33 -if SWD -speed 4000 -autoconnect 1
KR4:
First:
"{Jlink_path}\JLink.exe" -device Cortex-M33 -if SWD -speed 4000 -autoconnect 1 -JLinkScriptFile {script_path}\KM4_SEL.JLinkScript
Then:
"{Jlink_path}\JLink.exe" -device RV32 -if cjtag -speed 4000 -JTAGConf -1,-1 -autoconnect 1
KR4 -> KM4:
First:
"{Jlink_path}\JLink.exe" -device RV32 -if cjtag -speed 4000 -JTAGConf -1,-1 -JLinkScriptFile {script_path}\KR4_DMI.JLinkScript
Then:
"{Jlink_path}\JLink.exe" -device Cortex-M33 -if SWD -speed 4000 -autoconnect 1
KM4:
"{Jlink_path}\JLink.exe" -device Cortex-M33 -if SWD -speed 4000 -autoconnect 1 -JLinkScriptFile {script_path}\AP1_KM4.JLinkScript
KM0:
"{Jlink_path}\JLink.exe" -device Cortex-M23 -if SWD -speed 4000 -autoconnect 1 -JLinkScriptFile {script_path}\AP0_KM0.JLinkScript
CA32 core0:
"{Jlink_path}\JLink.exe" -device Cortex-A32 -if SWD -speed 4000 -autoconnect 1 -JLinkScriptFile {script_path}\AP3_CA32_Core0.JLinkScript
CA32 core1:
"{Jlink_path}\JLink.exe" -device Cortex-A32 -if SWD -speed 4000 -autoconnect 1 -JLinkScriptFile {script_path}\AP3_CA32_Core1.JlinkScript
备注
{Jlink_path}: J-Link 安装路径 (默认为
C:\Program Files (x86)\SEGGER\JLink
){script_path}:
{SDK}\amebaxxx_gcc_project\utils\jlink_script
GDB 核心指令集
长命令 |
短命令 |
语法 |
功能说明 |
---|---|---|---|
Halt |
H |
暂停 CPU 执行 |
|
Go |
G |
恢复 CPU 执行 |
|
Mem |
/ |
Mem <地址> <字节数> |
读取内存(ASCII 格式) |
SaveBin |
/ |
SaveBin <文件> <地址> <字节数> |
内存转储为二进制文件 |
Exit |
/ |
断开 J-Link 连接 |
官方文档参考:https://wiki.segger.com/J-Link_Commander
备注
通过多次执行
H
/G
记录 PC 值,定位问题函数。使用
mem <sp地址>
查看调用栈信息。
GDB 调试器指南
GNU 调试器支持在程序运行时进行状态检查与错误追踪(参考章节 调试模式进入流程)
完整文档:GDB 用户手册
功能模块 |
命令 |
操作说明 |
---|---|---|
断点管理 |
break (b) |
设置执行暂停点 |
数据监视点 |
watch |
监控变量变化 (含 watch/rwatch/awatch) 备注 监视范围建议小于 20 字节。 |
断点列表 |
info |
显示所有激活的断点/监视点 |
断点删除 |
delete (d) |
移除指定断点 |
恢复执行 |
continue (c) |
继续程序运行 |
单步进入 |
step (s) |
进入函数内部执行 |
单步跳过 |
next (n) |
执行当前行并跳至下一行 |
退出调试 |
quit (q) |
终止调试会话 |
调用追踪 |
backtrace (bt) |
显示函数调用栈 |
源码查看 |
list (l) |
显示上下文代码 |
数据检查 |
print (p) |
输出变量/表达式值 |