Qual è la sequenza che carica il modulo del kernel Linux all'avvio? Come viene impostata la priorità per loro?


9

Ho un modulo del kernel Linux che ho compilato dinamicamente. Come viene aggiunto all'avvio? Ci sono molti .kofile in /lib/modules. Come viene impostata la priorità per il caricamento di questi moduli?

Risposte:


11

Non vengono caricati automaticamente all'avvio o in qualsiasi altro momento, anche se molti di essi finiscono per essere caricati durante l'avvio. Esistono tre diversi meccanismi con cui ciò accade:

  • Richiesta spazio utenti: che copre tutto, dai servizi di init a udev alla riga di comando. Init o udev sono probabilmente i mezzi più semplici se si desidera caricare un modulo specifico al momento dell'avvio.

  • Dispositivo hotplugged: quando si collega qualcosa, ad esempio, USB o PCI, il kernel lo rileva e richiede un modulo appropriato in base al modo in cui il dispositivo si identifica.

  • Protocollo necessario o altra implementazione : quando il kernel deve fare qualcosa, come leggere un filesystem, e scopre che non ha le conoscenze per farlo, richiederà un modulo.

Si noti che negli ultimi due ho usato la frase "richiesta un modulo" - questo perché il kernel si carica effettivamente tramite un demone dello spazio utente, kmodche viene eseguito /sbin/modprobe. Secondo Wolfgang Mauerer in Linux Kernel Architecture , ci sono solo ~ 100 punti diversi nel kernel 2.6 dove chiama una request_module()funzione interna .

modprobeutilizza un database di MODULE_ALIAS installati. Questi sono specificati esplicitamente nel codice sorgente del modulo o derivati ​​dal suo MODULE_DEVICE_TABLE, che è un elenco di ID dispositivo OEM che il modulo offre.


3

Molti sistemi sono impostati per utilizzare un initrd o initramfs . Queste sono immagini di filesystem che vengono caricate dal bootloader e rese disponibili al kernel prima che monti la partizione root. Ciò consente di compilare come moduli i driver necessari per montare la partizione di root (driver del disco, driver del file system, mapper del dispositivo o volume logico, ecc.) E caricarli da initrd / initramfs.

Gli script di avvio su initrd ( /linuxrc) o initramfs ( /init) in genere caricano alcuni moduli e individuano il filesystem di root. Ogni distribuzione ha la sua configurazione. Ubuntu utilizza un initramfs che viene assemblato dai componenti nel initramfs-toolspacchetto e rigenerato per ciascun kernel in base ai driver necessari per montare il filesystem di root.

Dopo aver montato il filesystem di root, durante l'avvio del sistema, vengono caricati i moduli elencati in /etc/modules(Debian, ...) o /etc/modules.conf(Red Hat, Arch, ...). Questo file di solito elenca alcuni moduli, se presenti. La maggior parte dei moduli sono caricati su richiesta.

Quando il kernel rileva dell'hardware per il quale manca un driver o alcuni altri componenti come protocolli di rete o algoritmi crittografici, chiama /sbin/modprobeper caricare il modulo. Per i driver hardware, il kernel passa i nomi che codificano l'id PCI, l'id USB o altra designazione sistematica dell'hardware. C'è una tabella /lib/modules/$VERSION/modules.aliasche mappa queste designazioni sistematiche sui nomi dei moduli. Questa tabella è generata depmode letta da modprobe.

Se si dispone di un modulo kernel aggiuntivo compilato manualmente per un dispositivo hardware, rilasciarlo /lib/modules/$VERSION/local(creare la localsottodirectory se non esiste) ed eseguire depmod -aper rigenerare il database alias. Se il modulo è per qualche caratteristica insolita che il kernel non è in grado di rilevare automaticamente, rilasciarlo /lib/modules/$VERSION/local, eseguirlo depmod -aper analizzare le sue dipendenze e aggiungere il nome del modulo /etc/modules.


Non riesco a trovare /var/lib/modulesné un /lib/modules/*/local, né posso trovare alcuna menzione di questo su Google o nella depmodpagina man. Guardato in CentOS 6.4, 7.4 e Ubuntu 19.04.
entrato il

@itsadok Sono abbastanza sicuro di voler scrivere /lib/modules/…. Basta creare la localsottodirectory ( depmodattraversa /lib/module/$VERSIONricorsivamente).
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.