Compilar el kernel: fàcil, si saps com!

L’objectiu d’aquest post no és aconseguir un kernel ultra-lleuger-maxi-optimitzat-“delamuerte” per al nostre pc sinó, simplement, deixar constància dels passos que cal fer per aconseguir una imatge amb la configuració per defecte, però que funcioni.

1 ) Preparem les eines

Jo he fet les proves amb un sistema base de Debian estable, sense escriptori. I, de nou en nou, els paquets que he hagut d’afegir per compilar el kernel són els següents:

aptitude install make gcc ncurses-dev linux-initrd-tool

2 ) Descarreguem el codi font des de kernel.org

El kernel que tenia instal·lat amb Debian Etch és el 2.6.18 i per a aquesta prova he fet servir el kernel estable més nou (a dia d’avui): 2.6.28 Per descarregar-lo podem fer:

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2

3 ) Ens preparem per compilar…

a) Posem les fonts al directori on s’acostuma a treballar (aquest pas no és imprescindible)

mv ./linux-2.6.28.tar.bz2 /usr/src

b) Descomprimim i desempaquetem:

cd /usr/src  && tar xjvf linux-2.6.28.tar.bz2

Això ens haurà creat el directori /usr/src/linux-2.6.28, al qual entrarem.

4 ) Configuració del kernel

make menuconfig

Aleshores accedirem a les opcions de configuració del kernel. Aquí bàsicament s’indica què volem que suporti el nostre kernel, quins drivers ha de tenir integrats i quins es compilaran com a mòduls independents. Aquest és el pas clau per a qui vulgui generar un kernel optimitzat. Com que això queda fora de les intencions d’aquest post, simplement tafanegem una mica i ho deixem tal i com està.

5 ) Compilació

Aquest és el pas en què realment farem la compilació. El procediment seria el següent:

make dep

make

make modules

make modules_install

El make dep no cal fer-lo si compilem un kernel >=2.6.0, el make generarà la imatge bzImage, és a dir: el kernel en si; el make modules compila els mòduls independents i finalment el make modules_install col·loca els mòduls al lloc que els toca.

Per no estar pendents de quan s’acaba un pas per llançar la següent comanda podem fer:

time (make && make modules && make modules_install)

Lògicament la comanda time és opcional, però així si marxem a fer la cervesa mentres es compila el kernel, podem saber quanta estona ha trigat realment.

6 ) Cada cosa al seu lloc

Copiem la imatge del kernel al directori /boot, i de passada ja li canviem el nom per adequar-lo al que solen tenir les imatges del kernel:

cp /usr/src/linux-2.6.28/arch/i386/boot/bzImage /boot/vmlinuz-2.6.28

Fem el mateix amb l’arxiu System.map:

cp /usr/src/linux-2.6.28/System.map /boot/System.map-2.6.28

7 ) Generem la imatge initrd

Hi ha alguns mòduls del kernel que no poden esperar a ser carregats en el moment en què es carreguen la majoria de mòduls, sinó que s’han de carregar al principi de tot del procés d’arrencada. Per això necessitem generar el fitxer initrd.img

cd /boot && update-initramfs -c -k 2.6.28

Això hauria de generar un arxiu anomenat initrd.img-2.6.28 al directori /boot

8 ) Modifiquem el gestor d’arrencada

En el meu cas és el grub. Obrim el fitxer /boot/grub/menu.lst amb el nostre editor preferit (en el meu cas: joe)

joe /boot/grub/menu.lst

Aleshores afegim, al lloc que toca (cap al final) una nova entrada. El més senzill és copiar-ne una de les que ja tenim i modificar-la. Hauria de quedar una cosa així:

title           Debian GNU/Linux, kernel 2.6.28
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.28 root=/dev/hda1 ro
initrd          /boot/initrd.img-2.6.28

Si la vostra partició / no es troba al dispositiu /dev/hda1 haureu de canviar aquesta dada.

9) Reiniciem

reboot

I, en principi, hauria de funcionar!

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s

%d bloggers like this: