【发布时间】:2023-01-14 18:46:40
【问题描述】:
使用此 debugfs API,我可以在 /sys/kernel/debug/parent/name 中创建一个文件,但它是空的,无论我在void *data 参数中输入了哪些数据
struct dentry *debugfs_create_file(const char *name, mode_t mode, struct dentry *parent, void *data, struct file_operations *fops);
根据documentation,我们需要自己实现 file_operations 来处理文件的打开和写入。 我的一段代码:
static ssize_t myreader(struct file *fp, char __user *user_buffer,
size_t count, loff_t *position)
{
return simple_read_from_buffer(user_buffer, count, position, ker_buf, len);
}
static ssize_t mywriter(struct file *fp, const char __user *user_buffer,
size_t count, loff_t *position)
{
if(count > len )
return -EINVAL;
return simple_write_to_buffer(ker_buf, len, position, user_buffer, count);
}
static const struct file_operations fops_debug = {
.read = myreader,
.write = mywriter,
};
static int __init init_debug(void)
{
dirret = debugfs_create_dir("dell", NULL);
fileret = debugfs_create_file("text", 0644, dirret, "HELLO WORLD", &fops_debug);
debugfs_create_u64("number", 0644, dirret, &intvalue);
return (0);
}
将此模块安装到内核后,将在文件夹“dell”中创建两个文件“text”和“number”。文件“number”包含我按预期作为“intvalue”传入的数字,但另一个文件“text”为空。 文档里写的是数据将存储在生成的 inode 结构的 i_private 字段中我的期望:字符串“HELLO WORLD”将在模块加载后写入文件。
我认为问题应该出在读写操作函数上。是否可以使用 debugfs_create_file 方法创建具有特定内容的文件?
【问题讨论】:
标签: linux linux-kernel operating-system filesystems