документация по драйверам устройств для Linux

#linux #operating-system #linux-device-driver

Вопрос:

в книге 2017 года «Системное администрирование UNIX и Linux» я прочитал статью ниже :

Современные системы автоматически управляют файлами своих устройств. Однако в некоторых редких случаях может потребоваться создание устройств вручную с помощью команды mknod. Итак, вот как это сделать:

 mknod filename type major minor
 

Здесь имя файла-это создаваемый файл устройства, тип-c для символьного устройства или b
для блочного устройства, а основной и второстепенный-номера основного и второстепенного устройств.
Если вы создаете файл устройства, который ссылается на драйвер, уже присутствующий в вашем
ядре, проверьте документацию для драйвера, чтобы найти соответствующие основные и второстепенные номера устройств.

где я могу найти этот документ и как найти основные и второстепенные для драйвера устройства ???

Комментарии:

1. Когда драйвер поддерживает несколько устройств, второстепенные номера обычно назначаются в порядке от 0.

Ответ №1:

Команда cat /proc/devices показывает символы и блокирует основные номера устройств, используемые драйверами в текущем ядре Linux, но не предоставляет никакой информации о второстепенных номерах устройств.

В руководстве пользователя и администратора ядра Linux приведен список предварительно назначенных (зарезервированных) номеров устройств: Выделенные устройства Linux (версия 4.x ). (Тот же список также отображается в «Documentation/admin-guide/devices.txt» в исходниках ядра Linux.) В списке показано, как интерпретируются второстепенные номера устройств для каждого предварительно назначенного символа и блокируются основные номера устройств.

Некоторые основные номера устройств зарезервированы для локального или экспериментального использования или для динамического присвоения:

   60-63 char    LOCAL/EXPERIMENTAL USE

  60-63 block   LOCAL/EXPERIMENTAL USE
        Allocated for local/experimental use.  For devices not
        assigned official numbers, these ranges should be
        used in order to avoid conflicting with future assignments.
 
  120-127 char   LOCAL/EXPERIMENTAL USE

 120-127 block  LOCAL/EXPERIMENTAL USE
        Allocated for local/experimental use.  For devices not
        assigned official numbers, these ranges should be
        used in order to avoid conflicting with future assignments.
 
  234-254    char    RESERVED FOR DYNAMIC ASSIGNMENT
        Character devices that request a dynamic allocation of major number will
        take numbers starting from 254 and downward.

 240-254 block  LOCAL/EXPERIMENTAL USE
        Allocated for local/experimental use.  For devices not
        assigned official numbers, these ranges should be
        used in order to avoid conflicting with future assignments.
 
  384-511 char   RESERVED FOR DYNAMIC ASSIGNMENT
        Character devices that request a dynamic allocation of major
        number will take numbers starting from 511 and downward,
        once the 234-254 range is full.
 

Драйверам символьных устройств, которые вызывают alloc_chrdev_region() для регистрации диапазона номеров символьных устройств, будет присвоен неиспользуемый основной номер устройства из динамического диапазона. То же самое верно для драйверов символьных устройств, которые вызывают __register_chrdev() с первым аргументом ( major ), равным 0.

Некоторые внешние («вне дерева») Модули ядра Linux имеют параметр модуля, позволяющий указывать основной номер устройства по умолчанию во время загрузки модуля. Это полезно для драйверов, которые не создают свои записи «/dev» динамически, но хотят, чтобы системный администратор мог гибко выбирать основной номер устройства при создании файлов устройств вручную mknod .

Ответ №2:

документы: https://www.oreilly.com/library/view/linux-device-drivers/0596000081/ch03s02.html

https://tldp.org/LDP/tlk/dd/drivers.html

 how to find the appropriate minor amp; major number for a device number:
ls -l /dev/
cat /proc/devices  shows the same as lsblk