Qual è un modo semplice per ricompilare il kernel?


41

Sono interessato a compilare un nuovo kernel con Ubuntu 12.04 x86 a 64 bit.

Ho trovato questa pagina wiki che è fondamentalmente un mirror per questo blog e ci sono molti passaggi ( git , ecc.) Che mi sembrano inutili.

Con le versioni / distribuzioni precedenti, ero solito creare un .configfile e modificarlo Makefilese necessario, quindi eseguirlo makee il gioco è fatto.

C'è un modo semplice per farlo sotto Ubuntu?


1

Risposte:


39

1. Utilizzare apt-get sourceper scaricare la versione Ubuntu del kernel

apt-get source linux-image-$(uname -r)

fornisce una cartella che contiene, ad esempio:

linux-3.2.0 linux_3.2.0-26.41.dsc
 linux_3.2.0-26.41.diff.gz   linux_3.2.0.orig.tar.gz

Il diff grassetto include tutte le personalizzazioni di Ubuntu / Debian.

2. Per compilare un kernel stock con il proprio .config, usare il make-kpkgmetodo Debian "vecchio stile"

Questo è il modo vecchio stile alternativo descritto nel wiki:

sudo apt-get install kernel-package

Se stai compilando un kernel per la prima volta:

sudo apt-get build-dep linux-image-$(uname -r)

Quindi cdnella directory di origine (qui, linux-3.2.0) ed esegui make oldconfigper creare il .configfile con la configurazione del tuo kernel in esecuzione o copia una terza parte .configin questa directory.

A seconda che si desideri una configurazione di testo o grafica, installare:

(Testo)

sudo apt-get install libncurses5 libncurses5-dev

(Grafica)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

E poi esegui:

(Testo)

make menuconfig

(Grafica)

make xconfig

Al termine, esegui:

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

dove Nè quanti lavori eseguire in parallelo (di solito il numero di CPU che hai) ed my-very-own-kernelè una stringa personalizzata per identificare questa build.

Al termine, l'immagine del kernel e i file di intestazione saranno pronti come debs nella directory principale; puoi installarli con sudo dpkg -i, che si occuperà anche di aggiungere voci di GRUB, ecc.


perché non ti dicono nulla di questo diff, per me un diff è solo un diff, può contenere tutto.
user827992

Non lo so, dovresti chiedere loro (google per Canonical Kernel Team). Ti ho appena detto come costruirlo;)
ish,

1
ok, ultima domanda, come applicare questo diff compresso? : DI deve andare nella linux-3.2.0directory ed eseguire patch -p1 <../patch.diff?
user827992

1
Non è necessario applicare il diff; apt-get source ...l'ho già fatto per te!
Ish,

2
-1 Lo chiami "vecchio stile", lo chiamo obsoleto. fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binaryÈ il modo corretto, senza problemi.
Aleksandr Dubinsky,

19

Ecco i passaggi. Questa procedura si basa su nixCraft 'il Procedura: Compilare Linux Kernel 2.6 --ma modernizzato considerevolmente.

Scarica ed estrai il codice sorgente del kernel che desideri compilare.

Puoi ottenere il codice sorgente del kernel upstream su kernel.org . Qui verrà utilizzata la versione 3.16.1 (l'ultimo kernel stabile al momento della stesura). Quindi potrebbe essere necessario modificare questi comandi se si utilizza una versione diversa.

Il codice sorgente del kernel è attualmente fornito in. tar . xz archives, quindi fai clic sul link "tar.xz" in base alla versione che desideri:

screenshot da kernel.org, che mostra gli archivi dei sorgenti del kernel disponibili per il download

Dopo aver effettuato cdl'accesso alla directory in cui è stato scaricato l'archivio, è possibile estrarlo con tar:

tar xf linux-3.16.1.tar.xz

Installa gli strumenti di compilazione necessari ed esegui la configurazione del kernel.

Per ottenere la toolchain di Ubuntu ( gcc, makee così via) installare il metapacchetto build-essentialInstalla build-essential :

sudo apt-get update
sudo apt-get install build-essential

Le makedestinazioni xconfige forniscono due modi ragionevolmente facili da usare per configurare ciò che va nel kernel menuconfig.

xconfigesegue un'utilità di configurazione grafica, mentre menuconfigè basata su testo (ovvero, la sua interfaccia appare completamente all'interno del tuo terminale). Ognuno richiede alcuni software aggiuntivi non forniti da build-essentialInstalla build-essential .

