通过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就会报错未知的断点。有没有大佬解决过这个问题。


__EOF__

本文作者alan
本文链接https://www.cnblogs.com/alanli07/p/18429566.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   LIalan  阅读(170)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
点击右上角即可分享
微信分享提示