#include <linux/debugfs.h>
struct dentry *dir;
const struct file_operations fops = {
.read = debugfs_read,
.write = debugfs_write,
};
/*
* "dir":目录名字
* NULL :在/sys/kernel/debug创建目录
* 即 /sys/kernel/debug/dir/
*/
dir = debugfs_create_dir("dir", NULL);
/*
* "data":文件名字
* 0644 :文件权限
* dir :父目录
* &fops:文件对应的操作函数
* 即 /sys/kernel/debug/dir/data
*/
debugfs_create_file("data", 0644, dir, NULL, &fops);
/*
* 删除/sys/kernel/debug/dir目录,包括子目录
*/
debugfs_remove_recursive(dir);
unsigned char data = 'd';
ssize_t debugfs_read(struct file *file, char __user *buf, size_t size, loff_t *offset)
{
unsigned char kbuf[3];
kbuf[0] = data;
kbuf[1] = '\n'; // 可选
kbuf[2] = '\0'; // 可选
return simple_read_from_buffer(buf, size, offset, kbuf, sizeof(kbuf));
}
ssize_t debugfs_write(struct file *file, const char __user *buf, size_t size, loff_t *offset)
{
unsigned char *kbuf;
kbuf = kmalloc(size, GFP_KERNEL);
copy_from_user(kbuf, buf, size);
kbuf[size-1] = '\0'; // 可选
data = kbuf[0];
kfree(kbuf);
return size;
}
$ cd /sys/kernel/debug
$ echo y > dir/data
$ cat dir/data
y