debugfs --- 应用层和内核层通信
应用层可以修改 /sys/kernel/debug 里面的文件来配置驱动的参数
使用举例
内核驱动代码
#include <linux/debugfs.h> #include <linux/kernel.h> #include <linux/module.h> static int debug_value = 0; static struct dentry *debug_dir; // 读操作回调 static ssize_t debug_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { return simple_read_from_buffer(buf, count, ppos, &debug_value, sizeof(int)); } // 写操作回调 static ssize_t debug_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { simple_write_to_buffer(&debug_value, sizeof(int), ppos, buf, count); return count; } static const struct file_operations debug_fops = { .read = debug_read, .write = debug_write, }; static int __init debug_init(void) { debug_dir = debugfs_create_dir("my_debug", NULL); if (debug_dir) debugfs_create_file("config", 0644, debug_dir, NULL, &debug_fops); return 0; } static void __exit debug_exit(void) { debugfs_remove_recursive(debug_dir); } module_init(debug_init) module_exit(debug_exit) MODULE_LICENSE("GPL");
应用层操作
挂载
mount -t debugfs none /sys/kernel/debug
debugfs /sys/kernel/debug debugfs defaults 0 0

查看已创建的调试文件
ls -l /sys/kernel/debug/my_debug/
数据写入操作
# 写入整数值到调试文件 echo 42 > /sys/kernel/debug/my_debug/config # 写入字符串并解析(需内核代码支持) echo "hello_kernel" > /sys/kernel/debug/my_debug/config
数据读取验证
# 查看当前配置值 cat /sys/kernel/debug/my_debug/config # 持续监控变化(需安装moreutils) watch -n 1 cat /sys/kernel/debug/my_debug/config

浙公网安备 33010602011771号