#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