Compilazione del kernel Linux: sistema operativo standalone


2

Ciao ragazzi Sono nuovo nella compilazione del kernel di Linux quindi ho qualche domanda: Compilando il kernel di Linux stiamo costruendo un sistema operativo totalmente autonomo che non dipende da nessuna destabilizzazione di Linux?

Se sì ... Beh, quando voglio creare il file initrd usando il comando initramfs perché aggiunge alcune informazioni sulla mia distribuzione Linux in esecuzione (sto usando Ubuntu 10.4)?

Come dovrei compilare e aggiungere moduli al mio Linux compilato e dove dovrei metterli?

Questo è un riassunto di ciò che ho fatto:

1.generare il sorgente del kernel (3.4.1) e compilarlo usando il comando "make all" (utilizzo il mio attuale .config di linux)

  1. Installare grub sulla mia memory stick

  2. Mettendo il bzImage compilato nella directory / boot della mia memory stick

  3. Usando il comando "initramfs" per creare il file initrd e metterlo in / boot anche.

  4. Avvio del mio PC usando la memory stick e entrando in grub & gt; terminale

  5. Utilizzando "root (hd0,0)"; "kernel / boot / bzImage"; "initrd /boot/initrd.img" e quindi i comandi di "avvio" per l'avvio.

  6. Entrare in un terminale (initramfs) dopo un errore che afferma che non è stato possibile trovare il file "/lib/modules/3.4.1/modules.dep" !!!

Che cosa sto facendo di sbagliato ?

Risposte:


10

Compilando il kernel di Linux stiamo costruendo un sistema operativo totalmente autonomo che non dipende da nessuna destabilizzazione di Linux?

No. Linux da solo non è un sistema operativo. È solo un kernel. UN userland , che comprende una raccolta di librerie di sistema e software di base, è necessario per facilitare l'interazione con il computer. In ciò che comunemente intendiamo quando ci riferiamo a "Linux", questo è fornito da un progetto separato chiamato Progetto GNU. Tecnicamente, dovremmo (e alcuni lo fanno) chiamarlo "GNU / Linux".

Bene, quando voglio creare il file initrd usando il comando initramfs perché aggiunge alcune informazioni sulla mia distribuzione Linux in esecuzione (sto usando Ubuntu 10.4)?

Poiché il tuo initrd contiene la raccolta di programmi che inizialmente impostano il tuo sistema all'avvio, carica i driver e i demoni necessari, trova e monta le partizioni richieste sul tuo disco rigido, ecc. In realtà è personalizzato non solo per il tuo distribuzione, ma alla tua particolare installazione, configurazione e computer. Non è generalmente intercambiabile con l'initrd di qualcun altro. Ecco perché deve essere generato dal tuo sistema.

Come dovrei compilare e aggiungere moduli al mio Linux compilato e dove dovrei metterli?

Se stai compilando il tuo kernel, presumibilmente lo stai facendo make menuconfig nella directory sorgente del kernel prima della compilazione, che consente di selezionare quali funzionalità saranno compilate e se saranno integrate nel binario del kernel o rese disponibili come moduli.

Questo è un riassunto di ciò che ho fatto:

Ci sono una serie di motivi per cui questo non funzionerà nel modo desiderato.

ottenere il sorgente del kernel (3.4.1) e compilarlo usando il comando "make all" (uso il mio attuale .config di linux)

Se stai usando Ubuntu 10.04, che precede di molto il ramo 3.x del kernel Linux, per non parlare di 3.4. Molto probabilmente non funzionerà correttamente, almeno non senza un'enorme quantità di lavoro extra. Anche i file di configurazione sono cambiati parecchio, e sono francamente sorpreso che non stiano commettendo errori di sinistra e di destra su cose nel file di configurazione (presumibilmente per Linux 2.6) che non corrispondono a come sono fatte le cose in 3.4. Inoltre, probabilmente vorrai scaricare il pacchetto sorgente del kernel di Ubuntu e non il semplice sorgente del kernel di vanilla da kernel.org, dato che Ubuntu aggiusta il kernel per includere le funzionalità necessarie e renderlo piacevole con tutto il resto del sistema. Infine, ti manca un certo numero di passaggi, che entrerò in seguito.

Mettendo il bzImage compilato nella directory / boot della mia memory stick

Non sono sicuro di quale sia la tua intenzione con questo, ma se vuoi avere un'installazione completa Linux avviabile sulla tua memory stick, c'è un po 'più di quello - non hai alcuna roba per gli utenti su quella memoria bastone, per esempio. Ciò che effettivamente farà, se impostato correttamente, è (provare a) eseguire l'installazione di Ubuntu sul disco rigido con il kernel sulla memory stick. Credo che questo dovrebbe funzionare, ma perché farlo invece di installare il kernel sul tuo disco fisso? È possibile installarlo parallelamente a quello esistente in modo da poter passare liberamente da uno all'altro.

Entrare in un terminale (initramfs) dopo un errore che afferma che non è stato possibile trovare il file "/lib/modules/3.4.1/modules.dep" !!!

Questo risale ai passaggi mancati che ho menzionato prima. Devi make modules_install il tuo nuovo kernel in cui inserire i suoi moduli /lib/modules.

PERÒ...

Niente di tutto questo è davvero importante, perché idealmente non dovresti compilare un kernel in modo "tradizionale", a meno che tu non abbia un bisogno molto specifico di farlo. In questi giorni, se dovessi effettivamente aver bisogno di compilare il tuo kernel, la maggior parte delle distribuzioni ha un modo per farlo che usa la versione del kernel personalizzata (se applicabile), automatizza il processo di compilazione, installa il kernel come pacchetto in modo da poter installare e rimuovere in modo pulito se necessario, e configura il tuo bootloader per darti una scelta dei nuovi o dei vecchi kernel. In Ubuntu dovresti seguire queste istruzioni: Kernel / Compile - Ubuntu Wiki

Il che non vuol dire che non si possa compilare un kernel alla "vecchia maniera" solo per i kick / per scopi didattici - Ho compilato il mio primo kernel in questo modo, ma questo era prima che ci fossero modi migliori per farlo. Se il tuo sistema non è rotto, è importante per te, usa il metodo consigliato per la tua distribuzione, usa la loro fonte e usa la loro gestione dei pacchetti.


1
Se tu davvero vuoi costruire il tuo Linux, da zero, dai un'occhiata linuxfromscratch.org . Si noti che questo è un processo molto complesso e coinvolto, e la compilazione del kernel è probabilmente la più semplice parte di esso.
tgies

1

Quando ricompilate o compilate il kernel Linux, NON state creando una nuova distribuzione. Stai solo facendo una versione nuova o diversa del kernel. Il kernel è un singolo file che viene caricato, quindi eseguito dal bootloader dopo che il PC ha completato il processo POST.

Una distribuzione è composta da molti, molti altri file, inclusi i programmi di utilità UNIX standard, in genere un gestore di pacchetti e altri. Niente di tutto questo viene toccato se si (ri) compilare il proprio kernel.

È passato del tempo da quando ho compilato il mio kernel, ma penso che tu debba correre depmod -a dopo il make comando.


make module_install installa i moduli del kernel e, credo, funziona depmod per te.
tgies

ma, piuttosto, non è necessario o significativo da eseguire depmod -a in riferimento a un nuovo kernel che hai appena compilato ma che non sono in esecuzione nel momento in cui invochi depmod. depmod presumibilmente accade all'avvio quando è necessario.
tgies
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.