На Linux дано:
- устройство, например
/dev/sda
, - и его старшие и младшие номера, например
8, 0
,
как я могу узнать, какой модуль / драйвер его "ведет"?
Могу ли я покопаться /sys
или /proc
открыть это?
linux
drivers
kernel-modules
Totor
источник
источник
lsmod
,/proc/modules
аmodinfo
?Ответы:
Чтобы получить эту информацию
sysfs
для файла устройства, сначала определите старший / младший номер, посмотрев на выводls -l
, например,Это
8, 0
говорит нам, что старшее число есть,8
а младшее есть0
. Вb
начале списка также говорится, что это блочное устройство. Другие устройства могут иметьc
символьное устройство в начале.Если вы посмотрите вниз
/sys/dev
, вы увидите, что есть две директории. Один звонил,block
а другой звонилchar
. Понятно, что они предназначены для блочных и символьных устройств соответственно. Каждое устройство затем доступно по его старшему / младшему номеру в этом каталоге. Если для устройства доступен драйвер, его можно найти, прочитав цельdriver
ссылки в этом илиdevice
подкаталоге. Например, для моего/dev/sda
я могу просто сделать:Это показывает, что
sd
драйвер используется для устройства. Если вы не уверены, является ли устройство блочным или символьным устройством, в оболочке вы можете просто заменить эту часть на*
. Это работает так же хорошо:Доступ к блочным устройствам также можно получить напрямую через их имя через
/sys/block
или/sys/class/block
. Например:Обратите внимание, что наличие различных каталогов
/sys
может меняться в зависимости от конфигурации ядра. Также не все устройства имеютdevice
подпапку. Например, это относится к файлам устройств разделов, таким как/dev/sda1
. Здесь вы должны получить доступ к устройству для всего диска (к сожалению,sys
для этого нет ссылок).Последнее, что может быть полезно сделать, - перечислить драйверы для всех устройств, для которых они доступны. Для этого вы можете использовать globs для выбора всех каталогов, в которых есть ссылки на драйверы. Например:
Наконец, чтобы немного отклониться от вопроса, я добавлю еще один
/sys
хитрый трюк, чтобы получить более широкое представление о том, какие драйверы используются какими устройствами (хотя и не обязательно теми, которые имеют файл устройства):Обновить
При более внимательном рассмотрении выходных данных
udevadm
он, похоже, работает, находя канонический/sys
каталог (как вы могли бы получить, если вы разыменовали основные / второстепенные каталоги выше), а затем прокладывал путь вверх по дереву каталогов, распечатывая любую найденную информацию. Таким образом, вы получаете информацию о родительских устройствах и любых драйверах, которые они используют.Чтобы поэкспериментировать с этим, я написал скрипт ниже, чтобы пройтись по дереву каталогов и отобразить информацию на каждом соответствующем уровне.
udev
Похоже, что на каждом уровне ищут читаемые файлы с их именами и содержимымATTRS
. Вместо этого я отображаю содержимоеuevent
файлов на каждом уровне (по-видимому, наличие этого определяет отдельный уровень, а не просто подкаталог). Я также показываю базовое имя любых ссылок на подсистемы, которые я нахожу, и это показывает, как устройство вписывается в эту иерархию.udevadm
не отображает ту же информацию, так что это хороший дополнительный инструмент. Информация о родительском устройстве (например,PCI
информация) также полезна, если вы хотите сопоставить выходные данные других инструментов, таких какlshw
устройства более высокого уровня.источник
udevadm
ответ даст вамsd
иahci
. Есть ли способ определитьahci
, используется ли также?device/device/
, поэтому мояreadlink
команда выглядела такreadlink /sys/dev/char/XX\:Y/device/device/driver
.Вы можете использовать
udevadm
инструмент, чтобы обнаружить это.Команда будет
udevadm info -a -n /dev/sda
, а затем посмотрите наDRIVER==
параметры.Это показывает, что на самом деле в обеспечении этого устройства участвуют 2 драйвера,
sd
иahci
. Первый,sd
непосредственно отвечает за/dev/sda
устройство, но используетahci
драйвер под ним.Вывод
udevadm
команды выглядит следующим образом и включает описание того, как она работает.источник
udevadm
удалено (или даже рекомендуется)? Я не могу найти ничего, даже намекая на это.Используйте команду hwinfo и выведите модель и драйвер. Если нет драйвера, он не будет показан. Например для дисков:
Для сетевых карт:
Для USB-устройств:
Используйте hwinfo --help, чтобы узнать, какие другие типы устройств вы можете запросить. hwinfo устанавливается по умолчанию, например, в SUSE Linux.
источник
--only
опции. Напримерhwinfo --block --only /dev/sda | grep ...
.lshw
это удивительный инструмент для перечисления оборудования, найденного на вашем компьютере. Вы должны будете установить его перед запуском.Используйте
yum
или вapt-get
зависимости от системы, которую вы используете. Затем, чтобы конкретно перечислить оборудование для хранения:Вы можете запустить его,
root
чтобы получить всю информацию обратно.В противном случае
lspci
также можете предоставить информацию о вашем оборудовании:Чтобы узнать старший и младший номер устройства, просто запустите
ls
на нем.В этом выводе
b
inbrw-rw----.
означает, что это блочное устройство. Цифры8
и0
являются соответственно старшим и младшим номером устройства.источник
lshw
иlspci
вы можете увидеть модуль, используемый устройством: configuration: driver = ahci latency = 0 и используемый драйвер ядра: ahci .