GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:il kernel deve essere compilato nello stesso ambiente di sviluppo dello spazio utente?

Diciamo che il mio spazio utente (pacchetti) è compilato con gcc 4.7 e libc6 2.13 (Debian Wheezy)

Posso compilare il kernel Linux in un ambiente di sviluppo diverso, come gcc 6.3 e libc6 2.24 (cioè sotto Debian Stretch) ?

So che a differenza dei pacchetti, il kernel non è collegato ad alcuna libreria dinamica. Quindi, in teoria, non dovrebbe fare alcuna differenza quale gcc e libc è stato compilato in.

È vero?
Posso avere problemi quando lo faccio?
Potrebbero esserci delle incompatibilità causate da gcc differenti versioni?

D'altra parte, il più recente gcc ha alcune caratteristiche interessanti, una migliore sicurezza. Quindi forse, il kernel dovrebbe essere compilato con il più recente gcc ?

Risposta accettata:

Come fai notare, la libreria C utilizzata non ha alcun impatto sul kernel, il kernel non usa la libreria C. (C'è un impatto indiretto, dal momento che viene utilizzato per creare strumenti utilizzati dal kernel durante il processo di compilazione, ma è estremamente improbabile che influisca sul risultato finale.)

Il kernel può essere compilato con una varietà di diverse versioni del compilatore; secondo la sua documentazione, necessita solo di GCC 3.2 o successivo. Scoprirai anche che può volerci un po' di tempo prima che il kernel supporti ufficialmente le ultime versioni di GCC e ancora più tempo perché un kernel di distribuzione lo utilizzi. Ad esempio, il pacchetto del kernel Debian Linux utilizza GCC 6 e ha persino pacchetti dedicati per fornire la versione corretta del compilatore (linux-compiler-gcc-6-x86 su amd64 e i386 ). Non esiste alcuna connessione tra il compilatore utilizzato per il kernel e il compilatore utilizzato per lo spazio utente (né è necessario utilizzare lo stesso compilatore per tutto lo spazio utente:i vecchi programmi creati con GCC 3 o anche 2 funzionano ancora sui sistemi moderni).

Le versioni più recenti del compilatore forniscono più funzionalità di sicurezza, ma GCC 6 è abbastanza buono per la maggior parte, se non tutte, le funzionalità di sicurezza utilizzate nel kernel.


Linux
  1. Linux:differenza tra /dev/console , /dev/tty e /dev/tty0?

  2. Quanto sono portatili /dev/stdin, /dev/stdout e /dev/stderr?

  3. Linux:come si confronta il kernel Linux con le architetture del microkernel?

  4. Linux – I diversi kernel Linux/unix sono intercambiabili?

  5. Cosa significa __init nel codice del kernel di Linux?

Cosa significa dire che il kernel Linux è preventivo?

In che modo il kernel Linux determina l'ordine delle chiamate __init?

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

Dereferenziazione del puntatore NULL del kernel Linux in memset da kzalloc

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

Devo riavviare il server dopo un aggiornamento del kernel Linux?