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

 

posted @ 2024-09-02 17:20  流水灯  阅读(42)  评论(0)    收藏  举报