Подтвердить что ты не робот

Как ядро ​​Linux знает, какие драйверы загружаются при загрузке?

Я хотел бы знать это для первой загрузки и последующих ботов.

Я компилирую свое собственное ядро ​​и хочу, чтобы он был как можно более сухим. Я хочу создать файл .config вручную (в основном как опыт обучения), поэтому мне нужно знать все, что можно исключить. Я знаю, что возможное решение - посмотреть мой текущий список дистрибутивов загруженных драйверов. Однако мне интересно, как мой дистрибутив обнаружил, какие драйверы загружаются изначально.

ТИА.

4b9b3361

Ответ 1

Как ядро ​​Linux знает, какие драйверы загружаются при загрузке?

Ядро генерирует события для устройств, например. шину PCI, когда они подключены (горячие или холодные, события помещаются в очередь, пока пользовательское пространство не запускает AFAIR). udev получит эти события и выполнит вызовы modprobe, которые включают идентификаторы PID/VID (идентификаторы продукта/поставщика) устройства (ов); это обычно строка с некоторым * в ней. modprobe затем вычислит пересечение множества, выраженное подстановочным словом uudev load, и набором псевдонимов модулей ядра (сами по себе являются подстановочными знаками).

Так как USB/Firewire/etc. контроллеры обычно подключаются к шине PCI, что загружается ваш драйвер HCI. Вот как все решает; загрузка затем выполняется с помощью USB/Firewire PID/VID, конечно.

Модули сетевого протокола (например, ipv6), однако, не рассматриваются через udev; вместо этого, когда программа вызывает socket(AF_INET6, ...), ядро ​​напрямую вызывает modprobe (точнее: все, что находится в /proc/sys/kernel/modprobe), с несимметричным псевдонимом net-pf-10 в случае IPv6, потому что AF_INET6 имеет значение 10. modprobe затем загружает ipv6.ko, потому что это то, что имеет псевдоним net-pf-10.

Аналогично для файловых систем попытка mount -t foo приведет к тому, что ядро ​​также вызовет modprobe (опять же, через ____call_usermodehelper), на этот раз с foo в качестве аргумента.

Доступ к узлам устройства (например, /dev/loop0, если он уже существует) имеет ту же стратегию, если loop.ko еще не загружен. Ядро здесь запрашивает block-major-7-0 (поскольку loop0 обычно имеет (7,0), cf. ls -l), а loop.ko имеет подгонку block-major-7-*.

Ответ 2

Грег Кроа дает отличный пример того, как найти именно то, какие драйверы вам нужны для вашего ядра. Просим, ​​чтобы Грег предоставил свою книгу бесплатно в Интернете.

http://files.kroah.com/lkn/

Цитата из книг Грега

I'm especially proud of the chapter on how to figure out how to configure
a custom kernel based on the hardware running on your machine. This is an
essential task for anyone wanting to wring out the best possible speed and
control of your hardware.