
动态打印:
区别:动态打印,-----> 默认不打印默认不会输出到控制台、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的查看与设置
3.1、.c 的 动态打印控制
C
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的打印功能,使用下述配置即可:
C
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
5
2
3
4
5

案例:
spi.c

3.2、其他动态打印控制
- 打开一个模块所有动态打印语句
C
echo "module mmc +p" > /sys/kernel/debug/dynamic_debug/control1
- 打开一个函数中所有的动态打印语句
C
echo "func svc_process +p" > /sys/kernel/debug/dynamic_debug/control1
- 打开文件路径中包含usb的文件里所有的动态打印语句
C
echo -n "*mmc* +p" > /sys/kernel/debug/dynamic_debug/control1
- 打开系统所有的动态打印语句
C
echo -n "+p" > /sys/kernel/debug/dynamic_debug/control1
- 关闭一个函数中所有的动态打印语句
C
echo -n "func svc_process -p" > /sys/kernel/debug/dynamic_debug/control1
四、添加一个dynamic debug:dev_dbg
实验打印:
C
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