我试图将一个数值从用户空间复制到内核的功能空间:如何使用copy_from_user的正确方法?
static ssize_t device_write(struct file *filp, const char *buff, size_t len, loff_t *off)
{
unsigned long copy=0;
int desp=0;
copy = copy_from_user(&desp, &len, 4);
printk(KERN_ALERT "copy: %lx\n", copy);
printk(KERN_ALERT "desp: %d\n", desp);
}
其中“LEN”是存在于用户空间的变量,我想将其复制到“DESP”在内核空间
函数调用我从用户空间提出的是(写为device_write根据的file_operations结构):
write (fd,buffer,8, &off);
当我打印应该被存放在“DESP”值始终0(应该是8)。 我的代码有什么问题?我已经看到了几个例子,我实现了许多变化,但没有任何作用。
问题是,系统调用只有3个参数,我想使用4,这是在文件操作结构(device_read/write)的方法。 因此,当放入内核空间时,编译器不会给出任何有参数数量的警告(这是不同的) 我试着做一个系统llamdas 5参数!编译和执行没有任何问题的警告... 感谢您的答案! – eduardosufan