Repository 32bit  Forum
Repository 64bit  Wiki

Compilazione e ricompilazione Kernel su Slackware

Da Slacky.eu.

Questo articolo spiega con compilare e ricompilare il Kernel Linux su distribuzioni GNU/Linux Slackware

Indice

Introduzione:

Il Kernel è il nucleo del sistema operativo, fornisce le funzionalità di base al nostro sistema, gestisce in primis la memoria delle risorse del sistema e delle periferiche. L'interfaccia utente del Kernel è la shell. Quando un utente usa un programma richiede le risorse al Kernel attraverso le system call e non accede mai direttamente all'hardware (CPU). Quindi il kernel si occupa di gestire il tempo processore la memoria e le comunicazioni organizzandole in processi a seconda della priorità. Il kernel Linux è stato iniziato da Linus Torvalds nel 1991, ed è in continua evoluzione, pensate che uno dei primi kernel (0.10) pesava circa 0.2MB con 10.000 righe di codice ora siamo attorno ai 150MB con pi di 5.000.000 di righe di codice.
Il sito di riferimento http://www.kernel.org. I Kernel recenti hanno sempre di più la capacità di supportare hardware nuovo gestire in modo migliore e ottimale i processi e perché no anche risultare più veloci e stabili, senza contare che a ogni rilascio vengono corretti noiosi bug di sicurezza, fondamentalmente sono questi i motivi principali che ci spingono alla compilazione del nuovo nocciolo. Personalizzazione, adattamento e snellimento sono i principali per quanto riguarda la ricompilazione del kernel solitamente fornito con la nostra distribuzione.

Floppy di avvio:

La prima cosa da fare è creare un floppy di avvio, di solito viene creato in fase di installazione ma spesso i floppy fanno una brutta fine, quindi con mkrescue o makebootdisk create il vostro floppy di emergenza, potete usare anche pkgtool/setup, molto comodo.

Kernel precompilato Slackware:

Nei CD o nei vari Mirror della Slackware nella dir /kernels sono presenti molti Kernel precompilati subito disponibili all'uso, ovviamente dovete avere le idee chiare su quale Kernel usare, quindi supporto all'hardware e esigenze del vostro sistema. Ricordatevi che i Kernel che finiscono con .i sono Kernel IDE e quindi senza supporto SCSI mentre quelli che finiscono con .s includono tutti i supporti IDE e in più anche quelli SCSI. All'interno delle sottodirectory dei vari Kernel troverete questi 3 file:

System.map.gz, che è la mappa per questo kernel
bzImage (o zImage) che è l'immagine per questo kernel
config che è il file di configurazione per questo kernel

normalmente in /boot questi file avranno nomi diversi il System.map sarà System.map-ide-2.4.xx, il config sarà config-ide-2.4.xx l'immagine del Kernel sarà vmlinuz-ide-2.4.xx e tutti quanti avranno un link simbolico:

config -> config-ide-2.4.xx
System.map -> System.map-ide-2.4.xx
vmlinuz -> vmlinuz-ide-2.4.xx

scaricate i 3 file in /tmp e procedete con questi comandi:

# cd /tmp
# rm /boot/config System.map vmlinuz
per rimuovere i link simbolici
# gzip -d System.map.gz | mv System.map /boot/System.map-new | ln -s /boot/System.map-new /boot/System.map
per decomprimere spostare in /boot il file System.map e ricreare il link
# mv bzImage /boot/vmlinuz-new | ln -s /boot/vmlinuz-new /boot/vmlinuz
per spostare il nuovo Kernel in /boot e ricreare il link simbolico vmlinuz
# mv config /boot/config-new | ln -s /boot/config-new /boot/config
per spostare il nuovo config e ricreare il link
# lilo -vper
aggiornare la configurazione

Riavviate e se tutto funziona potete anche eliminare la vecchia immagine del Kernel il System.map e il config.

Compilazione Nuovo Kernel Serie 2.4.xx:

Prima di tutto controllate l'installazione dei programmi di sviluppo della serie D indispensabili in caso di compilazione, potete trovarli nei CD della Slackware, ma con installazione classica sicuramente saranno già presenti nel vostro sistema. Recuperate i sorgenti del Kernel da (http://www.kernel.org/pub/linux/kernel) prelevando il formato tar.bz2 o tar.gz, il bz2 utilizzando una compressione migliore sarà più piccolo e quindi più veloce da trasferire. Scaricate i sorgenti in /usr/src e cancellate il link simbolico linux

