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

news/2024/11/16 1:16:11/文章来源:https://www.cnblogs.com/alanli07/p/18429566

参考资料

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 infoenable_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 0x4ba00477adapter speed 1000transport select jtag
reset_config trst_and_srsttelnet_port 4444# create tap
jtag newtap auto0 tap -irlen 4 -expected-id $_DAP_TAPID# create dap
dap create auto0.dap -chain-position auto0.tapset CTIBASE {0x80420000 0x80520000 0x80620000 0x80720000}
set DBGBASE {0x80410000 0x80510000 0x80610000 0x80710000}set _cores 4set _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就会报错未知的断点。有没有大佬解决过这个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/802913.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

考前须知:Oracle OCP考试流程和准备

考前须知:Oracle OCP考试流程和准备 OCP(Oracle Certified Professional),是甲骨文数据库认证中很常见的一个,但却有着很重要的作用,对于从事大型数据库相关行业的人来说,几乎是必考的一种,OCP证书含金量较高,考试也有一定的难度,所以考前要对OCP考试有一些了解。 ​ 一…

D24 kubernetes 通过钩子如果优雅的停机{PreStop}

1、背景在 Kubernetes 中,每次微服务的代码发布都意味着创建新版本的 pod 并删除旧 pod,如果部署不够优雅的话,可能出现如下两个问题:正在处理请求的pod被删除,在请求没有做幂等处理的情况下,就会出现数据重复、数据错误,亦或导致分布式系统数据不一致; Kubernetes 将流…

阿里云函数计算 x NVIDIA 加速企业 AI 应用落地

阿里云函数计算与 NVIDIA TensorRT/TensorRT-LLM 的合作基于双方在提效降本方面的共同目标。阿里云函数计算作为无服务器架构,凭借其高灵活性、弹性扩展能力以及对 GPU 算力的支持,为 AI 任务如模型推理和图像生成提供了高效的计算平台。作者:付宇轩 前言 阿里云函数计算(F…

谷歌地图 | Navigation SDK 重磅发布!为你的 App 注入导航新体验

随着移动互联网的快速发展,导航功能已经成为众多 App 的标配,凭借 Google 地图的强大技术支持和本地化服务,您可以为全球用户提供无缝的导航体验,快速拓展海外市场。无论是欧美发达国家还是新兴市场,Navigation SDK都能助您一臂之力。9月17日,Google 地图正式发布 Naviga…

模拟赛

P4562 : 求期望乘上方案数来求总的贡献 捆绑销售:二分最大答案,发现是最大闭合子图,建网络流模型求解。 code 斐波那契数列 : \(f_{i+1}\times f_{i-1}-f^2_{i} = (-1)^i\) 树相关求 \([1,n]\) 中能不能被给出 \(k\) 个整数中任意一个整除考虑容斥,设 \(f_{i,j}\) 表示 \…

pom.xml中引入项目中的jar包(通过<scope>system</scope>依赖本地jar包)

<dependency><groupId>com.hbis.infmgr</groupId><artifactId>sign-utils</artifactId><version>0.0.1</version><!--此处忽略sonar警告,因报表组件是定制化的本地包,放到了项目目录内,所以需要通过system-scope引入--><…

《NET CLR via C#》---第十二章(泛型)

泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”。 简单来说,开发人员先定义好算法,必然排序、搜索、交换、比较或者转换等。但是,定义算法的开发人员并不设定该算法要操作什么数据类型;该算法可广泛地应用于不同类型的对象…

Java对接企业微信审批回调

一、需求说明用Java程序对接企业微信的审批流程,获取审批数据数据,例如:报销费用金额二、操作步骤 2.1、分析需求根据需求分析其实也不知道该怎么去做对接,通过不断试错,发现不需要对接第三方应用,也就是不需要进入服务商后台页面,只需要在自建应用是做好配置即可。 具体…

Vuex 和 Vue-router 知识点

Vuexactions里面才能做异步操作(访问后端API ajax请求 访问数据库中的数据) mutations原子操作,同步操作Vue-routermode:history 路由配置该怎么配置就怎么配置 route: [...]配置:path 和 component懒加载:component:对应一个函数,import导入这个组件。前面说过用impor…

Chrome浏览器下载时提示“保留”

1. 提示情况 具体提示情况情况如下:2. 解决方法 2.1. 选中地址栏“查看网站信息” 具体弹出框如下 2.2. 修改“网站设置” 在确认网站安全的情况下,把“自动下载项”修改为“允许”,把“不安全内容”修改为“允许”。2.3. 关闭“网站设置”页面 重新下载,就不在出现“保留…