1. DebugFS 的作用
bugFS 的作用
-
内核调试接口:允许内核模块或子系统在 DebugFS 中创建虚拟文件或目录,暴露调试信息。
-
动态交互:用户可以直接读写这些文件来查看或修改内核状态(如调整日志级别、触发特定操作)。
-
零额外工具:无需编写专用工具,只需使用
cat
、echo
等命令即可操作。
2. 挂载 DebugFS
只有root用户才能访问debugfs中的内容
# 以 root 权限执行
mount -t debugfs none /sys/kernel/debug
-
-t debugfs
:指定文件系统类型为 DebugFS。 -
none
:无需物理设备,因为是虚拟文件系统。 -
/sys/kernel/debug
:标准挂载点路径(也可自定义,但此路径为 Linux 约定俗成)。 -
验证是否挂载
# 查看是否挂载成功
mount | grep debugfs
# 输出示例:none on /sys/kernel/debug type debugfs (rw,relatime)
3. 访问 DebugFS 内容
挂载后,通过 /sys/kernel/debug
访问调试信息:
示例:查看中断统计
# 查看系统中所有中断的触发次数
cat /sys/kernel/debug/interrupts
示例:调试 GPIO 引脚
若驱动支持,可通过 DebugFS 查看或操作 GPIO 状态:
# 查看 GPIO 引脚状态(假设驱动在 DebugFS 中注册了 gpio 目录)
cat /sys/kernel/debug/gpio
示例:动态调整内核参数
某些驱动允许通过 DebugFS 动态修改调试标志:
# 启用某模块的调试日志(假设模块提供了 debug_level 文件)
echo 1 > /sys/kernel/debug/my_driver/debug_level
4. 自动挂载(可选)
若需每次启动自动挂载 DebugFS,可修改 /etc/fstab
:
# 在 /etc/fstab 中添加一行
none /sys/kernel/debug debugfs defaults 0 0
重启后生效,或直接执行 mount -a
。
5. 注意事项
-
权限限制:默认只有 root 用户可访问 DebugFS,普通用户需通过
sudo
或修改目录权限:chmod 755 /sys/kernel/debug
-
安全性:DebugFS 可能暴露敏感内核信息,生产环境中建议禁用。
-
内核配置:需在内核编译时启用 DebugFS:
CONFIG_DEBUG_FS=y # 在 .config 文件中确认
6. 典型使用场景
-
驱动开发:查看设备寄存器、DMA 缓冲区状态。
-
性能分析:统计中断频率、调度延迟。
-
硬件调试:操作 GPIO、I2C 设备。
-
动态追踪:结合
trace-cmd
或perf
进行内核事件跟踪。
# 查看系统解析后的设备树引脚配置
cat /sys/kernel/debug/pinctrl/pinctrl-handles