static ssize_t device_read (struct file* filp, char *bufStoreData, size_t bufCount, loff_t* curOffset)
{
printk(KERN_INFO"reading from the device");
ret = copy_to_user(bufStoreData,virtual_device.data,bufCount);
return ret;
}
static ssize_t device_write(struct file *filp,const char* bufSourceData,size_t bufCount, loff_t* curOffset)
{
printk(KERN_INFO"writing to device");
ret=copy_from_user(virtual_device.data,bufSourceData,bufCount);
return ret;
}
我使用 echo 和 cat 命令来执行用户写入和读取,但我没有正确读取数据。也许我没有返回正确的值。是这样吗?
最佳答案
device_read()
和 device_write()
返回值是读/写字节数。如果复制了所有字节,copy_to_user()
和 copy_from_user()
返回 0
,否则返回未复制的字节数。
您的操作可能成功,并且返回 0
,这意味着“复制了 0 个字节”。
您必须在成功时返回 bufCount
并在失败时返回负错误代码。
ret=copy_from_user(virtual_device.data,bufSourceData,bufCount);
if (ret)
return ret;
return bufCount;
关于c - 我无法在这个简单的设备驱动程序模块中使用 echo 和 cat 。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20745957/