Skip to main content

Tutto sul comando Linux / Unix: insmod

How to use lsmod, insmod, and rmmod commands in Linux (Giugno 2025)

How to use lsmod, insmod, and rmmod commands in Linux (Giugno 2025)
Anonim

Il comando Linux / Unix insmod installa un modulo caricabile nel kernel in esecuzione.insmod prova a collegare un modulo al kernel in esecuzione risolvendo tutti i simboli dalla tabella dei simboli esportata del kernel.

Se il nome del file del modulo è dato senza directory o estensione,insmod cercherà il modulo in alcune directory predefinite comuni. La variabile di ambienteMODPATH può essere usato per sovrascrivere questo valore predefinito. Se un file di configurazione del modulo come/etc/modules.conf esiste, sovrascriverà i percorsi definiti inMODPATH.

La variabile di ambienteMODULECONF può anche essere utilizzato per selezionare un file di configurazione diverso da quello predefinito/etc/modules.conf (o/etc/conf.modules (Deprecato)). Questa variabile d'ambiente sostituirà tutte le definizioni precedenti.

Quando l'ambiente è variabileUNAME_MACHINE è impostato, modutils userà il suo valore invece del campo macchina dal syscall uname (). Questo è principalmente utile quando si compilano moduli a 64 bit nello spazio utente a 32 bit o viceversa, impostatoUNAME_MACHINE al tipo dei moduli. Le modulazioni attuali non supportano la modalità di cross-build completa per i moduli, è limitata alla scelta tra le versioni a 32 e 64 bit dell'architettura host.

Opzioni

-e persist_name , --persistere= persist_name

Specifica dove vengono letti i dati persistenti per il modulo sul carico e scritti quando questa istanza del modulo viene scaricata. Questa opzione viene ignorata silenziosamente se il modulo non ha dati persistenti. I dati persistenti vengono letti solo dainsmod se questa opzione è presente, per impostazione predefinitainsmod non elabora dati persistenti.

Come forma abbreviata,-e "" (una stringa vuota) viene interpretata dainsmod come valore dipersistdir come definito inmodules.conf, seguito dal nome del file del modulo relativo al percorso di ricerca del modulo in cui è stato trovato, meno qualsiasi trailing ".gz", ".o" o ".mod". Semodules.conf specifica "persistdir ="(cioèpersistdir è un campo vuoto), quindi questa forma abbreviata viene silenziosamente ignorata. (Vederemodules.conf (5).)

-f, --vigore

Tenta di caricare il modulo anche se la versione del kernel in esecuzione e la versione del kernel per cui il modulo è stato compilato non corrispondono. Questo sostituisce solo il controllo della versione del kernel, non ha alcun effetto sui controlli dei nomi dei simboli. Se i nomi dei simboli nel modulo non corrispondono al kernel, non c'è modo di forzareinsmod caricare il modulo.

-h, --Aiuto

Visualizza un riepilogo delle opzioni e immediatamente esci.

-K, --autoclean

Imposta il flag auto-clean sul modulo. Questo flag verrà utilizzato dakerneld(8) per rimuovere i moduli che non sono stati utilizzati in un certo periodo di tempo - di solito un minuto.

-L, --serratura

Usogregge(2) per evitare carichi simultanei dello stesso modulo.

-m, --carta geografica

Esegui una mappa di caricamento su stdout, rendendo più facile il debug del modulo in caso di panico del kernel.

-n, --nessun caricamento

Esecuzione fittizia, fai tutto eccetto caricare il modulo nel kernel. Se richiesto da un-m o-O, la corsa produrrà una mappa o un file blob. Poiché il modulo non è caricato, il vero indirizzo di caricamento del kernel è sconosciuto, quindi il file di mappa e blob si basa su un indirizzo di caricamento arbitrario di 0x12340000.

-o nome_modulo , --nome= nome_modulo

Assegnare esplicitamente il nome al modulo, piuttosto che derivare il nome dal nome base del file dell'oggetto sorgente.

-O blob_name , --blob= blob_name

Salva l'oggetto binario in blob_name . Il risultato è un blob binario (senza intestazioni ELF) che mostra esattamente cosa viene caricato nel kernel dopo la manipolazione e il riposizionamento delle sezioni. Opzione-m si consiglia di ottenere una mappa dell'oggetto.

-p, --sonda

Sonda il modulo per vedere se potrebbe essere caricato con successo. Ciò include l'individuazione del file oggetto nel percorso del modulo, il controllo dei numeri di versione e la risoluzione dei simboli. Non controlla le delocalizzazioni né produce un map o un file blob.

-P prefisso , --prefisso= prefisso

