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进行映射操作寄存器

浙公网安备 33010602011771号