统一了!Linux内核、单片机、RTOS一样调试!
1. 技术的源头
1.1 调试Linux APP
Linux是个宝箱,当APP崩溃时,内核可以生产core文件:
使用GDB调试APP,如下:
1.2 调试Linux驱动
当驱动崩溃时,内核会打印寄存器信息、栈内容:
根据上述信息,我们只能进行纯手工的栈回溯。
2. 改进Linux驱动的调试方法
驱动崩溃时打印的串口信息,能否转换为core文件,然后使用gdb进行调试?可以!
调试过程如下:
第1步:把串口信息转换为core文件
$ ./mcu_coredump 1.txt drv.core
第2步:使用gdb调试内核
arm-buildroot-linux-gnueabihf-gdb ~/100ask_imx6ull-sdk/Linux-4.9.88/vmlinux drv.core
第3步:导入驱动文件
(gdb) add-symbol-file /home/book/Desktop/02_drv/01b_hello_drv/hello_drv.ko 0x7f130000
第4步:使用gdb命令查看驱动运行情况
3. 在裸机上使用coredump技术
裸机崩溃时,我们也可以使用串口打印寄存器的值、栈的值、数据段/BSS段的数:
调试过程如下:
4. 在RTOS上使用coredump技术
无论是FreeRTOS、RT-Thread或者其他RTOS,都可以使用本技术。
每个线程都有自己的栈,栈里保存有线程的寄存器、函数调用关系:
调试过程如下:
5. 我们统一了裸机、RTOS、Linux的调试技术!
百问网把单片机、FreeRTOS、RT-Thread、Linux研究透了,
在调试技术层面:
- 各类RTOS的线程≈Linux线程:每个线程都有自己的调用栈
- 裸机≈Linux内核:Linux内核就是一个复杂上万倍的裸机程序
当程序崩溃时:
- Linux的APP崩溃时,可以生产core文件;
- Linux的驱动崩溃时,可以打印寄存器值、栈内容,我们可以转换为core文件;
- 裸机崩溃时,可以打印各类信息,我们可以转换为core文件;
- RTOS程序里,可以打印各个线程的信息,我们可以转换为core文件。
然后!就可以使用强大的GDB工具,帮我们分析:
- 函数调用关系
- 各个变量的值
6. 今晚直播:怎么调试Linux驱动
2024.11.21晚上8点到9点,
B站(韦东山)、视频号(百问网)直播。
7. 首次调试专题线上班周日开始!
7.1 讨论群
11月24日,单片机、RTOS调试专题线上班报名开始。
加QQ群:
7.2 淘宝团购
78《Rvla3rdrmUu《 https://m.tb.cn/h.Tb1sPgt CA6496 快来和我一起参加拼团砍价,越多人参加优惠越大!!!