当前位置: 首页 > article >正文

【调教树莓派】如何获取树莓派的硬件ROOT(JTAG裸片调试)

如何获取树莓派的硬件ROOT

现在各厂商提供的SOC基本上都是带有固件和操作系统的,用户不再需要关心系统架构和寄存器配置。这种设计当然降低了开发的复杂度,但也意味着玩家丧失了一定的可玩性(比如因为提供了操作系统,就默认是通过串口或者网口调试软件,板卡上直接不提供jtag接口)。

由于板卡不提供JTAG接口,所以要重获裸片调试的能力,完全占有硬件(可恶的占有欲),就得靠爱好者自行摸索怎么把JTAG连上。这里给出RASPBERRY-PI ZEROS 2W的硬件ROOT方法,供大家参考。

1 了解 开发板硬件

这里我们选用 RASPBERRY-PI ZEROS 2W。板上处理器是RP3A0集成了一个四核64位Arm Cortex-A53 CPU,主频为1GHz。中间的处理器是树莓派RP3A0系统级封装(SiP),集成了Broadcom BCM2710A1,512MB LPDDR2 SDRAM。无线连接方面支持2.4GHz IEEE 802.11b/g/n wireless LAN, Bluetooth 4.2, BLE,不需要插天线。
在这里插入图片描述
据官方文档的说法,Raspberry Pi Zero 2w相较于单核Raspberry Pi Zero,单线程性能提高40%,多线程性能提高5倍。下面是板卡的尺寸图,整体大小为 6.5cm*3cm
在这里插入图片描述
麻雀虽小,五脏俱全。树莓派芯片本身没有WIFI能力,板上也没有提供网线插口,但使用了一颗TI的WIFI芯片用于无线网络连接。另外提供了HDMI接口和两个MICRO-USB接口(败笔)。下图可见各个接口在板上的分布情况。下图还展示了摄像头的连接位置。
在这里插入图片描述

2 找手册

上面看到,板上是没有JTAG口的,但是芯片设计的时候应该是提供了对应引脚的,这里我们需要查看处理器的参考手册。
在这里插入图片描述
这个处理器是SIP封装,内部嵌入一个BCM2837,所以要找寄存器信息得看BCM2837的参考手册,而我们发现树莓派文档页面上没有提供BCM2837的手册,而是让我们去看BCM2836的手册,
在这里插入图片描述
不用过分困惑,因为这两个处理器实际上只是处理核心不一样,其它的设计基本一致,所以手册也可以通用:
在这里插入图片描述

3 连接TJAG线

手册里应该有这样一个引脚复用表,说明可哪些引脚可以复用成JTAG,不同版本的树莓派可能有些差异。ZERO 2W 的GPIO22-GPIO27分别对应 TRST/RTCK/TDO/TCK/TDI/TMS这 6 个信号:
在这里插入图片描述
然后看PCB的原理图,找到对应GPIO的在板卡上的位置,这里标绿和标黄的就是那6个信号对应的引脚:
在这里插入图片描述
然后看你使用的JTAG排线上各个信号位置,我这里用的是 20PIN 的排线,接口各个信号线的位置如下:
在这里插入图片描述
找到对应关系后用杜邦线把引脚连起来,这里我是直接把杜邦线插在排线口上的。
在这里插入图片描述

4 搞清裸片调试障碍

连上JTAG接口之后还不能直接调试,主要有三个原因:
1、芯片引脚复用没有配置。上面的复用表里就能看到,JTAG不是对应管脚的默认功能,需要配置GPIO的复用转换到JTAG引脚模式。
2、使用的SERVER不支持对应的处理器。比如JLINK SERVER就不支持树莓派的多核处理器,特别是PI-3之后的版本。
3、处理核心处于不可调试的状态,这里可能需要替换SD中的镜像文件,让处理器上电后原地等待,方便进入调试状态。

5 配置引脚复用(修改树莓派启动脚本)

许多人的第一反应是去查寄存器,通过配置GPIO_SEL选择复用功能,早期版本的各种教程和分享也这么操作,但明确地说,这一招现如今肯定是不灵了。

5.1 一般做法

一般的做法就是直接用iomap配置寄存器。参考手册里有一个外设地址分配图,里面可以找到外设物理地址。但是在操作系统里是不能用这个地址的,得先找到GPIO的物理地址然后remap成虚拟地址进行操作。
在这里插入图片描述
下面通过iomap命令找到GPIO模块的物理地址是0x3f200000,注意有的教程直接说这GPIO的基地址是多少,其实可能和你的板卡不匹配,还是要自行确认的。
在这里插入图片描述
然后查芯片的参考手册,能找到GPFSELn寄存器,用于配置不同GPIO组内各个引脚的功能复用选择。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