# cd /usr/src
# rm linux

decomprimete i sorgenti

# tar xvzf linux-2.4.xx.tar.gz o tar xvjf linux-2.4.xx.tar.bz2

ricreate il link simbolico

# ln -s linux-2.4.xx linux

preparate l'ambiente

# cd linux
# make mrproper

ora potete incominciate la configurazione vera e propria, gli stumenti a disposizione sono:

# make config
# make menuconfig
# make xconfig
# make oldconfig

i primi due si usano direttamente da shell, meglio make menuconfig che usa ncurses ed è più semplice e intuitivo del primo, make xconfig invece deve essere avviato da X quindi in ambiente grafico. Make oldconfig è molto comodo in caso di aggiornamento, e vi chiederà solo le risposte alle nuove domande di configurazione, che si aggiungono di volta in volta alle release, ovviamente dovete avere il file .config presente in /usr/src/linux. Procediamo con la configurazione usando make menuconfig

# make menuconfig

Da qui potrete configurare il Kernel da zero, troverete un esaustivo < Help > che vi aiuterà nella configurazione. Terminate le modifiche uscire con < Exit > e alla domanda "Do you wish to save your new kernel configuration" decidete se salvare la configurazione o ripeterla, in caso affermativo verrà creato in /usr/src/linux il file .config che contiene appunto tutta la configurazione del Kernel. Con versioni di kernel uguale (2.4.22 --> 2.4.26 e non 2.4.xx --> 2.6.xx) potete anche caricare una configurazione nota usando la funzione Load an Alternate Configuration File (la trovate in fondo al men), ripescando il file di configurazione salvato in /boot per esempio... attenzione !! se usate questo metodo dovete salvare il nuovo file di configurazione con la funzione Save Configuration to an Alternate File, questo per non sovrascrivere il config funzionante. Anche in questo caso, terminate le modifiche uscite con < Exit > e salvate la configurazione. Incominciate la compilazione preparando la struttura delle dipendenze

# make dep

rimuovete i file temporanei e di debug

# make clean

dopo potrete creare l'immagine del Kernel

# make -j5 bzImage

potevate usare anche zImage ma ormai si tende a usare questo tipo di algoritmo. Terminato il make bzImage vi troverete il Kernel compilato in /usr/scr/linux/arch/i386/boot, procedete con la compilazione e installazione dei moduli

# make -j5 modules
# make modules_install

i moduli saranno installati regolarmente in /lib/modules/versione-kernel. Siete ancora in /usr/src/linux un ls -a vi mostrerà il contenuto della dir, noterete un file .config e un file System.map questi due file vanno copiati in /boot ma la cosa migliore è rinominarli gestendo una nuova direttiva in LILO

# mv System.map /boot/System.map-2.4.xx
# cp .config /boot/config-2.4.xx

ora il Kernel

# mv /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.xx

adesso modificate /etc/lilo.conf, potete prendete come riferimento questo esempio (man lilo per info maggiori)

image = /boot/vmlinuz
root = /dev/hda2
label = Slack_2.4.22
read-only
image = /boot/vmlinuz-2.4.26
root = /dev/hda2
label = Slack_2.4.26
read-only

volendo potete anche rimuovete i link simbolici che puntano ai vecchi file

# rm /boot/System.map config vmlinuz

e ricreare quelli nuovi che puntano ai nuovi file

# ln -s /boot/System.map-2.4.xx /boot/System.map
# ln -s /boot/config-2.4.xx /boot/config
# ln -s /boot/bzImage-2.4.xx /boot/vmlinuz

in questo modo il Kernel appena compilato sarà quello di default perché la direttiva di lilo punta direttamente al link simbolico vmlinuz. Terminato questo impartite il comando lilo per aggiornare la nuova configurazione

# lilo -v

riavviate il sistema e godetevi il vostro nuovo Kernel.

Ricompilazione Kernel Serie 2.4.xx:

Strumenti personali
Namespace

Varianti