Почему device_create не возвращает ошибку, если файл уже существует?

Я пишу драйвер 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 это просто еще один бесплатный индекс

Что мне кажется странным, так это то, что ничто не вызывает ошибку, что уже есть /dev/foo0 файл, который не является символьным устройством. Я проверяю все ошибки (я так думаю), но для краткости я опустил связанный код. Все работает как положено, если я не запускаю touch /dev/foo0, В противном случае я не могу ни читать, ни писать на устройство.

Почему это так? не должны device_create вернуть ошибку или хотя бы создать /dev/foo1 вместо?

0 ответов

Другие вопросы по тегам