我正在尝试使用Linux内核模块编写驱动程序。我用mknod创建了一个特殊文件,称为“ newfile”。我在该文件上执行了chmod以启用写入权限,然后输入777。我试图在此文件中用终端命令执行此命令:echo“ Writing on file”> newfile,但是出现错误,并且从我在vfs_write中得到了-EINVAL的驱动程序。 这是我的代码:
static ssize_t device_write(struct file *flip, const char *buffer, size_t len, loff_t *offset) {
printk(KERN_INFO "writing on file; buffer is: %s len is: %d offest is: %lld \n",buffer,len,offset);
return file_write(flip, offset,buffer,len);
}
int file_write(struct file *file, unsigned long long offset, unsigned char *data, unsigned int size)
{
//mm_segment_t oldfs;
int ret;
//oldfs = get_fs();
//set_fs(get_ds());
ret = vfs_write(file, data, size, &offset);
if(ret == -EINVAL)
printk(KERN_INFO "is EINVAL!");
else
printk(KERN_INFO "not EINVAL!");
return ret;
}
问题出在哪里?我听不懂