统一了!Linux内核、单片机、RTOS一样调试!

统一了!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 快来和我一起参加拼团砍价,越多人参加优惠越大!!!