Nel post sono elencate le direttive di compilazione di un kernel vanilla della serie 2.6.x. Le direttive e i metodi di compilazione restano gli stessi da distro a distro con i comandi che ne conseguono (come già detto in altri post). E’ pur vero,che ci sono delle piccole differenze (accorgimenti). Siccome le richieste di aiuto sulla mail  non si fanno mai aspettare, vediamo in specifico come compilare un kernel ufficiale su Arch Linux.

Esempio -  ARCH Linux & kernel 2.6.31

NB: Il nuovo kernel 2.6.31 introduce parecchie migliorie e modifiche. Se ci fossero dubbi riguardo: compatibilità, modifiche driver,  implementazioni e moduli particolari, etc) si consiglia di consultare il changelog.

Scarichiamo il source dal sito ufficiale:

~$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.tar.bz2

NB: La directory di posizionamento del kernel-source è libera se non c’è espressa richiesta di  ricompilazione futura. Si può scegliere /home/utente/ o /usr/src/ come da metodologia classica. Nell’esempio tutti i passi saranno effettuati dalla directory di partenza /home/user/ (~).

IMPORTANTE: E’ prassi, specie se non si ha particolare dimestichezza con compilazioni kernel, evitare di cancellare la directory ospitante il kernel source scaricato, una volta finita la compilazione; il tutto al fine di evitare di rifare tutto da capo in caso di non corretto funzionamento. Vige sempre su linux il detto: tutto è recuperabile se non largamente compromesso.

~$ tar jxvf linux-2.6.31.tar.bz2
~$ cd linux-2.6.31/

Prepariamo l'ambiente:
~/linux-2.6.31 $ make mrproper

NB: Se scegliamo di partire da un .config preesistente copiamolo nella directory del kernel da compilare. Se scegliamo di partire dal config del kernel in uso sulla nostra distribuzione arch eseguire i passi in verde.

~/linux-2.6.31 $ zcat /proc/config.gz > .config
~/linux-2.6.31 $ make oldconfig 

NB: Attualmente arch utilizza il kernel 2.6.30.5 e/o 2.6.30.6 per chi  ha aggiornato. Il richiamo di un config preesistente tra i due kernel di serie diversa potrebbe generare una serie di richieste da parte del sistema: quali moduli implementare e in che modo (Y,N,m). In tal caso, se siete pigri (come me ) e/o vi scoccia ripetere a mano tutte i moduli da implementare, evitate di richiamare il make oldconfig. Il richiamo di tale config si effettuerà nella direttiva menuconfig successiva.

~/linux-2.6.31 $ zcat /proc/config.gz > .config-arch 
~/linux-2.6.31 $ make menuconfig

Richiamiamo il .config salvato precedentemente.

 

NB:  E’ chiaro che per abilitare alcune delle nuove funzionalità inserite nel kernel 2.6.31 si dovrà poi agire manualmente in base ai casi e scegliere se e cosa aggiungere etc.

IMPORTANTE: Il richiamo del config preesistente prevede di default la customizzazione  depmod del kernel. In breve: il nostro kernel 2.6.30.5 e/o 2.6.30.6 preesistente in arch è customizzato come 2.6.30-ARCH . E’ quindi di fondamentale importanza cambiare il depmod del nuovo kernel prima di effettuare la compilazione. In caso contrario verranno sovrascritti i moduli preesistenti del kernel in uso. Quindi come da esempio, cambiamo il local version;

General Setup --->
     (-ARCH)  Local Version

 

Cambieremo il Local Version  con il nome che preferiamo. Esempio:  extra-ARCH .

NB: In Arch Linux il kernel default ha i moduli che fanno riferimento alla directory /lib/modules/2.6.30-ARCH . Cambiando il Local Version al nostro nuovo kernel, si creerà una nuova directory in /lib/modules/2.6.31-extra-ARCH contenente i moduli relativi al nuovo kernel.

Terminata la pre-fase si passa alla compilazione tradizionale:

~/linux-2.6.31 $ make clean
~/linux-2.6.31 $ make dep
~/linux-2.6.31 $ make bzImage
~/linux-2.6.31 $ make modules
~/linux-2.6.31 $ sudo make modules_install depmod 2.6.31-extra-ARCH

Al termine ci verrà mostrato il depmod della nuova immagine che sposteremo, rinominandola, nella directory /boot:

~/linux-2.6.31 $ sudo cp arch/x86/boot/bzImage /boot/vmlinuz2631-extra-ARCH

Spostata l’immagine kernel dovremo provvedere a creare l’initrd (ramdisk image), per il nuovo kernel.

NB: Arch utilizza il sistema mkinitcpio. Quindi, con depmod precedente alla mano:

~/linux-2.6.31 $ sudo mkinitcpio -k 2.6.31-extra-ARCH -g /boot/kernel2631-extra-ARCH.img

Dopo i relativi controlli sugli HOOKS (chi non lo sà fa bene a leggersi un minimo su mkinitcpio) opportunamente settati nel file /etc/mkinitcpio.conf, verrà creata l’immagine init del nostro nuovo kernel.

Non resta che modificare il boot manager; GRUB è di default in ARCH, come da esempio:

~$ sudo vi /boot/grub/menu.lst
# (1) Arch Linux 2.6.31
title  Arch Linux 2.6.31                 ---> titolo che comparirà nel menu di grub
root   (hd1,0)                                   ---> device della partizione /boot
kernel /vmlinuz2631-extra-ARCH root=/dev/sdb2 ro ---> nome e percorso immagine kernel + device corrispondente a / "root"
initrd /kernel2631-extra-ARCH.img                ---> nome e percorso ramdisk image creato

NB:  E’ un esempio, spero non sia strettamente necessario specificare troppo in dettaglio come si setta grub :>

# End