我编写了一个创建/ proc文件的内核模块。我还写了一个写入文件的用户空间代码,然后使用" copy_from_user"将该写入的数据提取到我的模块中。方法并在内核日志中打印。
数据在日志上成功写入,但是当我在编辑器中打开proc文件时,它就是空白。
任何人都可以解释为什么会这样吗?
用户空间代码是
#include<fcntl.h>
main()
{
int fd=open("/proc/MY_PROC_FILE", O_RDWR);
write(fd, "linux is awesome", 16);
return 0;
}
模块
int open_callback(struct inode *p, struct file *q)
{
printk(KERN_ALERT "open callback\n");
return 0;
}
ssize_t write_callback(struct file *p, const char __user *buffer, size_t len, loff_t *s)
{
printk(KERN_ALERT "write callback\n");
char msg[256];
copy_from_user(msg, buffer, len);
printk("%s\n", msg);
return 0;
}
static struct proc_dir_entry *my_proc_entry;
static struct file_operations fs={
.open=open_callback,
.read=read_callback,
.write=write_callback,
.release=release_callback
};
static int start(void)
{
printk(KERN_ALERT "proc module registered\n");
my_proc_entry=proc_create(file_name, 0, NULL, &fs);
if(my_proc_entry==NULL)
{
printk(KERN_ALERT "os error\n");
return -ENOMEM;
}
return 0;
}
static void stop(void)
{
remove_proc_entry(file_name, NULL);
printk(KERN_ALERT "proc module unregistered\n");
}
module_init(start);
module_exit(stop);
MODULE_LICENSE("GPL");
提前感谢您提供任何帮助
答案 0 :(得分:1)
您没有实施read_callback()
当你读取proc文件然后将调用read_callback()时。在这里,您需要编写代码以回写(使用copy_to_user()
)之前在write_callback()
回调中编写的内容。
首先,您需要将用户在write_callback()中写入的内容存储在内核空间的某些全局内存中,然后才能将其写回read_callback()
这是您想要做的最好的例子。 http://www.makelinux.net/books/lkmpg/x810