Compilar el kernel a Debian
Última actualització: desembre 2012
Per a compilar un nucli a l'estil Debian necessitem instal·lar algunes coses:
- Haurem d'utilitzar les eines incloses en el paquet kernel-package.
- Si configurem amb make menuconfig, ens farà falta instal·lar libncurses5-dev.
- Si a més, volem que un usuari sense privilegis pugui crear el paquet de Debian, ens farà falta fakeroot.
- apt-get install build-essential module-assistant, i un cop instal·lat fem m-a prepare
Ara ens fan falta les fonts del paquet corresponent a la versió de kernel que volem compilar. Imaginem que instal·lem
apt-get install linux-source-2.6.32
Un cop instal·lat el que tenim és un fitxer a /usr/src/linux-source-2.6.32.tar.bz2. Hem extreure aquests arxius en un nou directori. Pensem no hi ha necessitat de fer-ho a /usr/src/; potser millor a qualsevol altre directori (per exemple a ~ /kernel/) ja que per a compilar un nucli no ens fan falta permisos especials.
A l'hora de compilar un kernel en comptes de configurar tot des de zero, seguramente ens serà millor partir de les opcions del que tenir funcionant a l'equip. Per a això el que hem de fer és agafar el fitxer /boot/config-versió i copiar-ho al directori que conté les fonts del nucli com a .config. Si és el cas, fariem:
cp /boot/config-2.6.32-5-686 ~/kernel/linux-source-2.6.32/.config
Quines interfícies tenim disponibles para escollir les nostres configuracions?
- make menuconfig és una interfície en mode text (ncurses). Ens permet navegar per les opcions en una estructura jeràrquica.
- Altres interfícies tenen característiques similars, però treballen dins de les interfícies gràfiques més modernes, com ara make xconfig que utilitza una interfície gràfica Qt, i make gconfig que utilitza GTK +
Un cop configurat tot, queda un fitxer .config a l'arrel de cada carpeta de cada branca dels directoris de les fonts.
A Debian el que fem quan compilem el kernel és finalment generar un paquet que podrem instal·lar al sistema. Si ja hem compilat un kernel amb anterioritat i volem tornar a recompilar, hauriem de fer:
fakeroot make-kpkg clean
Adicionalment si afegim el paràmetre --append-to-version, podem generar un paquet amb un nom diferent.
Make-kpkg és un script que realment fa: "make dep; make clean; make bzImage; make modules". Fakeroot ens permet compilar el kernel sense ser el superusuari.
Hem de tenir en compte que make-kpkg fa servir la informació continguda en /etc/kernel-pkg.conf per a generar les capçaleres del kernel. Es recomanable editar aquest fitxer con la informació correcta si tenim intenció de publicar el nostre kernel.
Un cop tenim tota la configuració feta,
make-kpkg
compila el kernel i genera el corresponent paquet (o paquets). Tenim tres opcions:
- make-kpkg kernel-image
- make-kpkg kernel-doc
- make-kpkg kernel-source
- make-kpkg kernel-headers
Els headers (capçaleres) son fitxers .h que estan ubicats al directori include i es contenen informació necessaria per a poder compilar mòduls externs.
Un cop tenim generat el paquet i l l'instal·lem, queden tres fitxers al directori /boot:
- vmlinuz-version (el nou kernel)
- config-version (la seva configuració)
- system.map-version (la taula de símbols, que ajuda als desenvolupadors a entendre els missatges que envia el kernel quan fa un "oops")
Els mòduls queden instal·lats a:
- /lib/modules/version/
Finalment, un dels scripts del paquet d'instal·lació genera automàticament una imatge initrd.img-version. que s'ubica a /boot i que és un mini sistema que es carrega en memòria i permet arrecar el sistema mínimament fins que arriba a muntar el sistema de fitxers del disc i carrega el kernel real. cd /
A més, es creen dos enllaços simbòlics anomenats:
- /vmlinuz
- initrd.img
Que apunten al kernel i initrd en curs.