树莓派4b linux内核调试(jtag、kgdb)
创始人
2024-01-31 04:40:03
0

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的存在。

 

相关内容

热门资讯

残保金申报计税依据详解 残保金申报关键要点解析残疾人就业保障金申报是企业每年必须履行的法定义务,其中计税依据的准确取数直接关...
​应付债券的利息调整摊销方法 应付债券的利息调整摊销方法应付债券利息调整的计算方法如下:一、初始确认时的利息调整计算在债券初始确认...
视频丨日本防卫预算再创新高 引...   日本政府26日批准2026财年,也就是2026年4月至2027年3月的预算案。据日本财务省公布的...
走!坐高铁,到延安去!   西安至延安高速铁路12月26日开通运营,延安正式迈入“高铁时代”。至此,中国高铁营业里程突破5万...
视频丨日本总务大臣道歉 承认存...   近期,日本首相高市早苗及多名日本内阁重要官员被曝存在政治资金问题。日本总务大臣林芳正26日公开道...
晶采观察丨划重点!2026出行...   近期,国新办举行新闻发布会,介绍新时代交通运输服务经济社会高质量发展有关情况。本场发布会释放多项...
新华视点·2025年度盘点|赛...   一部深入人心的电影,带火一个小众目的地;一场意犹未尽的赛事,盘活一条消费链;一场限时特展,吸引全...
冰雪微笑曲线|看吉林如何点“雪...   隆冬时节,吉林大地银装素裹。近日,记者深入吉林,见证这片寒地如何将“冷资源”转化为“热经济”,构...
订机票却被偷偷搭售 警惕在线旅...   在线旅游平台用订票“最低价”搭售增值服务。提示醒目却又暗藏玄机的“比价”界面中,用户怎样才能做出...
月产10公斤跳蚤用于细菌战!日...   近日,侵华日军第七三一部队罪证陈列馆公布一份题为《731部队海拉尔支部部队长加藤恒则笔供》的史料...