JTAG 调试工具使用手册
1. 下载
- OpenOCD 下载:资源下载中心
- GDB:包含在交叉编译工具链中,请参考《交叉编译工具链使用手册》
2. 配置 JTAG 接口
K1/K3 系列板子都内置了 JTAG 调试功能,要使其正常工作,需要 设置硬件 和 配置 USB 驱动。
以 J-Link 为例,具体步骤如下。
2.1 配置硬件
- 步骤一:打开 J-Link 的外壳,将其中的跳线帽拔下,使得 J-Link 不对外供电。
- 步骤二:连接 JTAG 信号,检查引脚是否被使用,K1请参考文档 MUSE Pi 用户使用指南 中 JTAG 调试接口 信息。 K3请参考参考文档 K3 硬件方案 FAQ 中 开发调试 信息。
2.2 配置 USB 驱动
Windows
- 步骤一:从 Zadig 官网 下载 Zadig 工具并运行
- 步骤二:在 Zadig 工具中,进入 Options 菜单中选中 List All Devices。
- 步骤三:检查设备列表,选择 J-Link 设备,更新成 WinUSB 驱动。
- 步骤四:安装成功后,在设备管理器的通用串行总线设备中能看到 J-Link 设备。
注:如果存在多个驱动(例如 SEGGER 原生驱动),再次插入 J-Link 后可能会自动选择了别的驱动,则需要从计算机的可用驱动程序列表中选择回 WinUSB 驱动以更新驱动程序。
Linux
- 步骤一:设置 OpenOCD 所支持 USB 设备的访问权限,将 udev 规则文件 复制到
/etc/udev/rules.d目录中。 - 步骤二:执行以下命令刷新 udev 规则:
udevadm control --reload
- 步骤三:重新插拔 J-Link 使之前的改动生效。
3. 运行 OpenOCD
- 步骤一:解压缩下载的 OpenOCD 文件。
- 步骤二:以K1 X60 CPU 为例,双击运行
bin目录下的k1.bat/sh脚本启动 OpenOCD。 - 步骤三:如需修改运行参数,可编辑对应的脚本,以 Linux 版本为例:
#!/bin/bash
SCRIPT_DIR="../share/openocd/scripts"
# ADAPTER_DRIVER can set as jlink cmsis-dap ...
ADAPTER_DRIVER=jlink
./openocd -c "bindto 0.0.0.0" -c "gdb port 1024" -c "telnet port 4444" \
-c "set SPEED 8000" \
-c "set SECJTAG 0" \
-c "set TARGET acpu" \
-c "set CLUSTERS {0 1}" \
-c "set CLUSTER0_COREIDS {0 1 2 3}" \
-c "set CLUSTER1_COREIDS {0 1 2 3}" \
-f $SCRIPT_DIR/interface/$ADAPTER_DRIVER.cfg \
-f scripts/spacemit-k1.cfg
-f选项后跟的是 J-Link 适配器和 K1 的配置文件。-c选项是 OpenOCD 的配置项目,如gdb port 1024配置了 GDB 的调试端口号,TARGET变量设置为rcpu或其他,可以改变调试目标为RCPU或X60,CLUSTER*变量可以设置调试特定的X60 CPU。
4. 使用 GDB 调试
使用 riscv64-unknown-linux-gnu-gdb,输入以下命令建立 GDB 与 OpenOCD 的连接:
target remote <ip>:<port>
4.1 使用 GDB 命令调试
- 输入
info threads查看 8 个线程是否已进入调试模式,每个线程代表一个 CPU 核。随后正常使用标准 GDB 命令调试即可。
- 例如,查看 CPU 核
k1.cpu.3的 RISC-V 寄存器信息,可输入thread 4切换到 CPU 核k1.cpu.3,然后输入info all-registers。thread 4info all-registers
4.2 使用 OpenOCD 命令调试
-
在 GDB 中通过
monitor命令调用 OpenOCD 命令,输入以下命令查看 8 个 CPU 核是否已进入 halted 状态:monitor targets -
随后正常使用 OpenOCD 命令调试即可。。
-
例如,查看 CPU 核
k1.cpu.3的 RISC-V 寄存器信息,可输入monitor targets 3切换到 CPU 核k1.cpu.3,然后输入monitor reg。
monitor targets 3
monitor reg
