Comando modprobe Linux
Sui sistemi operativi Linux, il comando modprobe aggiunge e rimuove moduli dal kernel Linux.
Descrizione
I moduli sono parti di codice che estendono le funzionalità del kernel del sistema operativo senza la necessità di riavviare. Una volta caricati, i moduli risiedono in memoria e possono essere istanziati più volte; possono essere considerati analoghi a un driver di dispositivo.
modprobe utilizza gli elenchi di dipendenze e le mappe hardware generate da depmod per caricare o scaricare in modo intelligente i moduli nel kernel. Esegue l’inserimento e la rimozione effettivi utilizzando rispettivamente i programmi di livello inferiore insmod e rmmod.
Sebbene sia possibile chiamare manualmente insmod e rmmod, si consiglia di caricare e scaricare i moduli utilizzando depmod per garantire che eventuali dipendenze tra moduli siano considerate prima di apportare modifiche.
Descrizione tecnica
modprobe cerca nella directory del modulo,
/lib/modules/`uname -r`
per tutti i moduli e altri file, ad eccezione dei file di configurazione opzionali nella directory /etc/modprobe.d. modprobe utilizza anche le opzioni del modulo specificate nella riga di comando del kernel sotto forma di:
<module>.<option>
…e liste nere sotto forma di:
modprobe.blacklist=<module>
Le versioni moderne di Linux modprobe (versione post-kernel 2.4.x) non modificano i moduli stessi. Il lavoro di risoluzione dei simboli e di comprensione dei parametri viene svolto all’interno del kernel. L’errore del modulo è quindi a volte accompagnato da un messaggio del kernel: vedere dmesg per ulteriori informazioni sulla visualizzazione.
modprobe si aspetta un file module.dep.bin aggiornato (o un file module.dep leggibile dall’uomo di riserva), come generato dall’utility depmod. Questo file elenca gli altri moduli di cui ogni modulo ha bisogno (se ce ne sono) e modprobe lo usa per aggiungere o rimuovere automaticamente queste dipendenze.
Se vengono forniti argomenti dopo il nomemodulo, vengono passati al kernel (in aggiunta a qualsiasi opzione elencata nel file di configurazione).
Sintassi
modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-b] [modulename] [module parameters...]
modprobe [-r] [-v] [-n] [-i] [modulename...]
modprobe [-c]
modprobe [--dump-modversions] [filename]
Opzioni
-a, –all |
Inserisci tutti i nomi dei moduli nella riga di comando. |
-b,–usa-lista nera |
Questa opzione fa sì che modprobe applichi i comandi della lista nera nei file di configurazione (se presenti) anche ai nomi dei moduli. (Qualsiasi modulo che è stato inserito nella lista nera non viene caricato automaticamente.) |
-C, –config |
Questa opzione sovrascrive la directory di configurazione predefinita (/etc/modprobe.d).
Questa opzione viene passata attraverso i comandi di installazione o rimozione ad altri comandi modprobe nella variabile di ambiente MODPROBE_OPTIONS. |
-c, –showconfig |
Scarica la configurazione effettiva dalla directory config ed esci. |
–dump-modversions | Stampa un elenco di informazioni sulla versione del modulo richieste da un modulo. Questa opzione è comunemente usata dalle distribuzioni per impacchettare un modulo del kernel Linux usando il controllo delle versioni del modulo deps. |
-d, –dirname |
Directory in cui si trovano i moduli (/lib/modules/`uname -r` per impostazione predefinita). |
–prima volta | Normalmente, modprobe ha successo (e non fa nulla) se gli viene detto di inserire un modulo che è già presente o rimuovere un modulo che non è presente. Questo è l’ideale per script semplici; tuttavia, script più complicati spesso vogliono sapere se modprobe ha davvero fatto qualcosa: questa opzione fa fallire modprobe nel caso in cui in realtà non abbia fatto nulla. |
–force-vermagic | Ogni modulo contiene una piccola stringa contenente informazioni importanti, come le versioni del kernel e del compilatore. Se un modulo non si carica e il kernel si lamenta che la “versione magic” non corrisponde, puoi usare questa opzione per rimuoverlo. Questo vale per tutti i moduli inseriti: il modulo (o alias) sulla riga di comando e gli eventuali moduli da cui dipende.
Questo controllo è lì per la tua protezione, quindi questa opzione di utilizzo è pericolosa a meno che tu non sappia cosa stai facendo. |
–force-modversion | Quando i moduli vengono compilati con il set CONFIG_MODVERSIONS, viene creata una sezione che dettaglia le versioni di ogni interfaccia utilizzata dal (o fornita dal) modulo. Se un modulo non si carica e il kernel si lamenta che il modulo non è d’accordo su una versione di qualche interfaccia, puoi usare –force-modversion per rimuovere del tutto le informazioni sulla versione. Questo vale per tutti i moduli inseriti: il modulo (o alias) sulla riga di comando e gli eventuali moduli da cui dipende.
Questo controllo serve per la tua protezione, quindi usare questa opzione è pericoloso se non sai cosa stai facendo. |
-f, –force |
Prova a rimuovere qualsiasi informazione sulla versione dal modulo che potrebbe altrimenti impedirne il caricamento: è come usare sia –force-vermagic che –force-modversion. Questo vale per tutti i moduli inseriti: il modulo (o alias) sulla riga di comando e tutti i moduli da cui dipende.
Questi controlli sono lì per la tua protezione, quindi usare questa opzione è pericoloso se non sai cosa stai facendo. |
-io, |
Questa opzione fa in modo che modprobe ignori i comandi di installazione e rimozione nel file di configurazione (se presenti) per il modulo specificato nella riga di comando (qualsiasi modulo dipendente è ancora soggetto ai comandi impostati per loro nel file di configurazione). Entrambi i comandi di installazione e rimozione attualmente vengono ignorati quando questa opzione viene utilizzata indipendentemente dal fatto che la richiesta sia stata effettuata in modo più specifico con solo uno o l’altro (e non entrambi) di –ignore-install o –ignore-remove. |
-n, –dry-run, –show |
Questa opzione fa tutto ma in realtà inserisce o elimina i moduli (o esegue i comandi di installazione o rimozione). In combinazione con -v, è utile per il debug. Per ragioni storiche sia –dry-run che –show in realtà significano la stessa cosa e sono intercambiabili. |
-q, –quiet |
Con questo flag, modprobe non stamperà un messaggio di errore se tenti di rimuovere o inserire un modulo che non riesce a trovare (e non è un alias o un comando di installazione/rimozione). Tuttavia, ritorna ancora con uno stato di uscita diverso da zero. Il kernel lo usa per sondare opportunisticamente i moduli che potrebbero esistere usando request_module. |
-R, –resolve-alias |
Stampa tutti i nomi dei moduli che corrispondono a un alias. Questo può essere utile per il debug di problemi di alias del modulo. |
-r –rimuovi | Questa opzione fa sì che modprobe rimuova invece di inserire un modulo. Se anche i moduli da cui dipende sono inutilizzati, modprobe prova a rimuoverli anche loro. A differenza dell’inserimento, è possibile specificare più di un modulo sulla riga di comando (non ha senso specificare i parametri del modulo durante la rimozione dei moduli).
Di solito non c’è motivo per rimuovere i moduli, ma alcuni moduli difettosi lo richiedono. Il kernel della tua distribuzione potrebbe non essere stato creato per supportare la rimozione dei moduli. |
-S, –set-versione |
Imposta la versione del kernel, invece di usare uname per decidere la versione del kernel (che determina dove trovare i moduli). |
–show-dipende | Elenca le dipendenze di un modulo (o alias), incluso il modulo stesso. Questo produce un insieme (possibilmente vuoto) di nomi di file di moduli, uno per riga, ciascuno che inizia con “insmod” ed è spesso usato dalle distribuzioni per determinare quali moduli includere quando si generano immagini initrd/initramfs. I comandi di installazione che si applicano sono mostrati con il prefisso “install”. Non esegue nessuno dei comandi di installazione. Nota che modinfo può estrarre le dipendenze di un modulo dal modulo stesso, ma non sa nulla di alias o comandi di installazione. |
-s, –syslog |
Questa opzione fa sì che qualsiasi messaggio di errore passi attraverso il meccanismo syslog (come LOG_DAEMON con livello LOG_NOTICE) piuttosto che all’errore standard. Questo è anche abilitato automaticamente quando stderr non è disponibile.
Questa opzione viene passata attraverso i comandi di installazione o rimozione ad altri comandi modprobe nella variabile di ambiente MODPROBE_OPTIONS. |
-V, –versione |
Mostra le informazioni sulla versione di modprobe ed esci. |
-v, –verboso |
Modalità dettagliata; stampa messaggi su cosa sta facendo il programma. Di solito modprobe stampa i messaggi solo se qualcosa va storto. Questa opzione viene passata attraverso i comandi di installazione o rimozione ad altri comandi modprobe nella variabile di ambiente MODPROBE_OPTIONS. |
Esempi
La seguente serie di comandi illustra un modo comune di utilizzare modprobe. Ogni comando è preceduto da sudo, poiché richiedono i permessi di root:
sudo ln -s /path/to/your-kernel-module.ko /lib/modules/`uname -r`
sudo depmod -a
sudo modprobe your-kernel-module
Questi comandi eseguono le seguenti operazioni:
- Nel primo comando, usiamo ln per creare un collegamento simbolico al nostro file di modulo nella directory /lib/modules/kernel-release. Il comando uname -r, racchiuso tra virgolette, viene eseguito dalla shell e si traduce nella stringa appropriata che rappresenta la nostra versione di rilascio del kernel.
- Nel secondo comando, un elenco di dipendenze aggiornato viene generato da depmod -a per assicurarsi che il modulo che stiamo installando sia a conoscenza di tutti i moduli e le dipendenze esistenti. Questo elenco di dipendenze viene utilizzato da modprobe durante l’installazione del modulo nel terzo comando.
-
modprobe installa il modulo del kernel.
Comandi correlati
depmod — Genera un elenco delle dipendenze dei moduli del kernel e dei file di mappa associati.
insmod — Inserisce un modulo nel kernel Linux.
lsmod — Mostra lo stato dei moduli del kernel Linux.
modinfo — Mostra informazioni su un modulo del kernel Linux.
rmmod — Rimuove un modulo dal kernel Linux.
uname — Stampa le informazioni sul sistema corrente.