因为这种方法不起作用,控制引脚输入输出还行,引脚复用则没啥效果,这里就不放代码啦,具体也就是获取虚拟地址然后写寄存器选功能,基操不说。

5.2 有效做法

修改树莓派启动目录下的config.txt文件,修改内容如右侧高亮部分,在[all]配置条目下添加

enable_jtag_gpio=1
gpio=22-27=a4
在这里插入图片描述

6 换用合适的 Server 端

这里我们用OCD作为Server端,没有安装可以通过这个链接下载软件包:OpenOCD package ,还要用 USB Driver Tool 修改USB 驱动以适配 OCD:
在这里插入图片描述

7 更改启动镜像(修改树莓派启动目录bootfs)

在这里插入图片描述
树莓派启动目录下有一个kernel8.img文件,这个正常情况下是系统镜像,我们换成一个原地跳转的程序就行,别说不会弄啊,交叉编译器写一个,实在不会照我这个弄也行:
在这里插入图片描述
左边是汇编代码,右下是链接脚本,注意要起始地址是0x80000;右上是编译脚本,按图上的顺序执行最后会生成有一个名为kernel8.img文件,用这个文件替换启动目录下的镜像就可以了。


编译命令:

:: build
aarch64-none-elf-as.exe -g -mcpu=cortex-a53 .\start.s -o test.o
aarch64-none-elf-ld.exe test.o -T linker.ld -o test.elf
:: for run & check & debug 
aarch64-none-elf-objdump.exe -D test.elf > test.disasm
aarch64-none-elf-objcopy.exe -O binary test.elf kernel8.img

链接脚本:

SECTIONS
{
    . = 0x80000;
    .text : { *(.text.boot) }

   /DISCARD/ : { *(.comment) *(.gnu*) *(.note*) *(.eh_frame*) }
}

汇编程序:

_reset:
    NOP
    B _reset

8 启动调试

进入之前下载的OCD软件包目录,用下面这条命令启动OCD Server端并与板卡上的处理器建立连接

cd \share\openocd\scripts …\bin\openocd.exe -f interface/jlink.cfg -f target/raspberry.cfg

命令格式就是用 -f 指定一个仿真器的配置文件(如),然后指定一个板卡的配置文件,这里注意路径和配置文件根据自己的硬件自行修改,我用下面这条命令连接:

…\tool\ocd\openocd-20231002\OpenOCD-20231002-0.12.0\bin\openocd.exe -f …\tool\ocd\openocd-20231002\OpenOCD-20231002-0.12.0\share\openocd\scripts\interface\jlink.cfg -f …\tool\ocd\openocd-20231002\OpenOCD-20231002-0.12.0\share\openocd\scripts\target\bcm2837.cfg

连接成功以后终端显示大概是这样的,能看到4个监听端口,分别对应四个CA53处理核。
在这里插入图片描述

结束

到这里就拿到树莓派裸片调试的权限喽,你的派此刻完全属于你,随你怎么玩。
后面 GDB 调试就不必说了吧,简单的很,实在需要的话可以参考这个视频:能耗之谜,Cache 如何左右功耗?测试方法及测试环境介绍
感觉可以的话点个赞吧(ง •_•)ง


http://www.kler.cn/news/356273.html

相关文章:

  • docker 指令集
  • 计算机网络基本架构知识点
  • 手机摄影入门
  • 【FFmpeg】Common command
  • 网页前端开发之HTML入门篇:链接标签 a
  • 5 -《本地部署开源大模型》在Ubuntu 22.04系统下ChatGLM3-6B高效微调实战
  • window与ubuntu双系统时间同步
  • 易泊车牌识别:海外车牌快速定制,开启智能识别新时代
  • LSTM反向传播及公式推导
  • 如何查看公众号真实粉丝数,2024年还有哪些粉丝百万以上的大号?
  • 性能评测第一,阿里开源可商用AI模型Ovis 1.6使用指南,AI多模态大模型首选
  • java 第12天 单例 接口
  • Redis入门到精通(二):入门Redis看这一篇就够了
  • 云黑系统全解无后门 +搭建教程
  • 保研考研机试攻略:python笔记(1)
  • 初识git · 远程操作
  • DAY52WEB 攻防-XSS 跨站反射型存储型DOM 型标签闭合输入输出JS 代码解析
  • Python 独立成分分析(ICA) 详解与应用案例
  • 什么是ASC广告?Facebook ASC广告使用技巧
  • 量纲分析的巅峰之作:Taylor点源爆炸模型产生始末