GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:un kernel contaminato in Linux?

In determinate condizioni, il kernel Linux potrebbe essere contaminato . Ad esempio, il caricamento di un driver video proprietario nel kernel contamina il kernel. Questa condizione può essere visibile nei registri di sistema, nei messaggi di errore del kernel (oops e panic) e tramite strumenti come lsmod e rimane fino al riavvio del sistema.

Cosa significa questo? Influisce sulla mia capacità di utilizzare il sistema e in che modo potrebbe influire sulle mie opzioni di supporto?

Risposta accettata:

Quando il kernel è contaminato, significa che è in uno stato non supportato dalla community . La maggior parte degli sviluppatori del kernel ignorerà le segnalazioni di bug che coinvolgono kernel contaminati e i membri della comunità potrebbero chiederti di correggere la condizione di contaminazione prima di poter procedere con la diagnosi dei problemi relativi al kernel. Inoltre, alcune funzionalità di debug e chiamate API potrebbero essere disabilitate quando il kernel è danneggiato.

Nella maggior parte dei casi che coinvolgono driver proprietari, puoi tranquillamente ignorare la condizione di contaminazione , ma alcuni scenari che causano la contaminazione del kernel possono essere indicativi di seri problemi di sistema.

La funzione ha lo scopo di identificare le condizioni che possono rendere difficile la corretta risoluzione di un problema del kernel. Ad esempio, il caricamento di un modulo proprietario può rendere inaffidabile l'output di debug del kernel perché gli sviluppatori del kernel non hanno accesso al codice sorgente del modulo e quindi non possono determinare cosa il modulo potrebbe aver fatto al kernel. Allo stesso modo, se il kernel ha precedentemente riscontrato una condizione di errore o se si è verificato un errore hardware grave, le informazioni di debug generate dal kernel potrebbero non essere affidabili.

Il kernel potrebbe contaminarsi per diversi motivi , inclusi (ma non limitati a) quanto segue:

  • L'uso di un modulo del kernel proprietario (o non compatibile con GPL):questa è la causa più comune di kernel contaminati e di solito deriva dal caricamento di driver video NVIDIA o AMD proprietari
  • L'uso della messa in scena driver, che fanno parte del codice sorgente del kernel ma non sono completamente testati
  • L'uso di out-of-tree moduli che non sono inclusi nel codice sorgente del kernel Linux
  • Caricamento o scaricamento forzato di un modulo del kernel (come l'inserimento forzato di un modulo non compilato per la versione corrente del kernel)
  • L'uso di un kernel SMP (multiprocessore) su alcune CPU uniprocessore non supportate, principalmente processori AMD Athlon meno recenti
  • Sostituzione dell'ACPI DSDT, a volte necessaria per correggere i bug di gestione dell'alimentazione (vedi qui per i dettagli)
  • Alcune condizioni di errore critiche, come eccezioni di controllo macchina e oopses del kernel
  • Alcuni bug seri nel firmware di sistema (BIOS, UEFI) che il kernel deve aggirare

Ognuna di queste condizioni è rappresentata da un particolare flag nel kernel. Alcuni fornitori di Linux, come SUSE, aggiungono ulteriori contrassegni di contaminazione per indicare condizioni come il caricamento di un modulo che non è supportato dal fornitore.

Maggiori informazioni sono disponibili nella documentazione del kernel. I contrassegni di contaminazione elencati sono (con _ un sostituto per "vuoto")

  • G|P :G se tutti i moduli caricati hanno una licenza GPL o compatibile, altrimenti è stato caricato un modulo proprietario. Si presume che i moduli senza MODULE_LICENSE o con MODULE_LICENSE non riconosciuti da insmod come compatibili con GPL siano proprietari.
  • F|_ :se un modulo è stato caricato forzatamente da “insmod -f” altrimenti se tutti i moduli sono stati caricati normalmente.
  • S|_ :se l'errore si è verificato su un kernel SMP in esecuzione su hardware che non è stato certificato come sicuro per l'esecuzione multiprocessore. Attualmente ciò si verifica solo su vari Athlon che non supportano SMP.
  • R|_ :se un modulo è stato scaricato forzatamente da rmmod -f , altrimenti se tutti i moduli sono stati scaricati normalmente.
  • M|_ :se un processore ha segnalato un'eccezione Machine Check,
    altrimenti non si sono verificate Eccezioni Machine Check.
  • B|_ :se una funzione di rilascio della pagina ha trovato un riferimento di pagina errato o alcuni flag di pagina imprevisti.
  • U|_ :se un utente o un'applicazione utente ha espressamente richiesto l'impostazione del flag Tainted.
  • D|_ :se il kernel è morto di recente, cioè si è verificato un OOPS o un BUG.
  • A|_ :se la tabella ACPI è stata sovrascritta.
  • C|_ :se un avviso è stato precedentemente emesso dal kernel (sebbene alcuni avvisi possano impostare flag di contaminazione più specifici.)
  • C|_ :se è stato caricato un driver di staging.
  • Io|_ :se il kernel sta risolvendo un grave bug nel firmware della piattaforma (BIOS o simile).
  • O|_ :se è stato caricato un modulo costruito esternamente (“out-of-tree”).
  • E|_ :se un modulo non firmato è stato caricato in un kernel che supporta la firma del modulo.
  • L|_ :se in precedenza si è verificato un soft lockup sul sistema.
  • K|_ :se il kernel è stato aggiornato in tempo reale.
Correlati:Linux – Come eseguire un comando in background con un ritardo?
Linux
  1. Linux – Inoltro IP del kernel?

  2. Linux:come determinare quale modulo contamina il kernel?

  3. Linux:come ricaricare correttamente un modulo del kernel?

  4. Guida per principianti alla configurazione del modulo del kernel in Linux

  5. Chiama una funzione dello spazio utente dall'interno di un modulo del kernel Linux

Comando Lsmod in Linux (Elenca i moduli del kernel)

Comando Modprobe in Linux

Comando Sysctl in Linux

Comando Rmmod in Linux

Linux è un sistema operativo o un kernel?

Kernel Linux vs. Kernel Mac