linux内核常用到的调试方法

bug 一般分为这几类

1、crash, 最常见,一般要是对底层驱动寄存器没了解清楚,一个是对内核接口熟悉不够,导致调用出错

2   死锁,  出现在内核多线程或中断中

3、逻辑问题

4、性能优化,  在资源有限的情况下,需要进行优化,特别出现在不同硬件的运行性能时,需要考虑哪个硬件容易受瓶颈

 

调试工具的类别

1、Logs and dump analysis,在出现crash或Panic,通过ep寄存器定位到对应的代码

 2、Tracing/profiling  这类工具不仅用于调试,也可以用到了解程序的运行流程

3、Interactive debugging。主要就是 gdb

4、Debugging frameworks。 调试框架,例如Ftrace、SystemTap

 

本人常用到的调试

1、CONFIG_DYNAMIC_DEBUG

    在可能出错的位置上加入pr_info(),dev_info()调试信息。给客户远程时,通过配置

$ mount -t debugfs none /sys/kernel/debug/
$ cd /sys/kernel/debug/dynamic_debug/
$ echo “file xxx.c +p” > control
$ echo “file svcsock.c line 1603 +p” > control
$ echo “file drivers/usb/core/* +p” > control
$ echo “file xxx.c -p” > control

进行远程查看出错信息

2、分析 Kernel Panic 的 信息

 

3、WARN_ON()

     用于打印的函数调用栈

4、devmem2

      用于读写寄存器或者通过/dev/mem进行映射操作寄存器

 

参考链接:https://mp.weixin.qq.com/s?src=11&timestamp=1646473583&ver=3658&signature=jrUzgUgWm7x3GtIz-ZAlHIR*rQphD2V*8svF4036XkfyPEjyBoGd-3*L0TIkaXRq5W7FRvR-t0ieHeGFDradBMUDGutHTOUcnC2RMPwuIqhZRhrb4i9y*K*CpihVDMyc&new=1

posted @ 2022-03-05 18:08  cogitoergosum  阅读(333)  评论(0)    收藏  举报