简单修改驱动添加调试输出
如果你只是想看 dmesg 中的基本日志,不用 dynamic debug。可以临时提高内核 loglevel(echo 8 > /proc/sys/kernel/printk)来显示更多 pr_debug(但不针对特定文件/函数)。或在 ads7846.c 中改用 printk(KERN_DEBUG "...") 而非 dev_dbg,重建模块(无需 dynamic debug)。
内核开启动态调试
默认已经有:
CONFIG_DEBUG_FS=y
CONFIG_DEBUG_FS_ALLOW_ALL=y
加上
CONFIG_DYNAMIC_DEBUG_CORE=y
CONFIG_DYNAMIC_DEBUG=y
验证:
zcat /proc/config.gz | grep CONFIG_DYNAMIC_DEBUG
应输出 CONFIG_DYNAMIC_DEBUG=y 和 CONFIG_DYNAMIC_DEBUG_CORE=y
挂载debugfs (默认自动挂载)
如果内核在 boot 时通过 cmdline 参数(如 dyndbg="file ads7846.c +p")启用了 dynamic debug,你甚至不用手动挂载/配置,就能直接在 dmesg 看到日志。 但在运行时动态调整(如针对特定驱动),还是需要挂载 debugfs 来操作 control 文件。嵌入式一般boot时未自动挂载,所以需运行一次 mount 命令(可加到 /etc/fstab 或 init 脚本中永久化)。
mount -t debugfs none /sys/kernel/debug
测试后,运行 ls /sys/kernel/debug/ 确认有 dynamic_debug 目录即可。
事实上,dey已经默认是自动挂载,有这个dynamic_debug目录。
启用 ads7846 调试
运行下面命令
echo 'file drivers/input/touchscreen/ads7846.c +p' > /sys/kernel/debug/dynamic_debug/control
调大loglevel
echo 8 > /proc/sys/kernel/printk
触碰屏幕,查看 dmesg 中的日志