Linux驱动调试方法

Linux驱动调试主要的途径是靠打印输出,这里介绍动态调试法。

1.Linux驱动调试信息输出

目前驱动代码中,已不建议直接使用printk()直接添加打印调试信息,而是使用dev_info()dev_dbg()dev_err()之类的函数代替,这些dev_xxx()函数本质还是使用printk()打印,但是相比起printk():

1)支持打印模块信息,dev信息

2)支持动态调试(dynamic debug)方式

dev_info():启动过程、或者模块加载过程等“通知类”信息,一般只会通知一次,例如probe()函数;

dev_dbg():一般使用在普通错误,如-EINVAL、-ENOMEM等errno发生处,用于调试;

dev_err():一般使用在严重错误,尤其是用户无法得到errno的地方,或者程序员不容易猜测系统哪里出了问题的地方;

2.动态调试

1)打开kernel动态调试开关

编译kernel时,make menuconfig选中Enable dynamic printk() supportDebug Filesystem,如下图(kernel version:4.9.253)

Linux驱动调试方法_第1张图片

Linux驱动调试方法_第2张图片

2)输出调试信息

su root
echo file  +p > /sys/kernel/debug/dynamic_debug/control

在操作驱动程序过程中,可以通过

sudo dmesg

查看调试信息输出

注意:xxx.c为待调试的驱动程序文件名,不要写错。dmesg输出的为dev_dbg()的信息

3)禁止调试信息

echo file  -p > /sys/kernel/debug/dynamic_debug/control

3.打印调试跟踪信息

su root
cat /sys/kernel/debug/tracing/trace

你可能感兴趣的:(嵌入式Linux驱动,linux)