Nejsou načteny automaticky při startu ani jindy, i když mnoho z nich se nakonec načte během bootování. Existují tři různé mechanismy, kterými se to děje:
-
Požadavek na uživatelský prostor: Který pokrývá vše od init služeb přes udev až po příkazový řádek. Init nebo udev jsou pravděpodobně nejpřímější prostředky, pokud chcete načíst konkrétní modul při spouštění.
-
Zařízení připojené za provozu: Když něco připojíte, například USB nebo PCI, jádro to detekuje a požádá o vhodný modul na základě toho, jak se zařízení identifikuje.
-
Potřebný protokol nebo jiná implementace :Když jádro potřebuje něco udělat, například přečíst souborový systém, a zjistí, že k tomu nemá dostatečné znalosti, vyžádá si modul.
Všimněte si, že pro poslední dva jsem použil frázi „požádat o modul“ – je to proto, že jádro se ve skutečnosti načítá prostřednictvím démona uživatelského prostoru kmod
který provede /sbin/modprobe
. Podle Wolfganga Mauerera v Linux Kernel Architecture , v jádře 2.6 je pouze ~100 různých bodů, kde volá interní request_module()
funkce.
modprobe
používá databázi nainstalovaných modulů MODULE_ALIAS. Ty jsou specifikovány ve zdrojovém kódu modulu explicitně nebo odvozeny z jeho MODULE_DEVICE_TABLE, což je seznam OEM ID zařízení, která modul obsluhuje.
Mnoho systémů je nastaveno pro použití initrd nebo initramfs. Toto jsou obrazy souborového systému, které jsou načteny zavaděčem a zpřístupněny jádru před připojením kořenového oddílu. To umožňuje, aby ovladače, které jsou nezbytné pro připojení kořenového oddílu (ovladače disků, ovladače souborového systému, mapovač zařízení nebo ovladače logického svazku, …) byly zkompilovány jako moduly a načteny z initrd/initramfs.
Spouštěcí skripty na initrd (/linuxrc
) nebo initramfs (/init
) obvykle načte některé moduly a najde kořenový souborový systém. Každá distribuce má své vlastní nastavení. Ubuntu používá initramfs, který je sestaven z komponent v initramfs-tools
a regeneruje se pro každé jádro na základě ovladačů nezbytných pro připojení kořenového souborového systému.
Po připojení kořenového souborového systému se během spouštění systému zobrazí moduly uvedené v /etc/modules
(Debian, …) nebo /etc/modules.conf
(Red Hat, Arch, …) jsou načteny. Tento soubor obvykle obsahuje několik modulů, pokud existují. Většina modulů se načítá na vyžádání.
Když jádro detekuje nějaký hardware, pro který mu chybí ovladač, nebo některé další komponenty, jako jsou síťové protokoly nebo kryptografické algoritmy, zavolá /sbin/modprobe
k načtení modulu. U ovladačů hardwaru předává jádro jména, která kódují PCI id, USB id nebo jiné systematické označení hardwaru. Tabulka je v /lib/modules/$VERSION/modules.alias
který mapuje tato systematická označení na názvy modulů. Tato tabulka je generována depmod
a číst pomocí modprobe
.
Pokud máte další modul jádra, který jste zkompilovali ručně pro hardwarové zařízení, vložte jej do /lib/modules/$VERSION/local
(vytvořte local
podadresář, pokud neexistuje) a spusťte depmod -a
k regeneraci databáze aliasů. Pokud je modul pro nějakou neobvyklou vlastnost, kterou jádro nedokáže automaticky detekovat, vložte jej do /lib/modules/$VERSION/local
, spusťte depmod -a
analyzovat jeho závislosti a přidat název modulu do /etc/modules
.