首页 > 其他分享 >通过jlink连接树莓派4b搭建gdb调试环境

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

时间:2024-09-24 17:03:01浏览次数:7  
标签:core 树莓 set openocd gdb dap jlink command

参考资料

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

标签:core,树莓,set,openocd,gdb,dap,jlink,command
From: https://www.cnblogs.com/alanli07/p/18429566

相关文章

  • 存算分离+双集群容灾丨云和恩墨与华为共同发布 MogDB × OceanStor Dorado 联合解决方
    引言为期三天的第九届华为全联接大会(HUAWEICONNECT2024)于9月19日在上海世博中心&展览馆盛大召开。本次大会以“共赢行业智能化”为主题,邀请思想领袖、商业精英、技术专家、合作伙伴、开发者等业界同仁,从战略、产业、生态等方面探讨如何通过智能化、数字化技术,赋能千行万业,把握新......
  • [20240920]跟踪library cache lock library cache pin使用gdb.txt
    [20240920]跟踪librarycachelocklibrarycachepin使用gdb.txt--//前一阵子,写的使用gdb跟踪librarycachelocklibrarycachepin的脚本有一个小问题,无法获得lockaddress以及pinaddress--//地址,有一点点小缺陷,尝试修改完善看看。--//按照https://nenadnoveljic.com/blog/tr......
  • 在链接与运行地址不同时gdb的调试方法
    搭建一个链接和运行不同的环境SECTIONS{ .=0xffff000000080000, /*.=0x80000,*/ .text.boot:{*(.text.boot)} .text:{*(.text)} .rodata:{*(.rodata)} .....}-s还可以看到符号都链接到高地址去了但是elf文件中有详细的地址信息,如果后续qemu加载......
  • 以腾讯云为公网跳板实现树莓派内网穿透
    关键词:内网穿透,frp,ssh,腾讯云,树莓派情况说明不是所有的情况你的ip都可以固定,之前在室外搭的服务器,买的4G卡配路由,但是公网ip无法固定,一般情况下访问只能通过teamviewer或者向日葵等远程登录软件。部署流程确保自己需要内网穿透的设备网络通畅找到一个稳定具有固定公网ip的服务器(VPS......
  • 如何处理monogdb的慢查询
    识别慢查询有几种方法可以用来查看mongodb中的慢查询。1.使用profiler如何使用profiler,需要参考之前的笔记。 清空profiler内容:>usemydb;>db.system.profile.remove();2.使用db.currentOp()此方法是实时分析。db.currentOp(true)db.currentOp({"active":tru......
  • GDB
    GDB常用命令GDB中有许多常用命令,以下是一些常见的命令:1.启动调试启动GDB:gdb<可执行文件>附加到运行中的进程:如果程序已经在运行中,你可以用以下命令来附加到某个正在运行的进程:gdb<可执行文件><进程ID>2.设置断点设置断点:在指定的函数名或行号上设置断......
  • 在ubuntu中安装较新版本的gcc和gdb
    要在Ubuntu中安装较新版本的GCC和GDB,可以通过以下几种方法实现。Ubuntu的默认包管理器apt提供的软件包通常不是最新的,因此需要使用PPA或手动编译以获取较新版本。方法1:使用ppa:ubuntu-toolchain-r/test安装最新版本的GCC和GDBUbuntuToolchainPPA提供了更新的......
  • 痞子衡嵌入式:JLink命令行以及JFlash对于下载算法的作用地址范围认定QN
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是JLink命令行以及JFlash对于下载算法的作用地址范围认定。最近痞子衡在给一个RT1170客户定制一个InfineonMirrorBit类型64MBFlash的SEGGER下载算法,做完之后在JFlash下测试小数据下载没有问题,但......
  • Linux内核开发环境-使用GDB调试内核代码
    建议点击这里查看个人主页上的最新原文作者:陈孝松主页:chenxiaosong.com哔哩哔哩:陈孝松课程:chenxiaosong.com/courses博客:chenxiaosong.com/blog贡献:chenxiaosong.com/contributions邮箱:[email protected]交流群:544216206,点击查看群介绍点......
  • 树莓派智能语音助手实现音乐播放
    树莓派语音助手从诞生的第一天开始,我就想着让它能像小爱音箱一样,可以语音控制播放音乐。经过这些日子的倒腾,今天终于实现了。接下里,和大家分享下我的实现方法:首先音乐播放模块用的是我在上一篇博文写的《用sounddevice实现连续的音乐曲库播放》,然后语义解析部分依旧用的是RAS......