Модуль init не создает внутренне файл устройства

Я новичок в программировании драйверов устройств Linux, поэтому, возможно, мой вопрос несколько наивен.

Это относится к области символьных устройств, но, возможно, относится и к другим случаям (??).

Насколько я понимаю, в методе __init модуля должна выполняться вся необходимая инициализация модуля, и после выполнения этой функции модуль должен иметь возможность обрабатывать любые запросы, которые он получает от ядра и / или приложения пользовательского пространства., Кроме того, как часть метода __init, наш модуль должен получить старший номер (при условии, что мы выделяем его динамически), а затем создать "соответствующий" файл устройства в каталоге /dev. Есть несколько способов сделать это.

1) Сам драйвер может распечатать недавно назначенный номер, и мы можем сделать файл устройства вручную.

2) Недавно зарегистрированное устройство будет иметь запись в /proc/devices, и мы можем либо создать файл устройства вручную, либо написать сценарий оболочки для чтения файла и создания файла устройства.

3) После успешной регистрации наш драйвер может создать файл устройства с помощью системного вызова mknod и rm во время вызова cleanup_module.

Теперь, насколько я понимаю, если в методе __init нет некоторого фрагмента кода, который "приостанавливает" завершение метода __init ДО того, как мы создадим файл устройства -> это означает, что наш модуль потенциально может начать получать запросы БЕЗ устройства файл готов, не проблема ли (если мы выберем первый или второй подход)?

static int major;
static struct file_operations fops = {
    .owner = THIS_MODULE,
    .read = dev_read,
    .write = dev_write,
    .open = dev_open,
    .release = dev_release 
};
static int __init myModuleInitMethod()
{
    major = register_chardev(0, “myChaeDev”, &fops);

     // some more initialization
    // ...
    // yet no creation of the device file, using mknod
}  // myModuleInitMethod terminates and device file isn’t ready – problem ??

Не стесняйтесь отметить некоторые другие моменты для рассмотрения в случае, если я не упомянул их. Спасибо,

Guy.

0 ответов

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