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