Guida introduzione alla compilazione del kernel linux

Stato
Discussione chiusa ad ulteriori risposte.

oscarandrea

Utente Emerald
7 Dicembre 2014
1,727
41
268
523
Ultima modifica:
In questa guida vi spiegherò le basi per fare una compilazione manuale del kernel linux.
Si può voler ricompilare il kernel per ottimizzarne le perfomance, per abilitare il supporto a funzioni o periferiche specifiche, per studio etc


REPERIRE I SORGENTI
È possibile reperire i sorgenti direttamente dal sito del kernel linux
Sono presenti diverse versioni quali:
mainline: questa è la versione in sviluppo dove vengono introdotte nuove features.
stable: quando il kernel mainline viene rilasciato dopo vari bugfix ed rc viene ritenuto stabile.
longterm: questo è un kernel stable che gode di un supporto molto prolungato
scelta la versione è possibile scaricare il relativo tarball, ad esempio con wget:
Codice:
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.12.2.tar.xz
Sepky4J.png

il pacchetto che viene scaricato è un pacchetto tar.xz, quindi serve il software per estrarlo, in questo caso da terminale:
Codice:
tar xvfJ linux-4.12.2.tar.xz
a questo punto avremo in $home una directory chiamata linux-4.12.2
GENERARE IL FILE DI CONFIGURAZIONE
Questa è la parte più critica, in quanto un kernel senza i moduli necessari potrebbe non far funzionare alcuni componenti del pc (scheda di rete, usb etc) oppure non far avviare del tutto il sistema operativo, per questo consiglio di lasciare sempre i kernel precedenti in modo da poter scegliere dal bootloader quale avviare in caso i errori.
nb: da questo punto in poi operiamo con i privilegi di root.
Ci sono vari metodi per ricavare il file .config, ma in questo caso lo creeremo da 0.
rechiamoci nella cartella ed incominciamo con la configurazione del kernel:
Codice:
cd linux-4.12.2 && make menuconfig
ci ritroveremo di fronte un interfaccia pseudo grafica del genere
Dcw06ij.png

La prima cosa da fare è guardare la legenda:
Codice:
Arrow keys navigate the menu.  <Enter> selects submenus ---> (or empty submenus ----).  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes,   │  
  │  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> for Search.  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable
Una volta capito come muoversi è possibile iniziare con la configurazione.
Se volete avere un idea di tutte queste opzioni vi rimando a quest'altra risorsa di inforge https://www.inforge.net/xi/resources/guida-le-opzioni-del-kernel-linux.1732/
Ovviamente la configurazione è strettamente legata all'hardware ed alle preferenze dell'utente quindi è impossibile fare un guida completa per tutte le configurazioni.
Per visualizzare le proprie specifiche hardware è possibile usare il comando:
Codice:
lspci
che ci farà un elenco di tutto il nostro hardware
Hc3msc5.png

a questo punto abbiamo tutti i dati necessari per configurare il kernel, per fare qualche esempio, prendendo in considerazione questo dato di lspci
Codice:
Network controller: Qualcomm Atheros AR9485 Wireless Network Adapter
posso recarmi in → Device Drivers → Network device support → Wireless LAN

ed abilitare la mia scheda wireless disabilitando le altre
ggLMmDE.png

Ovviamente gli unici moduli importanti da abilitare non sono solo quelli dei driver ma anche dei file system o della ramdisk se la usate (personalmente non la uso) per esempio io utilizzo ext4 ma interessa il supporto anche a btrfs xfs gfs2:
7BoVtgc.png


È anche possibile ottimizzare i tempi di boot (non che faccia una differenza sostanziale) ad esempio cambiando il tipo di compressione kernel in lz4/lzo che sono molto più veloci dei concorrenti (ovviamente lz4 o lzo devono essere già installati nel sistema, altrimenti la compilazione fallirà):
7pEPd4w.png

È anche possibile cambiare governor in → Power management and ACPI options → CPU Frequency scaling

questi che ho fatto sono tutti esempi, ma ci sono davvero moltissime possibilità di configurazione, se non sapete se potete fare a meno di un modulo, sopratutto nella sezione driver lasciatelo abilitato e poi fate a tentativi, ovvio che se avete un processore intel sicuramente sarà possibile disabilitare tutto i moduli per amd (tanto per dire), stesso ragionamento vale per qualsiasi cosa.Una volta finito uscite salvate ed uscite, a questo punto avrete come file nella directory .config, che se il kernel funziona bene è possibilire salvare così da poterlo riutilizzare in altri kernel.
COMPILAZIONE E INSTALLAZIONE

A questo punto dovrete compilare il kernel, quindi sempre da root
Codice:
make -jX; make modules_install
X è il numero dei vostri core + 1, così da fruttare tutta la potenza del processore per compilare più velocemente, quindi nel mio caso con un dualcore make -j3.
Se la compilazione è andata a buon fine possiamo copiare il file ottenuto, altrimenti possiamo usare il comando (andrebbe anche usato appena estratto il kernel per convenzione):
Codice:
 make mrproper
per pulire i vecchi file e compilare nuovamente, che nel caso di una compilazione per piattaforme a 64bit si troverà in arch/x86_64/boot/bzImage mentre per il 32bit in arch/x86/boot/bzImage.
Codice:
cp  arch/x86_64/boot/bzImage /boot/vmlinuz-4.12.2
antemponiamo vmlinuz alla versione per fa si che grub (nel caso si avesse grub) rilevi il kernel quando andremo a generare un nuovo file di configurazione di grub, ovviamente è possibile anche assegnare altri nome e cambiare il contenuto del file di configurazione del grub a mano.
Adesso, se si possiede grub possiamo usare lo strumento per far generare automaticamente il file di configurazione in questo modo
Codice:
grub-mkconfig -o /boot/grub/grub.cfg
jYaA0Fq.png

dall'output è possibile vedere quali kernel (ed anche sistema operativi se si ha os-prober installato) grub ha trovato.
Adesso è possibile riavviare, nel caso ci siano problemi con il kernel appena configurato possiamo dal menu di grub avviare il kernel precedente, eliminare tramite rm il vecchio kernel lanciare nuovamente:
Codice:
grub-mkconfig -o /boot/grub/grub.cfg
 
Stato
Discussione chiusa ad ulteriori risposte.