Per configurare graficamente , installa libqt4-devInstalla libqt4-dev e pkg-configInstalla pkg-config ed eseguimake xconfig:

sudo apt-get install libqt4-dev pkg-config
make xconfig

Per configurare nel terminale , installarelibncurses5-dev(grazie a Hannu per queste informazioni) ed eseguiremake menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

Compilare il kernel configurato.

Per prima cosa esegui questo per compilare il kernel e creare vmlinuz:

make

vmlinuzè "il kernel". In particolare, è l'immagine del kernel che verrà decompressa e caricata in memoria da GRUB o da qualsiasi altro boot loader in uso.

Quindi compilare i moduli del kernel caricabili :

make modules

Installa il tuo kernel appena creato.

Supponendo che tali makecomandi siano stati completati correttamente, è tempo di installare il nuovo kernel. Innanzitutto installa i moduli:

sudo make modules_install

Quindi installare il kernel stesso:

sudo make install

Ciò inserisce vmlinuz-3.16.1(una copia di vmlinuz), config-3.16.1(un file di testo che memorizza i parametri di configurazione del kernel) e System.map-3.16.1(la tabella di ricerca dei simboli del kernel ) /boot. Per maggiori dettagli, vedi questo post di comp.os.linux.misc di Hadron e man installkernel.

Installazione finale, quindi il kernel può essere avviato e avviare il sistema:

Questa sezione si basa in parte sulle informazioni in Kernel / Compile .

Con il kernel ora dove deve essere, ha bisogno di:

Genera i tuoi initramfs conmkinitramfs:

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

Quando aggiorni la configurazione del boot loader GRUB2 - che è stato il predefinito in Ubuntu dal 9.10 - dovrebbe rilevare automaticamente il nuovo kernel e aggiungere un'opzione per l'avvio da esso.

sudo update-grub

Prova il tuo kernel.

Ora puoi riavviare per testare il tuo nuovo kernel. Potrebbe essere necessario tenere premuto Shifto premere Escdurante l'avvio per visualizzare il menu di avvio di GRUB in cui è possibile selezionare tra i diversi kernel installati.

Per rendere il tuo kernel (o un altro) predefinito, vedi Come posso cambiare l'ordine di avvio di GRUB?


Il passaggio 3 make menuconfigrichiedeapt get install libncurses5-dev
Hannu,

@Hannu grazie, mi sono completamente dimenticato di menzionarlo. Gli utenti del sistema a 64 bit possono richiedere "ia32-libs" anche per il supporto dei programmi a 32 bit per l'esecuzione.
Novizio

Potrebbe essere meglio trovare anche un pacchetto indipendente dalla versione ... Non sono sicuro che ci sia comunque.
Hannu,

@EliahKagan Grazie. Va bene adesso o dovrei eliminarlo completamente? Non ho problemi a farlo.
Novizio

1
-1 Questo non produce un kernel Ubuntu . Non produce nemmeno file .deb. Questa è una ricetta per i problemi.
Aleksandr Dubinsky,

3

Le istruzioni rapide per la creazione di un kernel Ubuntu (al contrario della vaniglia) sono disponibili qui: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel .

Non copierò l'intero wiki, ma elencherò i passaggi minimi per compilare la versione del kernel Ubuntu che hai attualmente installato. (Per ottenere la versione più recente, clonare il repository git del kernel della prossima versione di Ubuntu.) Testato su Ubuntu 16.04.

# Get source code
apt-get source linux-image-$(uname -r)

# Install dependencies
sudo apt-get build-dep linux-image-$(uname -r)

# Compile
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Install (obviously the versions will be different)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb
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.