
Насколько я знаю:
Один драйвер может быть связан с одним или несколькими «устройствами».
Файлы в /dev files представляют эти устройства. Драйвер имеет основной номер, а каждое устройство также имеет дополнительный номер, поэтому (основной, дополнительный) идентифицирует одно устройство.
/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
Модули ядра («драйверы», если хотите) могут регистрировать блочные или символьные устройства (в традиционном смысле unix, «устройство» — это слово со многими значениями) в ядре, используя процедуру, подобную register_blkdev
вместе со строкой, которая должна идентифицировать устройство. Можно использоватьлюбойstring для этой цели, и эти строки отображаются в /proc/devices
файле (который является просто текстовым представлением этой таблицы ядра).
С другой стороны, в современных системах Linux файлы /dev
создаются с udev
помощью ряда сложных правил. Предполагается, что эти файлы представляют способы взаимодействия пользовательского пространства с ядром через чтение, запись и ioctl, что работает, поскольку это «специальные» файлы с главным и второстепенным номером устройства, поэтому доступ к этим файлам преобразуется в вызовы ядра (грубо говоря).
Эти два и их структура совершенно не связаны. Единственная связь заключается в том, что главный номер устройства такого специального файла ищется всякий раз, когда к такому файлу обращаются, и используется для поиска модуля, который его зарегистрировал. Строка, под которой он был зарегистрирован, совершенно не имеет значения. Имя, под которым появляется файл, также совершенно не имеет значения, если пользователь знает это имя. Ничто не мешает вам называть ваши диски /dev/this-disk
и /dev/that-disk
вместо /dev/sda
и, /dev/sdb
если вы чувствуете желание сделать это, и изменить udev
правила.
НоконечноЛюди любят упрощать вещи, поэтому строки, которые используются для регистрации устройств, часто совпадают или, по крайней мере, похожи на имена по умолчанию, под которыми они отображаются в /dev
. Но это единственная связь.