Linux内核中dev_info、dev_dbg、dev_err及动态调试

80阅读 0评论2025-02-26 13814089327
分类:LINUX

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

下面简述下这几个dev_xxx函数的基本使用规则,以及动态调试使用方式。

动态调试使用方法

mkdir /mnt/dbg
mount
-t debugfs none /mnt/dbg
echo -n "file ca_dsc_core.c +p" > /mnt/dbg/dynamic_debug/control 则打印ca_dsc_core.c所有的dev_dbg()信息
echo
-n "func ca_dsc_read +p" > /mnt/dbg/dynamic_debug/control 则打印ca_dsc_read()函数所有dev_dbg()信息

动态打印调试的基本原理

当编译选项CONFIG_DYNAMIC_DEBUG打开的时候,在编译阶段,kernel会把所有使用dev_dbg()的信息记录在一个table中,这些信息我们可以从/mnt/dbg/dynamic_debug/control解析出来:

所以在应用层,用户就可以通过使用echo来控制dynamic_debug/control文件,进而控制是否打印某个dev_dbg()信息!

dev_dbg()对于分析某些内核子系统或者驱动流程也十分有意义,例如,使能net/ipv4/ping.c的调试开关,则可以观测ping的运行原理。

好处

上一篇:Linux高分辨率定时器
下一篇:嵌入式Linux:应用层与底层硬件进行交互或控制的两种主要方式