Откуда Linux знает, как и какие драйверы устанавливать в новой установке

Вы можете ограничить ущерб, разделив фиксированную и переменную части с помощью ключевого слова source в вашем основном файле интерфейсов . К сожалению, исходный каталог недоступен в wheezy.

2
10.02.2019, 05:19
2 ответа

(На основе кешированной 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 -Устройства шины X/PCIe

Это «подтип 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-устройств строки модалий выглядят следующим образом:

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-устройства

Они используют идентификаторы ACPI PNP с префиксом acpi:и разделенными двоеточиями :

.
acpi:IBM0071:PNP0511:

Устройства DMI

Это может быть очень длинная строка модалии:

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, то есть в основном мыши PS/2

Строка модалии будет выглядеть так:

serio:ty01pr00id00ex00

Значения здесь:

ty  01  (type)
pr  00  (prototype)
id  00  (id)
ex  00  (extra)

Другие типы шин/устройств

Существует множество других типов шин, распознаваемых ядром Linux. Изучение содержимого исходного файла ядра file2alias.c может помочь в расшифровке значения компонентов каждого типа строки модалии.

5
27.01.2020, 21:55

Все периферийные устройства идентифицируют себя в основном уникальными идентификаторами. Некоторые идентификаторы предназначены для общих интерфейсов (Жесткий диск/мышь и т. д. ). Linux имеет большинство встроенных драйверов, а универсальные драйверы имеют списки совместимости для идентификаторов, которые поддерживают ограниченный набор функций.

3
27.01.2020, 21:55

Теги

Похожие вопросы