Linux驱动中的write设备方法
本帖最后由 山丘之王MK 于 2013-06-27 16:09 编辑最近在写一个驱动,在write设备方法中,将用户空间的数据buf传送到内核空间的data1数组中,发现在应用程中调用write失败,返回-1,也就是根本没执行内核中的write设备方法,而read却是成功的。代码如下:
static ssize_t my522_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos)
{
unsigned long p =*ppos;
unsigned int count = size;
int ret = 0;
printk(KERN_INFO"TEST WRITE\n");//用来测试有没执行my522_write,发现根本没执行。用户空间中调用write返回-1。
if (copy_from_user((void *)data1,buf,count))
{
printk(KERN_INFO"copy from user wrong!\n");
ret =- EFAULT;
}
else
{
printk(KERN_INFO "written %d bytes(s) from %d\n", count, p);
}
return ret;
} write调用失败的原因有哪些呢? 可以把代码都贴出来吗(包括用户态的) 问题找到了,用户程中以RDONLY方式open的,导致不能写。回复 3# wwxxxxll
恭喜!回复 4# 山丘之王MK
:-)
页:
[1]