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:
il pacchetto che viene scaricato è un pacchetto tar.xz, quindi serve il software per estrarlo, in questo caso da terminale:
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:
ci ritroveremo di fronte un interfaccia pseudo grafica del genere
La prima cosa da fare è guardare la legenda:
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:
che ci farà un elenco di tutto il nostro hardware
a questo punto abbiamo tutti i dati necessari per configurare il kernel, per fare qualche esempio, prendendo in considerazione questo dato di lspci
posso recarmi in → Device Drivers → Network device support → Wireless LAN
ed abilitare la mia scheda wireless disabilitando le altre
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:
È 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à):
È 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
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):
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.
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
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:
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
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
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
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
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
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
ed abilitare la mia scheda wireless disabilitando le altre
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:
È 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à):
È 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
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
Codice:
cp arch/x86_64/boot/bzImage /boot/vmlinuz-4.12.2
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
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