Tutto sul comando Linux/Unix: modprobe

Il Kernel Linux è diventato un grande pezzo di software. In un certo senso, è una buona cosa. In altri, lo rende alquanto inflessibile. La soluzione è suddividere parti del kernel in moduli. Questi moduli possono essere caricati o meno, data la configurazione del computer e le tue esigenze. Il comando modprobe carica nuovi moduli del kernel su un sistema Linux, consentendo di abilitare nuove funzionalità e supporto senza riavviare.

Ritratto di giovane architetto che utilizza laptop in un ufficio
Westend61 / Getty Images

Utilizzo di Modprobe

Modprobe è solitamente semplice da usare. Una volta che conosci il modulo del kernel che vuoi caricare, passalo al comando modprobe.

sudo modprobe rtl8723de

Questo è tutto quello che c'è da fare. Il modulo viene caricato fino al riavvio del sistema.

Se vuoi rimuovere un modulo senza riavviare, riesegui il comando con il tasto -R bandiera.

sudo modprobe -r rtl8723de

Per la maggior parte, questo è il modo in cui lavorerai con modprobe. Per saperne di più, consulta la documentazione tecnica di seguito.

Documentazione tecnica Modprobe

Il comando modprobe esegue la gestione di alto livello dei moduli caricabili.

Sinossi

