Вы можете ограничить ущерб, разделив фиксированную и переменную части с помощью ключевого слова source
в вашем основном файле интерфейсов
. К сожалению, исходный каталог
недоступен в wheezy.
(На основе кешированной Google -копииhttp://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.htmlПеттера Рейнхольдсена.)
В аппаратном обеспечении существуют определенные стандартные идентификаторы устройств, к которым можно получить доступ, если вы знаете стандартный метод доступа для этой конкретной шины ввода-вывода или подсистемы, без каких-либо дополнительных сведений о фактическом устройстве. В Linux эти идентификаторы используются для создания строк модалиасов , которые затем используются для поиска правильного драйвера для каждого устройства.
Исходный код каждого модуля драйвера может включать структуры MODULE_DEVICE_TABLE
, которые используются командой depmod
для создания записей с подстановочными знаками псевдонима модуля, которые будут соответствовать строкам модалиаса оборудования, поддерживаемого этим конкретным модулем.
Когда ядро обнаруживает часть оборудования, для которого еще не загружен соответствующий драйвер, оно создает строку модалиаса из идентификаторов оборудования и использует ее для запроса автоматической загрузки модуля. Затем команда modprobe
будет использовать файл /lib/modules/$(uname -r)/modules.alias[.bin]
, созданный depmod
, чтобы проверить, существует ли соответствующий модуль. Если это так, этот модуль загружается и при необходимости может исследовать аппаратное обеспечение для получения дополнительных сведений.
Например, у меня есть карта DVB TV:
$ lspci -v -nn -s 07:00.0
07:00.0 Multimedia video controller [0400]: Conexant Systems, Inc. CX23885 PCI Video and Audio Decoder [14f1:8852] (rev 04)
Subsystem: Hauppauge computer works Inc. CX23885 PCI Video and Audio Decoder [0070:6a28]
Это приводит к такой строке модалии:
pci:v000014F1d00008852sv00000070sd00006A28bc04sc00i00
Модуль cx23885
имеет эти псевдонимы, основанные на MODULE_DEVICE_TABLE
в исходном коде:
# modinfo cx23885
...
alias: pci:v000014F1d00008880sv*sd*bc*sc*i*
alias: pci:v000014F1d00008852sv*sd*bc*sc*i*
...
Когда ядро обнаруживает карту, оно запускает команду modprobe pci:v000014F1d00008852sv00000070sd00006A28bc04sc00i00
. Второй псевдоним модуля cx23885
совпадает, поэтому этот модуль загружается.
Это «подтип PCI».Он использует такие строки модалий:
pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
Это можно расшифровать следующим образом:
v 00008086 (vendor)
d 00002770 (device)
sv 00001028 (subvendor)
sd 000001AD (subdevice)
bc 06 (bus class)
sc 00 (bus subclass)
i 00 (interface)
С помощью lspci -nn
вы можете увидеть идентификаторы класса, подкласса, производителя и устройства. Если вы добавите опцию -v
, вы также сможете увидеть идентификаторы подустройств субвендора :.
Для USB-устройств строки модалий выглядят следующим образом:
usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
Распаковывается в:
v 1D6B (device vendor)
p 0001 (device product)
d 0206 (bcddevice)
dc 09 (device class)
dsc 00 (device subclass)
dp 00 (device protocol)
ic 09 (interface class)
isc 00 (interface subclass)
ip 00 (interface protocol)
С помощью команды lsusb
вы можете увидеть идентификаторы производителя и продукта. Если вы используете опцию -v
, вы также можете увидеть другие идентификаторы.
Они используют идентификаторы ACPI PNP с префиксом acpi:
и разделенными двоеточиями :
acpi:IBM0071:PNP0511:
Это может быть очень длинная строка модалии:
dmi:bvnIBM:bvr1UETB6WW(1.66):bd06/15/2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:
Распаковывается в:
bvn IBM (BIOS vendor)
bvr 1UETB6WW(1.66) (BIOS version)
bd 06/15/2005 (BIOS date)
svn IBM (system vendor)
pn 2371H4G (product name)
pvr ThinkPadX40 (product version)
rvn IBM (board vendor)
rn 2371H4G (board name)
rvr NotAvailable (board version)
cvn IBM (chassis vendor)
ct 10 (chassis type)
cvr NotAvailable (chassis version)
Строка модалии будет выглядеть так:
serio:ty01pr00id00ex00
Значения здесь:
ty 01 (type)
pr 00 (prototype)
id 00 (id)
ex 00 (extra)
Существует множество других типов шин, распознаваемых ядром Linux. Изучение содержимого исходного файла ядра file2alias.c может помочь в расшифровке значения компонентов каждого типа строки модалии.
Все периферийные устройства идентифицируют себя в основном уникальными идентификаторами. Некоторые идентификаторы предназначены для общих интерфейсов (Жесткий диск/мышь и т. д. ). Linux имеет большинство встроенных драйверов, а универсальные драйверы имеют списки совместимости для идентификаторов, которые поддерживают ограниченный набор функций.