Questa opzione può essere utilizzata con moduli versionati per un kernel SMP o bigmem, poiché tali moduli hanno un prefisso aggiuntivo aggiunto nei loro nomi di simboli. Se il kernel è stato costruito con versioni di simboli allorainsmod estrarrà automaticamente il prefisso dalla definizione di "get_module_symbol" o "inter_module_get", uno dei quali deve esistere in qualsiasi kernel che supporti i moduli. Se il kernel non ha versioni di simboli ma il modulo è stato costruito con versioni di simboli, l'utente deve fornire-P.

-q, --silenzioso

Non stampare un elenco di simboli non risolti. Non lamentarti della mancata corrispondenza della versione. Il problema si rifletterà solo nello stato di uscita diinsmod.

-r, --radice

Alcuni utenti compilano moduli con un ID utente non root, quindi installano i moduli come root. Questo processo può lasciare i moduli di proprietà dell'utente non root, anche se la directory dei moduli è di proprietà di root. Se l'ID utente non root viene compromesso, un intruso può sovrascrivere i moduli esistenti di proprietà di quell'utente e utilizzare questa esposizione per eseguire il bootstrap fino all'accesso root.

Per impostazione predefinita, modutils rifiuterà i tentativi di utilizzare un modulo che non è di proprietà di root. specificando -r alterna il controllo e consente a root di caricare moduli che non sono di proprietà di root.

Nota: Il valore predefinito per il controllo root può essere modificato quando è configurato modutils.L'uso di -r per disabilitare il controllo di root o l'impostazione di default su "no root check" al momento della configurazione è un'esposizione di sicurezza importante e non è raccomandato.

-S, --syslog

Invia tutto asyslog(3) al posto del terminale.

-S, --kallsyms

Forza il modulo caricato da averekallsyms dati, anche se il kernel non lo supporta. Questa opzione è per piccoli sistemi in cui il kernel viene caricato senzakallsyms dati ma i moduli selezionati hanno bisognokallsyms per il debug. Questa opzione è l'impostazione predefinita su Red Hat Linux.

-v, --verbose

Sii prolisso.

-V, --versione

Mostra la versione diinsmod.

-X, --esportare; -X, --noexport

Esegui e non esportare tutti i simboli esterni del modulo, rispettivamente. L'impostazione predefinita prevede l'esportazione dei simboli. Questa opzione è efficace solo se il modulo non esporta in modo esplicito la propria tabella dei simboli controllata, e quindi è deprecato.

-Y, --ksymoops; -y, --noksymoops

Fai e non aggiungereksymoops simboli per ksyms. Questi simboli sono usati daksymoops per fornire un debug migliore se c'è un Oops in questo modulo. L'impostazione predefinita è perksymoopssimboli da definire. Questa opzione è indipendente dal-X/-X opzioni.

ksymoops i simboli aggiungono circa 260 byte per modulo caricato. A meno che tu non sia davvero a corto di spazio sul kernel e stai cercando di ridurre ksyms alla sua dimensione minima, prendi il valore predefinito e ottieni un debug di Oops più accurato.ksymoops i simboli sono necessari per salvare i dati del modulo persistente.

-N, --numeric-only

Controlla solo la parte numerica della versione del modulo rispetto alla versione del kernel, ad esempio ignora EXTRAVERSION quando decidi se un modulo appartiene a un kernel. Questo flag viene automaticamente impostato per il kernel 2.5 in poi, è facoltativo per i kernel precedenti.

Parametri del modulo

Alcuni moduli accettano parametri di caricamento per personalizzare il loro funzionamento. Questi parametri sono spesso porte I / O e numeri IRQ che variano da macchina a macchina e non possono essere determinati dall'hardware.

Nei moduli creati per i kernel della serie 2.0, qualsiasi simbolo di puntatore intero o carattere può essere trattato come un parametro e modificato. A partire dai kernel della serie 2.1, i simboli vengono esplicitamente contrassegnati come parametri in modo che solo i valori specifici possano essere modificati. Inoltre, vengono fornite informazioni sul tipo per verificare i valori forniti al momento del caricamento.

Nel caso di numeri interi, tutti i valori possono essere in decimale, ottale o esadecimale a la C: 17, 021 o 0x11. Gli elementi dell'array sono sequenze specificate separate da virgole. Gli elementi possono essere saltati omettendo il valore.

