开启dev_dbg方法
简介
在 Linux 内核开发和调试过程中,调试日志是定位问题的重要工具。dev_dbg 是内核中常用的调试接口,但默认情况下其输出是关闭的,开发者需要根据需求启用相关功能。本篇文章将详细介绍如何通过动态调试机制启用 dev_dbg,以及在特定情况下通过其他方式实现调试信息输出。
通过动态调试
动态调试(Dynamic debug)是 Linux 内核提供的一种机制,可以在运行时启用或禁用调试日志。
确保内核启用了动态调试支持
编译内核时,确保以下配置项被启用:
CONFIG_DYNAMIC_DEBUG=y
在运行时启用 dev_dbg
通过动态调试接口,可以有选择性地启用调试信息。
-
查看支持动态调试的接口:
cat /sys/kernel/debug/dynamic_debug/control该接口可以打印所有支持动态调试的驱动和打印语句,信息比较多,可以用 grep 进行过滤,下面以 phy-rockchip-inno-usb2.c 这个驱动为例,读出来的是 phy-rockchip-inno-usb2.c 驱动里面所有的 dev_dbg 语句,每一行的信息内容依次是:
驱动文件路径+行数+模块名+函数+日志信息。

-
启用指定模块的
dev_dbg:echo 'module <module_name> +p' > /sys/kernel/debug/dynamic_debug/control该语句可以打印指定模块所有的
dev_dbg,从前面读到的支持动态调试的接口就可以查询到所有支持动态调试的驱动对应的模块信息,还是以 phy-rockchip-inno-usb2.c 为例,它的模块名字为 phy_rockchip_inno_usb2,因此这里实际执行的语句是:echo 'module phy_rockchip_inno_usb2 +p' > /sys/kernel/debug/dynamic_debug/control -
启用指定文件的
dev_dbg:echo 'file <filename> +p' > /sys/kernel/debug/dynamic_debug/control该语句可以打印指定驱动文件内所有的
dev_dbg,以 phy-rockchip-inno-usb2.c 为例,这里实际执行的语句是:echo 'file phy-rockchip-inno-usb2.c +p' > /sys/kernel/debug/dynamic_debug/control -
启用指定函数的
dev_dbg:echo 'func func_name +p' > /sys/kernel/debug/dynamic_debug/control



被折叠的 条评论
为什么被折叠?



