我无法在这个简单的设备驱动程序模块中使用echo和cat。

时间:2013-12-23 14:56:29

标签: c device linux-device-driver drivers

    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命令来进行用户写入和读取,但我没有正确读取数据。也许我没有回归正确的价值观。是这样的吗?

1 个答案:

答案 0 :(得分:1)

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;