Nei moduli della serie 2.0, i valori che non iniziano con un numero sono considerati stringhe. A partire dal 2.1, le informazioni sul tipo del parametro indicano se interpretare il valore come una stringa. Se il valore inizia con virgolette doppie ('), la stringa viene interpretata come in C, sequenze di escape e tutto. Si noti che dal prompt della shell, potrebbe essere necessario proteggere le virgolette dall'interpretazione della shell.

Moduli e simboli con licenza GPL

A partire dal kernel 2.4.10, i moduli dovrebbero avere una stringa di licenza, definita usandoMODULE_LICENSE (). Diverse stringhe sono riconosciute come compatibili con GPL; qualsiasi altra stringa di licenza o nessuna licenza significa che il modulo è trattato come proprietario.

Se il kernel supporta il/ Proc / sys / kernel / contaminato bandiera allorainsmod OPPURE il flag contaminato con '1' durante il caricamento di un modulo senza licenza GPL. Viene emesso un avviso se il kernel supporta la tainting e un modulo viene caricato senza una licenza. Viene sempre emesso un avviso per i moduli che hanno aMODULE_LICENSE () non è compatibile con GPL, anche su kernel meno recenti che non supportano la contaminazione. Questo minimizza gli avvertimenti quando viene usata una nuova modutil sui kernel più vecchi.

insmod -f (forza) la modalità OPPURE la bandiera contaminata con '2' sui kernel che supportano la contaminazione. Invia sempre un avvertimento.

Alcuni sviluppatori del kernel richiedono che i simboli esportati dal proprio codice debbano essere utilizzati solo dai moduli con una licenza compatibile GPL. Questi simboli vengono esportati daEXPORT_SYMBOL_GPL invece del normaleEXPORT_SYMBOL. I simboli solo GPL esportati dal kernel e da altri moduli sono visibili solo ai moduli con licenza GPL-compatibile, questi simboli compaiono/ Proc / ksyms con un prefisso dell 'GPLONLY_'. insmod ignora ilGPLONLY_ prefisso sui simboli durante il caricamento di un modulo con licenza GPL in modo che il modulo si riferisca solo al nome normale del simbolo, senza il prefisso. I simboli GPL only non sono resi disponibili per i moduli senza una licenza GPL compatibile, questo include moduli senza alcuna licenza.

Assistenza Ksymoops

Per aiutare con il debug del kernel Oops quando si usano i moduli,insmod per impostazione predefinita aggiungere alcuni simboli a ksyms, vedere il-Y opzione. Questi simboli iniziano con__insmod_ modulename_ . Il modulename è necessario per rendere i simboli unici. È legale caricare lo stesso oggetto più di una volta con nomi di moduli diversi. Attualmente, i simboli definiti sono:

__insmod_ modulename _ Oobjectfile _ Mmtime _ vVersion

objectfile è il nome del file da cui è stato caricato l'oggetto. Ciò garantisce che ksymoops possa abbinare il codice all'oggetto corretto. mtime è l'ultimo timestamp modificato su quel file in hex, zero se stat failed. versione è la versione del kernel per cui è stato compilato il modulo, -1 se non è disponibile alcuna versione. Il_O il simbolo ha lo stesso indirizzo iniziale dell'intestazione del modulo.

__insmod_ modulename _ Ssectionname _ Llength

Questo simbolo appare all'inizio delle sezioni ELF selezionate, attualmente .text, .rodata, .data, .bss e .sbss. Appare solo se la sezione ha una dimensione diversa da zero. nome_sezione è il nome della sezione ELF, lunghezza è la lunghezza della sezione in decimale. Questi simboli aiutano ksymoops a mappare gli indirizzi alle sezioni quando non ci sono simboli disponibili.

__insmod_ modulename _Ppersistent_ nome del file

Solo creato dainsmod se il modulo ha uno o più parametri contrassegnati come dati permanenti e un nome file per salvare i dati persistenti (vedere-e, sopra) è disponibile.

L'altro problema con il debug del kernel Oops nei moduli è il contenuto di / proc / ksyms e / proc / modules può cambiare tra Oops e quando si elabora il file di log. Per aiutare a superare questo problema, se la directory / var / log / ksymoops esiste allorainsmod ermmod copierà automaticamente / proc / ksyms e / proc / modules in / var / log / ksymoops con un prefisso `date +% Y% m% d% H% M% S`. L'amministratore di sistema può dire a ksymoops quali file di snapshot usare durante il debug di un Oops. Non c'è nessun interruttore per disabilitare questa copia automatica. Se non vuoi che si verifichi, non creare / var / log / ksymoops. Se questa directory esiste, dovrebbe essere di proprietà di root ed essere la modalità 644 o 600 e si dovrebbe eseguire questo script ogni giorno o così. Lo script di seguito è installato come insmod_ksymoops_clean.

#! / Bin / sh # Elimina i ksyms salvati e i moduli non accessibili in 2 giorni se -d / var / log / ksymoops poi imposta -e # Assicurati che ci sia sempre almeno una versione d = `date +% Y% m% d% H% M% S` cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}.modules trova / var / log / ksymoops -type f -atime +2 -exec rm {} ; fi

Informazioni di base da sapere

NOME

insmod - Installa il modulo del kernel caricabile

SINOSSI

insmod -fhkLmnpqrsSvVxXyYN -e persist_name -o nome_modulo -O blob_name -P prefisso modulo simbolo= valore …