
动态打印:
区别:动态打印,-----> 默认不打印默认不会输出到控制台、log buff

- 以下是改写后的内容:
好处:日志控制能更精准。
问题:使用 printk 时,日志等级是全局设置的。如果开启日志,整个系统的日志量会太多,干扰调试。
场景:
- 高速设备驱动调试(产品发布时需关闭日志)
- 正常运行时不需要日志,但调试时需要详细日志定位问题
- 但 printk 会拖慢性能,且日志太多干扰排查
具体需求:
- 开发驱动时要留下足够日志,方便分析驱动运行状态
- 需要既能随时查看日志(作为问题证据),又能在产品发布时完全关闭日志
- 关键:必须用"动态控制"(按需开启/关闭日志),不能影响系统性能
一、deconfig 功能配置
--> 配置的是板卡的 deconfig
c
CONFIG_DEBUG_FS=y
CONFIG_DYNAMIC_DEBUG=y1
2
2
二、dynamic debug 参数介绍
目录:Documentation\admin-guide\dynamic-debug-howto.rst
if CONFIG_DYNAMIC_DEBUG is set, then all
动态打印:(printk)
pr_debug()----主要 --------------------dev_dbg()----主要print_hex_dump_debug()print_hex_dump_bytes()- calls can be dynamically enabled per-callsite.
| 参数 | 作用 |
|---|---|
| 参数 | 作用 |
| p | enables the pr_debug() callsite. |
| f | Include the function name in the printed message |
| l | Include line number in the printed message |
| m | Include module name in the printed message |
| t | Include thread ID in messages not generated from interrupt context |
| _ | No flags are set. (Or’d with others on input) |
三、dynamic debug 的查看与设置
1、.c 的 动态打印控制
bash
cat /sys/kernel/debug/dynamic_debug/control // 清单的输出
cat /sys/kernel/debug/dynamic_debug/control |busybox grep "suspend"1
2
3
2
3

如上不是所有的日志都会在 dmesg 中打印,我们的 dev_dbg 就不会直接显示在 dmesg 中。
- 只有
=p的日志才会打印。 =_默认不输出

配置文件开启 dev_dbg 的打印功能,使用下述配置即可:
bash
echo -n "file cqhci.c +p "> /sys/kernel/debug/dynamic_debug/control
echo -n "file gadget.c -p "> /sys/kernel/debug/dynamic_debug/control
echo -n "file block.c +p "> cat /sys/kernel/debug/dynamic_debug/control |grep block.c1
2
3
4
2
3
4

案例:
spi.c

2、其他动态打印控制
- 打开一个模块所有动态打印语句
bash
echo "module mmc +p" > /sys/kernel/debug/dynamic_debug/control1
- 打开一个函数中所有的动态打印语句
bash
echo "func svc_process +p" > /sys/kernel/debug/dynamic_debug/control1
- 打开文件路径中包含 usb 的文件里所有的动态打印语句
bash
echo -n "*mmc* +p" > /sys/kernel/debug/dynamic_debug/control1
- 打开系统所有的动态打印语句
bash
echo -n "+p" > /sys/kernel/debug/dynamic_debug/control1
- 关闭一个函数中所有的动态打印语句
bash
echo -n "func svc_process -p" > /sys/kernel/debug/dynamic_debug/control1
四、添加一个 dynamic debug:dev_dbg
实验打印:
bash
echo -n "file sysrq.c "> /sys/kernel/debug/dynamic_debug/control
dmesg |busybox grep -r "IRQ"1
2
2

五、dynamic 动态打印转为 printk 正常打印
原厂经常会让你对某个.c 加下面这四句话
c 文件开头添加如下代码:
c
#undef dev_dbg
#define dev_dbg dev_info
#undef pr_debug
#define pr_debug pr_info1
2
3
4
2
3
4