通过jlink连接树莓派4b搭建gdb调试环境

参考资料

jlink使用的是博光微的jlink v9

树莓派使用的是4b

jlink与树莓派链接


按照表中的内容进行链接,注意链接过程要小心仔细,否则后续排查起来十分麻烦

下载openocd

由于我是在linux环境下,所以省去了jlink的驱动安装,直接先下载openocd

sudo apt install openocd

注意不要去openocd的官网下载最新源码安装,2024/9/24时尝试的版本就已经链接不上本jlink了。在ubuntu22.04管理的openocd的版本可以正常使用。

树莓派设置

修改config.txt
kernel 的设置是由于使用笨叔的bin,这里可以是其他的bin,不一定是loop.bin

[pi4]
kernel=loop.bin

[pi3]
kernel=loop.bin

[all]
dtoverlay=pi3-miniuart-bt # 使用的是UART0,需要关闭蓝牙
arm_64bit=1  #enable 64bit image
enable_uart=1  #enable pl uart
uart_2ndstage=1   #enable FW debug info

enable_jtag_gpio=1
gpio=22-27=a4
init_uart_clock=48000000
init_uart_baud=115200


#kernel_old=1 # if we set it, the image will be load at 0x0, otherwise the 64bit image will be load on 0x80000
#disable_commandline_tags=1 #Fix me, when set it, the image will be load on 0x0 ?

jlink链接到openocd

下面是几个配置文件
jlink.cfg

#
# SEGGER J-Link
#
# http://www.segger.com/jlink.html
#
adapter driver jlink
# interface jlink

# The serial number can be used to select a specific device in case more than
# one is connected to the host.
#
# Example: Select J-Link with serial number 123456789
#
# jlink serial 123456789

raspi4.cfg

set _CHIPNAME bcm2711
set _DAP_TAPID 0x4ba00477

adapter speed 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]
    cti create $_CTINAME.$_core -dap auto0.dap -ap-num 0 -baseaddr [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

树莓派上电,并在上述两个文件目录下执行

openocd -f jlink.cfg -f raspi4.cfg 

即可看到下面的输出,就是正常的启动了

启动gdb调试

telnet服务

新起一个终端,登录openocd的telnet服务

telnet local host 4444

在telnet服务中继续执行

halt
load_image /home/alan/Project/learn/arm64/BenOS/benos.bin 0x80000
step 0x80000

使用gdb进行调试

创建.gdbinit文件

target remote localhost:3333

再执行

gdb-multiarch --tui build/benos.elf

即可进入gdb调试。

但是发现一个问题,必须得重新上电才能使断点生效,否则只能n或者s,使用c就会报错未知的断点。有没有大佬解决过这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值