2

Насколько я знаю:

  • Один драйвер может быть связан с одним или несколькими "устройствами".

  • Файлы в /dev файлах представляют эти устройства. Драйвер имеет старший номер, а каждое устройство также имеет младший номер, поэтому (старший, младший) идентифицирует одно устройство.

  • /proc /devices также перечисляет устройства.

Если то, что я знаю, правда, тогда:

Почему /dev и /proc /devices имеют совершенно разные выходы? В dev есть имя устройства, старший номер и младший номер. А в /proc /devices есть старший номер и имя устройства, но не младший номер. Почему эти два списка показывают совершенно разные результаты даже для одного и того же номера?

Например, посмотрите на эту строку в ls -l /dev

crw------- 1 root root     10, 235 Sep 19 21:40 autofs

Это символьное устройство с большим номером 10 и младшим номером 235. Название устройства - autofs.

Теперь я проверяю запись с тем же основным номером в /proc /devices:

10 misc

Как вы видите, имя устройства совершенно другое, и нет младшего номера (как это идентифицирует устройство только по основному номеру?).

Кажется, что некоторая терминология смешана, но я не мог решить это.

1 ответ1

0

Модули ядра ("драйверы", если хотите) могут регистрировать блочные или символьные устройства (в традиционном смысле Unix "устройство" - это слово со многими значениями) в ядре, используя подпрограмму вроде register_blkdev вместе со строкой, которая должна идентифицировать устройство. Для этой цели можно использовать любую строку, и эти строки отображаются в файле /proc/devices (который является просто текстовым представлением этой таблицы ядра).

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

Эти двое и их структура абсолютно не связаны. Единственное соединение состоит в том, что основной номер устройства такого специального файла ищется при каждом обращении к такому файлу и используется для поиска модуля, который его зарегистрировал. Строка, под которой он был зарегистрирован, совершенно не имеет значения. Имя, под которым появляется файл, также совершенно не имеет значения, если пользователь знает имя. Ничто не мешает вам вызывать ваши диски /dev/this-disk и /dev/that-disk вместо /dev/sda и /dev/sdb если вы чувствуете желание сделать это, и измените правила udev .

Но, конечно, людям нравится упростить ситуацию, поэтому строки, используемые для регистрации устройств, часто совпадают или, по крайней мере, похожи на имена по умолчанию, под которыми они отображаются в /dev . Но это единственная связь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .