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

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

最佳答案

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/

相关文章:

Linux:如何将 block 设备映射到 USB 设备?

linux内核内存管理: ZONE_DMA , ZONE_NORMAL大小改变

linux-kernel - Linux wifi backports 交叉编译

linux - 如何在不同的驱动程序之间共享设备树节点中的信息

php - 执行带有 "Program execution Functions"的二进制字符串(exec、system 等...)

c++ - Linux网络编程。我可以从什么开始?

react-native - react-native run-ios --device 在 react-native 之后没有任何反应

linux - dd 命令错误写入设备上没有剩余空间

c - Algo - 要解析的键值表达式 (C)

c - C 语言中的 Intel RdRand 工作示例。如何生成 -100.001 到 +100.001 范围内的 float