modprobe [-adnqv] [-C config] modulo [simbolo=valore ...] modprobe [-adnqv] [-C config] [-T genere] modello modprobe -l [-C config] [-T genere] modello modprobe -c [-C configmodprobe -r [-dnv] [-C config] [modulo...] modprobe -Vh.

Opzioni

-un, --Tutti

Carica tutti i moduli corrispondenti invece di fermarti dopo il primo caricamento riuscito.

-C, --showconfig

Mostra la configurazione attualmente utilizzata.

-C, --configconfig

Usa il file config invece di (l'opzionale) /etc/modules.conf per specificare la configurazione. La variabile d'ambiente MODULECONF può essere utilizzato anche per selezionare (e sovrascrivere) un file di configurazione diverso da quello predefinito /etc/modules.conf (o /etc/conf.modules che è deprecato).

Quando variabile d'ambiente UNAME_MACHINE è impostato, modutils usa il suo valore invece del campo macchina dalla syscall uname(). Questo è principalmente utile quando si compilano moduli a 64 bit in uno spazio utente a 32 bit o viceversa, set UNAME_MACHINE alla tipologia dei moduli. Le attuali modutils non supportano la modalità cross-build completa per i moduli, è limitata alla scelta tra 32 bit e 64 bit versioni dell'architettura host.

-D, --debug

Mostra informazioni sulla rappresentazione interna dello stack di moduli.

-h, --aiuto

Visualizza un riepilogo delle opzioni ed esci immediatamente.

-K, --autoclean

Imposta la pulizia automatica sui moduli caricati. Usato dal kernel quando chiama modprobe per soddisfare una caratteristica mancante (fornito come modulo). Il -Q l'opzione è implicita in -K. Queste opzioni vengono inviate automaticamente a insmod.

-n, --mostrare

Non eseguire l'azione, mostra solo cosa verrebbe fatto.

-Q, --calmatevi

Non lamentarti se insmod non installa un modulo. Continua normalmente, ma in silenzio, con altre possibilità per il test di modprobe. Questa opzione viene inviata automaticamente a insmod.

-R, --rimuovere

Rimuovere il modulo (stack) o eseguire la pulizia automatica, a seconda che siano presenti moduli menzionati nella riga di comando.

-S, --syslog

Segnala tramite syslog anziché stderr. Questa opzione viene inviata automaticamente a insmod.

-Ttipo di modulo; --generetipo di modulo

Considera solo moduli di questo tipo. modprobe guarda solo i moduli il cui percorso di directory include esattamente /moduletype/. tipo di modulo può includere più di un nome di directory, ad esempio -Tdriver/rete elenca i moduli in xxx/driver/net/ e le sue sottodirectory.

-v, --verboso

Stampa tutti i comandi man mano che vengono eseguiti.

-V, --versione

Visualizza la versione di modprobe.

I nomi dei moduli non devono contenere percorsi (no /), né il nome può contenere il finale .o. Per esempio, scontrino è un nome di modulo valido per modprobe, /lib/modules/2.2.19/net/slip e slip.o non sono validi. Questo vale per la riga di comando e per le voci nel file config.

Descrizione del comando

Le utility modprobe e depmod hanno lo scopo di rendere un kernel modulare Linux più gestibile per utenti, amministratori e responsabili della distribuzione.

Modprobe usa un file di dipendenza simile a Makefile, creato da depmod, per caricare automaticamente i moduli rilevanti dall'insieme di moduli disponibili negli alberi di directory predefiniti.

Modprobe viene utilizzato per caricare un singolo modulo, uno stack di moduli dipendenti o tutti i moduli contrassegnati con un tag specificato.

Modprobe carica automaticamente tutti i moduli di base necessari in uno stack di moduli, come descritto dal file di dipendenza moduli.dep. Se il caricamento di uno di questi moduli fallisce, l'intero stack corrente di moduli caricati nella sessione corrente viene scaricato automaticamente.

Modprobe ha due modi per caricare i moduli. Un modo (la modalità sonda) proverà a caricare un modulo da un elenco (definito da modello). Modprobe interrompe il caricamento non appena un modulo viene caricato correttamente. Questo potrebbe essere usato per caricare automaticamente un driver Ethernet da un elenco. L'altro modo in cui modprobe può essere utilizzato è caricare tutti i moduli da un elenco.

Con l'opzione -R, modprobe scarica automaticamente una pila di moduli, in modo simile al modo rmmod -r fa. Usando solo modprobe -r pulisce i moduli caricati automaticamente inutilizzati ed esegue anche i comandi pre e post-rimozione nel file di configurazione /etc/modules.conf.

Combinando le opzioni -l e -T elenca tutti i moduli disponibili di un certo tipo.

Opzione -C stampa la configurazione attualmente utilizzata (default + file di configurazione).

Configurazione

Il comportamento di modprobe (e depmod) può essere modificato dal file di configurazione (opzionale) /etc/modules.conf. Per una descrizione dettagliata di cosa può contenere questo file, oltre alla configurazione predefinita utilizzata da depmod e modprobe, vedere moduli.conf(5).

I comandi pre e post rimozione non vengono eseguiti se un modulo viene ripulito automaticamente da kerneld. Cerca invece il supporto in arrivo per l'archiviazione dei moduli persistenti. Se desideri utilizzare le funzionalità di pre e post installazione, disattiva la pulizia automatica per kerneld e inserisci invece qualcosa come la seguente riga in crontab (questo è usato anche per i sistemi kmod) per eseguire la pulizia automatica ogni 2 minuti:

*/2 * * * * test -f /proc/modules && /sbin/modprobe -r

Strategia

L'idea è che modprobe cercherà prima nella directory contenente i moduli compilati per la versione corrente del kernel. Se il modulo non viene trovato lì, modprobe cerca nella directory comune alla versione del kernel (ad esempio, 2.0, 2.2). Se il modulo non viene ancora trovato, modprobe cerca nella directory contenente i moduli una versione predefinita e così via.

Quando installi un nuovo Linux, i moduli dovrebbero essere spostati in una directory relativa al rilascio (e versione) del kernel che stai installando. Quindi, crea un collegamento simbolico da questa directory alla directory predefinita.

Ogni volta che compili un nuovo kernel, il comando make module_install crea una nuova directory, ma non cambierà il collegamento predefinito.

Quando ottieni un modulo non correlato alla distribuzione del kernel, posizionalo in una delle directory indipendenti dalla versione sotto /lib/modules.

Questa è la strategia predefinita, che può essere ignorata in /etc/modules.conf.

Esempi

modprobe -t net

Carica uno dei moduli che sono memorizzati nella directory taggata netto. Ogni modulo viene provato finché uno non riesce.

modprobe -a -t boot

Tutti i moduli che sono archiviati nelle directory con tag avvio sono caricati.

slittamento modprobe

Questo tenta di caricare il modulo slhc.o se non è stato precedentemente caricato poiché il modulo slip necessita della funzionalità nel modulo slhc. Questa dipendenza è descritta nel file moduli.dep che è stato creato automaticamente da depmod.

modprobe -r slip

Questo scarica il modulo slip. Inoltre scarica automaticamente il modulo slhc, a meno che non venga utilizzato anche da qualche altro modulo (ad esempio, ppp).

Guarda anche: depmod(8), lsmod (8), kerneld (8), ksyms (8), rmmod(8).

Modalità sicura

Se l'uid effettivo non è uguale all'uid reale, modprobe tratta il suo input con estremo sospetto. L'ultimo parametro è sempre trattato come un nome di modulo, anche se inizia con -. Possono esserci solo un nome modulo e opzioni del modulo variabile=valore sono vietati. Il nome del modulo viene sempre trattato come una stringa, nessuna meta espansione viene eseguita in modalità provvisoria. Tuttavia, la meta espansione viene applicata ai dati letti dal file di configurazione.

euid potrebbe non essere uguale a uid quando modprobe viene invocato dal kernel, questo è vero per i kernel 2.4.0-test11 e successivi. In un mondo ideale, modprobe potrebbe fidarsi del kernel per passare solo parametri validi a modprobe. Tuttavia, si è verificato almeno un exploit di root locale perché il codice del kernel di alto livello ha passato parametri non verificati direttamente dall'utente a modprobe. Quindi modprobe non si fida più dell'input del kernel.

modprobe imposta automaticamente la modalità provvisoria quando l'ambiente è costituito solo da queste stringhe.

CASA=/
TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin

Questo rileva l'esecuzione di modprobe dal kernel sui kernel 2.2 e 2.4.0-test11, anche se uid == euid, cosa che fa sui kernel precedenti.

Comandi di registrazione

Se la directory /var/log/ksymoops esiste e modprobe viene eseguito con un'opzione che potrebbe caricare o eliminare un modulo, modprobe registra il suo comando e restituisce lo stato in /var/log/ksymoops/'date +%Y%m%d.log'. Non esiste un interruttore per disabilitare questa registrazione automatica, se non vuoi che si verifichi, non creare /var/log/ksymoops. Se quella directory esiste, dovrebbe essere di proprietà di root ed essere in modalità 644 o 600 e dovresti eseguire script insmod_ksymoops_clean ogni giorno o giù di lì.

Utilità richieste

depmod (8), insmod (8).

Utilizzare il uomo comando (% uomo) per vedere come viene utilizzato un comando sul tuo computer.