树莓派4b linux内核调试(jtag、kgdb)
创始人
2024-01-31 02:29:59

1、-O0编译树莓派4b linux内核(linux-5.10.95)

        内核源码分支:

https://github.com/raspberrypi/linux/tree/rpi-5.10.y

        参考其他网站,注释掉arch/arm64/include/asm/jump_label.h文件里面的内联汇编分支;

        修改arch/arm64/include/asm/memory.h里面的MIN_THREAD_SHIFT为"(15 + KASAN_THREAD_SHIFT)",因为-O0编译的函数局部变量不会被优化,局部变量使用栈内存,调用层次过深会导致内核栈越界,所以增加内核栈大小;

        将Makefile里面的CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE下面的KBUILD_CFLAGS修改为“KBUILD_CFLAGS += -O0”;

        关闭虚拟化,-O0下暂时没有调通虚拟化;

        其他编译错误能屏蔽的屏蔽,少数未定义函数是编译检查使用的,-O1及更高级别不存在这类非法的函数调用,可以写成空函数或者直接注释掉调用的地方,其他大部分未定义函数是别的未打开编译选项模块的函数,正常需要加编译开关,-O1及更改级别不会报错,是因为编译器检查到这部分函数不会被调用,直接优化掉了对应代码,-O0不优化就保留了这部分函数调用,所以-O0根据具体情况注释掉相关代码调用即可;

        如果默认没有打开生成调试信息,那么打开内核生成调试信息的开关。

2、jtag连接树莓派4b

        下图从别的网站拷贝过来,下图左上角标注了各脚的连接方法,例如TCK对应树莓派的GPIO25,冒号后边对应的是FT232H的引脚,也就是FT232H的D0连接树莓派的GPIO25,RTCK可以不接;对于其他jtag工具,其接法也是一样,如果连接有问题,那么可以尝试把jtag其他引脚也连接上;便宜的jlink V9也支持,jlink V9需要接地、参考电压引脚。

         按照网上方法修改tf卡的配置文件使能jtag!

3、openocd连接树莓派

        在连接树莓派前,先在cmdline.txt里面添加"rodata=off nosmp"参数,"rodata=off"的作用是使内核代码段可写,低版本内核通过内核配置项设置,高版本内核在命令行添加参数即可,nosmp是让内核以单核的方式运行,只运行一个核,其他核不跑内核,目前调试多核不是很完善,待验证调试,目前先以单核运行问题不大。

        树莓派4b配置文件:

https://github.com/openocd-org/openocd/blob/master/tcl/target/bcm2711.cfg

        ft232h配置文件:

interface ftdi
ftdi_vid_pid 0x0403 0x6014
ftdi_layout_init 0x0078 0x017b
adapter_khz 1000
ftdi_layout_signal nTRST -ndata 0x0010 -noe 0x0040
ftdi_layout_signal nSRST -ndata 0x0020 -noe 0x0040

        将配置文件合并到一个文件即可。

        开发板上电,在电脑上执行"openocd -f "连接树莓派4b:

         (3333~3336为每个核的gdbserver监听端口,核0监听的端口为3333,nosmp参数使内核只运行在核0上面,所以gdb需要连接3333端口)

4、gdb连接树莓派4b

        openocd实现的功能与gdbserver一样,gdb连接3333端口即可连接开发板并调试;在gdb里面执行”target remote :3333“即可连接openocd的gdbserver,连接如下所示:

         查看调度器的tick调用栈:

        查看cpu寄存器:

         单步执行等调试命令与调试应用程序没什么区别,线程查看不一样,jtag看到的是核,一个核也就是一个线程。

4、kgdb调试

        ARM64 kgdb单步需要给内核打补丁,请参考网上的修改方法修改,然后编译的时候打开KGDB及KGDB串口选项,关闭KDB。

        kgdb调试多核问题不大,可以不用nosmp参数。

        使用串口作为输入输出以及kgdb调试串口,使用agent-proxy代理串口,具体使用方法参考网上其他文档。

        在开发板上设置调试串口:

echo ttyAMA0,115200 > /sys/module/kgdboc/parameters/kgdboc

        在开发板执行如下命令进入调试模式等待gdb连接:

echo g >/proc/sysrq-trigger

        过程如下:

        gdb连接开发板:

         其他操作与jtag调试一致,目前Ctrl+c不能暂停开发板,在开发板再次执行”echo g >/proc/sysrq-trigger“可以暂停,但是之前gdb设置的断点都没有了,jtag不存在此问题,另外与jtag不同的是,kgdb看到的是内核线程,kgdb是基于内核的,jtag是基于cpu的,jtag不感知linux的存在。

 

相关内容

热门资讯

中国电信人工电话多少 中国电信... 当我们在使用中国移动、中国电信和中国联通提供的电信业务时,可能会发生争议。建议直接向服务提供商投诉,...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
坐月子十大禁忌 坐月子的风俗禁... 前段时间,伊能静发微博说生两个孩子都40多天没洗澡,每天都用药水擦了擦身体。但也强调了,月子怎么做是...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...