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

gener 15, 2009

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!


Kernel panic!

gener 15, 2009

Aquest és el primer kernel que compilo…

kernel-panic

M’ha sortit espantat…


El meu Debian va calent… (1)

Mai 29, 2008

El meu Debian va calent i no és cosa de la primavera. Fins i tot amb una càrrega de la CPU inferior al 15%, la temperatura mitjana del processador ronda per sobre dels 70ºC. El més molest és el soroll del ventilador que treballa a preu fet per expulsar l’excés d’escalfor; a banda que segurament tampoc és el millor per la salut de la màquina…

Avui m’he posat a investigar (sant Google) i he entrat una mica més a fons en els perfils de rendiment i les opcions d’estalvi d’energia que habitualment gestionava des del KLaptop.

D’entrada he canviat el KLaptop pel KPowersave i he fet algunes proves…

El KPowersave proporciona tres esquemes polítiques de rendiment de la CPU (Performance, Dynamic i Powersave) que a la vegada poden associar-se a diversos esquemes que hom pot crear, eliminar i modificar. Jo he fet les proves usant els esquemes Performance i Powersave (associats a les polítiques homònimes).

Quan endollo el PC, l’esquema canvia a Performance i la velocitat de les CPU[1] puja al màxim (1826 Mhz). Quan el desendollo, passa al mode Powersave i la velocitat baixa a 996 Mhz o 1328 Mhz (suposo que en funció de la càrrega de treball). Això sí, canviant l’esquema manualment des del KPowersave t’ignora totalment tant si està endollat com si no.

Almenys això sembla a priori, perquè al cap d’una estona de fer proves i d’intentar arribar a alguna conclusió el comportament comença a ser totalment WTF! Endollo i baixa la freqüència, desendollo i puja… Argh!! Com a mínim, des de fa una bona estona la temperatura no passa dels 60ºC, que al cap i a la fi és el que busco… però ara ja m’he picat, tornem al KLaptop.

***

[1] Jo no sé si Core 2 Duo implica “2 processadors”, el que sí que sé és que el GNU/Linux ho contempla així.


El monitor de bateria

febrer 6, 2008

Amb el darrer kernel 2.6.24-1-686 que des de fa uns dies incorpora debian sid (que pel que veig és el kernel estable més nou) havia desaparegut el monitor de bateria del portàtil. Avui, que estic malalt i tancat a casa, m’he dedicat a buscar informació sobre aquest bug. He trobat un grup de debian a google on en parlen.

Efectivament, al directori /proc/acpi no hi tenia el subdirectori battery… Aquest vespre, però, amb el safe-upgrade diari hi havia una actualització del kernel que ha corregit el bug i, de passada, amb tot plegat, he après a consultar l’estat de conservació de la bateria…

@llengot:~$ cat /proc/acpi/battery/BAT0/info

present: yes
design capacity: 4400 mAh
last full capacity: 3215 mAh
battery technology: rechargeable
design voltage: 11836 mV
design capacity warning: 321 mAh
design capacity low: 160 mAh
capacity granularity 1: 100 mAh
capacity granularity 2: 8 mAh
model number: M31EI
serial number: 00001
battery type: LiON
OEM info: OEM

Sabent això podré decidir quan em toca comprar una nova bateria pel portàtil… per cert, quant temps fa que el tinc? Mmm… encara no un any i mig.


Any nou, kernel nou!

gener 9, 2008

Avui he estrenat kernel nou! Jo em pensava que si tenia instal·lat el paquet linux-image-2.6-686 sempre que debian sid incorporés un nou kernel ja se m’instal·laria automàticament en fer el dist-upgrade… De fet, la informació d’aquest paquet diu:

Descripció: Linux 2.6 image on PPro/Celeron/PII/PIII/P4
This package depends on the latest binary image for Linux kernel 2.6
on Pentium Pro/Celeron/Pentium II/Pentium III/Pentium 4 machines.

però jo encara anava amb la versió 2.6.22-3-686 i avui m’han comentat que ja hi havia el paquet amb la versió 2.6.23-1-686.

De moment, amb aquest nou kernel i el mòdul i firmware de la Intel PRO/Wireless 3945ABG actualitzats, tinc una nova interfície virtual de xarxa anomenada wlan0_rename i el knetworkmanager, que darrerament només feia que donar-me maldecaps, torna a funcionar a la perfecció!

També em fa l’efecte que se m’ha solucionat el problema que tenia amb el mòdul vboxdrv del VirtualBox cada vegada que actualitzava el sistema. Quan ho comprovi ja ho comentaré…