简介
讲述如何在wsl上搭建jtag调试环境的过程。我们利用openocd这个软件(内含gdbserver),通过jtag这个硬件,去调试我们得到raspi4b上的A72处理器。其实个人觉得trace32也差不多是这样啦。
安装工具
gdb
wsl中输入下面命令安装
sudo apt install gdb-multiarch
windows安装jtag驱动
我们使用zadig来安装,首先来到此链接下载zadig软件

注意这里我们选择我们的jlink设备,也即是BULK interface(Interface 2),然后安装的驱动我们选择为WInUSB驱动

点击安装

安装成功

wsl安装jtag驱动
wsl上安装jtag驱动,点击这个链接,选择deb包,下载到wsl


安装驱动
sudo dpkg -i JLink_Linux_V798a_x86_64.deb

安装过程中,出现缺少依赖的错误,输入下面的命令进行修补
sudo apt install -f

fix后再次安装

输入下列命令验证安装是否成功,如下所示,说明安装成功
sudo JLinkExe

安装wsl的usb驱动
wsl如果要跟windows接入的usb设备共享,需要安装usbipd驱动,这样才能识别jtag,usbipd相关配置见之前的文章
安装成功后,windows的powershell里去attach你的 jtag具体的busid


wsl中输入lsusb,即可查看到接入jtag设备

openocd安装
下载支持raspi4b的openocd软件,到此链接下载xpack-openocd-0.10.0-13-linux-x64.tgz

解压
mkdir openocd
tar -zxf xpack-openocd-0.10.0-13-linux-x64.tgz -C openocd

这里为了后面方便开发,去除了些无用的路径

我们使用openocd需要jlink.cfg跟raspi4b.cfg,不过下载的包里并没有raspi4b.cfg

raspi4b.cfg可以复制如下脚本下载

这边直接复制作为raspi4b.cfg
set _CHIPNAME bcm2711
set _DAP_TAPID 0x4ba00477
adapter_khz 1000
transport select jtag
reset_config trst_and_srst
telnet_port 4444
# create tap
jtag newtap auto0 tap -irlen 4 -expected-id $_DAP_TAPID
# create dap
dap create auto0.dap -chain-position auto0.tap
set CTIBASE {0x80420000 0x80520000 0x80620000 0x80720000}
set DBGBASE {0x80410000 0x80510000 0x80610000 0x80710000}
set _cores 4
set _TARGETNAME $_CHIPNAME.a72
set _CTINAME $_CHIPNAME.cti
set _smp_command ""
for {set _core 0} {$_core < $_cores} { incr _core} {
cti create $_CTINAME.$_core -dap auto0.dap -ap-num 0 -ctibase [lindex $CTIBASE $_core]
set _command "target create ${_TARGETNAME}.$_core aarch64 \
-dap auto0.dap -dbgbase [lindex $DBGBASE $_core] \
-coreid $_core -cti $_CTINAME.$_core"
if {$_core != 0} {
set _smp_command "$_smp_command $_TARGETNAME.$_core"
} else {
set _smp_command "target smp $_TARGETNAME.$_core"
}
eval $_command
}
eval $_smp_command
targets $_TARGETNAME.0


修改config.txt文件
我们需要让config.txt文件支持上jtag,修改如下,代码仓链接

使用jtag调试
接线
首先树莓派上对应的这六个引脚要跟jtag上的相连,同时共地

实物图如下所示,也就是需要连7条线

运行openocd
找到我们jtag设备
usbipd wsl list

连接到wsl
usbipd wsl attach --busid 1-6

wsl中可以用lsusb查看

输入命令sudo ./openocd/bin/openocd -f ./openocd/scripts/interface/jlink.cfg -f ./openocd/raspi4b.cfg ,这里芯片刚上电,jtag还没使能,所以还没连上

多试几下就行,很快的,如下所示就成功连上了A72

telnet登录openocd
新开终端,输入
telnet localhost 4444

我们输入命令停住CPU
halt

连上openocd内置的gdbserver
新开终端输入
gdb-multiarch

连上gdbserver
target remote localhost:3333

下面就是gdb常用的一些命令了

layout可以多窗口展开,具体用法可以见链接

参考链接
其他
我们的使用方法是通过openocd控制jtag硬件,然后在连接到CPU上的,如果单纯操控jtag硬件,会有SN版本号使用的问题,需要在windows下使用的时候输入,所以记得这里不要直接操作jtag硬件
