Когда ядро обнаруживает новое устройство, оно запускает программу modprobe
и передает ему имя, которое идентифицирует устройство. Большинство устройств идентифицируются по зарегистрированным номерам для поставщика и модели, например, идентификаторы PCI или USB . modprobe
Программа обращается к таблице модуля псевдонима , чтобы найти имя файла , который содержит драйвер для данного устройства. Аналогичный принцип применяется к драйверам для вещей, которые не являются аппаратными устройствами, такими как файловые системы и криптографические алгоритмы. Для получения дополнительной информации см. Debian не обнаруживает последовательную карту PCI после перезагрузки./lib/modules/VERSION/modules.alias
Как только modprobe определит, какой модуль file ( .ko
) содержит запрошенный драйвер, он загружает файл модуля в ядро: код модуля динамически загружается в ядро. Если модуль загружен успешно, он появится в списке из lsmod
.
Автоматическая загрузка модулей происходит, когда ядро обнаруживает новое горячее подключаемое оборудование, например, когда вы подключаете периферийное устройство USB. Операционная система также выполняет перечисление всего оборудования, которое присутствует в системе на ранних этапах запуска, чтобы загрузить драйверы для периферийных устройств, которые присутствуют во время загрузки.
Также можно вручную запросить загрузку модуля с помощью команды modprobe
или insmod
. Большинство дистрибутивов содержат скрипт запуска, который загружает модули, перечисленные в /etc/modules
. Другой способ загрузки модулей - это если они зависят от модуля: если модуль A зависит от модуля B, то modprobe A
загружает B перед загрузкой A.
После загрузки модуля он остается загруженным до тех пор, пока не будет явно выгружен, даже если все устройства, использующие этот драйвер, были отключены. Давным-давно существовал механизм автоматической выгрузки неиспользуемых модулей, но он был удален, если я правильно помню, когда на сцену вышел udev. Я подозреваю, что автоматическая выгрузка модулей не является обычной функцией, потому что системы, которые, как правило, нуждаются в этом, в основном являются настольными ПК с большим количеством памяти в любом случае (в масштабе кода драйвера).
/etc/modules
.rt2800usb
находится в выводеlsmod
, и означает ли это, что я подключил его устройство к компьютеру до загрузки?