为什么当文件已存在时,device_create没有返回错误?

时间:2017-05-14 13:38:02

标签: linux-kernel filesystems linux-device-driver device-driver chardev

我正在编写一个带有接口字符设备的PCI驱动程序(Linux 4.9.13)。这是困扰我的场景:

  1. 运行touch /dev/foo0,在/dev目录中创建一个普通文件。
  2. 加载驱动程序模块。这是一个伪代码,代表那里发生的事情(相当标准的字符设备注册):

    // When the module is initialized:
    alloc_chrdev_region(&dev, 0, 256, "foo");
    class = class_create(THIS_MODULE, "foo");
    
    // Later, when a suitable PCI device is connected the probe function 
    // calls the following functions:
    cdev_init(dev->md_cdev, &fops);
    dev->md_devnum = MKDEV(major, 0 + index);
    res = cdev_add(dev->md_cdev, dev->md_devnum, 1);
    dev->md_sysfsdev = device_create(class, 0, dev->md_devnum, 0, "foo%d", index);
    

    详细说明:

    • index只是另一个免费索引
  3. 对我来说似乎很奇怪的是,没有任何错误表明已经有/dev/foo0文件不是字符设备。我确实检查了所有的错误(我想是这样),但为了简洁起见,我省略了相关的代码。如果我不运行touch /dev/foo0,一切都按预期工作。否则,我既不能读取也不能写入设备。

    为什么会这样?我不应该device_create返回错误或者至少创建/dev/foo1吗?

0 个答案:

没有答案