树莓派开发(二)

搭建jtag调试环境

Posted by 婷 on July 27, 2024 本文总阅读量

简介

讲述如何在wsl上搭建jtag调试环境的过程。我们利用openocd这个软件(内含gdbserver),通过jtag这个硬件,去调试我们得到raspi4b上的A72处理器。其实个人觉得trace32也差不多是这样啦。

安装工具

gdb

wsl中输入下面命令安装

sudo apt install gdb-multiarch

windows安装jtag驱动

我们使用zadig来安装,首先来到此链接下载zadig软件

image-20240724221619216

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

image-20240724221710925

点击安装

image-20240724221738603

安装成功

image-20240724221825978

wsl安装jtag驱动

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

image-20240721213404781

image-20240721213417266

安装驱动

sudo dpkg -i JLink_Linux_V798a_x86_64.deb

image-20240721213623785

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

sudo apt install -f

image-20240721213820491

fix后再次安装

image-20240721213838151

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

sudo JLinkExe

image-20240724202134355

安装wsl的usb驱动

wsl如果要跟windows接入的usb设备共享,需要安装usbipd驱动,这样才能识别jtagusbipd相关配置见之前的文章

安装成功后,windowspowershell里去attach你的 jtag具体的busid

image-20240724215454573

image-20240724215725747

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

image-20240724215757983

openocd安装

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

image-20240724212239697

解压

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

image-20240724213041051

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

image-20240724213202368

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

image-20240724213337436

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

image-20240724213415079

这边直接复制作为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

image-20240724213532451

image-20240724213548901

修改config.txt文件

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

image-20240724223622239

使用jtag调试

接线

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

image-20240727231744330

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

image-20240727232556337

运行openocd

找到我们jtag设备

usbipd wsl list

image-20240727232556337

连接到wsl

usbipd wsl attach --busid 1-6

image-20240727232556337

wsl中可以用lsusb查看

image-20240727232556337

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

image-20240724223306549

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

image-20240724223825773

telnet登录openocd

新开终端,输入

telnet localhost 4444

image-20240724224007657

我们输入命令停住CPU

halt

image-20240724224033315

连上openocd内置的gdbserver

新开终端输入

gdb-multiarch

image-20240724224146366

连上gdbserver

target remote localhost:3333

image-20240724224218329

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

image-20240724224249392

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

image-20240724224957503

参考链接

其他

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

image-20240724220017902