sábado, 12 de abril de 2008

Compilació d'un Kernel

Com bé sabreu per un altre article, tinc un portatil Sony Vaio VGN-FS295, que funciona molt bé. L'altre dia però m'en vaig adonar que, no sé per quin motiu, estava funcionant amb un Kernel SMP, és a dir, Symmetric Mult Processing Kernel => un Kernel preparat per sistemes amb 2 processadors, que no és el meu cas.
Vaig decidir canviar-lo, i ja que ho feia, personalitzar-me'l amb únicament el que necessités, sense Drivers per teclats midi, ni per targetes de xarxa que no tinc.

Una mini guia molt ràpida i útil, ja que a vegades costa trobar els passos exactes, ja que entre una versió i una altra pot canviar alguna cosa.




Definició de Kernel:
És el nucli o com jo li dic "cor", del Sistema Operatiu. El kernel a GNU/Linux s'anomena Linux. GNU és el conjunt de programes (ls, cp, Gnome, Openoffice, Firefox, etc) que complementen el S.O.
Permet a aquests programes comunicar-se amb el Hardware, i per tant és el Kernel el que fa totes les gestions dels teus perifèrics: Audio, Pantalla, Teclat, Ratolí, Processador, Memòria RAM, Discs Durs, etc.
http://ca.wikipedia.org/wiki/Nucli_del_sistema_operatiu

Per què vull compilar el meu propi kernel?:

Si configures el teu Kernel perquè estigui adaptat perfectament al teu Hardware, i no tingui carregats sempre Drivers o controladors genèrics o innecessaris, el sistema farà les gestions amb molta més eficiència i sense perdre recursos. Segur que guanyes en velocitat i rendiment.

Que necessito saber per configurar el meu Kernel?:
Necessites saber al detall, quins perifèrics utilitzes, ho descobriràs a mesura que el vaigis configurant. Et pot ser de molta ajuda fer:
#: lspci --> et llista els dispositius del bus PCI trobats al sistema (chip, revisió, etc.)
#: lsmod --> et llista els mòduls (drivers) carregats actualment.
#: dmesg --> Mostra el log d'inici del sistema, pots trobar informació útil.

Les sortides de lspci, lsmod i dmesg, les pots passar a grep amb una pipe:

lipi@debianAMD:~$ lspci | grep audio
00:0f.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 07)

Ja sé que tinc una Creative Labs SB Live! - EMU10k1, i que a Targetes de So serà la única que seleccionaré.

Per cada opció que no sàpigues que és disposaràs de l'ajuda en la pantalla de configuració, i sinó: www.google.com. Segur que hauràs d'investigar bastant.

Necessitaràs saber també, per a que utilitzaràs el teu sistema: Si ha de ser per un Escriptori normal, hi ha moltes opcions com per exemple el sistema d'elecció de Prioritats amb que els programes s'executen, que s'hauran de triar adequadament.

Començant:

1. Instal·lar paquets necessaris:
apt-get install build-essential libqt4-dev

2. Descarregar un Kernel:
Pots fer-ho des de synaptic (linux-image-2.6.xx), però jo et recomano que vaigis a www.kernel.org i et baixis la última versió.
Per veure l'actual que tu tens:
uname -r

3. Descomprimir el Kernel a la carpeta /usr/src
debianAMD:/usr/src# cp /home/lipi/linux-2.6.24.4.tar.gz /usr/src
debianAMD:/usr/src# cd /usr/src
debianAMD:/usr/src# tar xvzf linux-2.6.24.4.tar.gz

4. Configurar el Kernel:

debianAMD:/usr/src/linux-2.6.24.3# make xconfig

Si ens dona algun error, és que ens falta instal·lar alguna llibreria, mira quina és i apt-get.



Aquesta és la part més llarga, a jo em va costar 4 capvespres, i després refinar, ja que em vaig deixar algunes opcions. Pots carregar una configuració d'un altre kernel; aquesta es trobarà a /boot/config-2.6.22-2-k7 per exemple.

Un detall a comentar és que podràs seleccionar els drivers que es compilin com a (M) Mòduls, o com a (*) Integrats al kernel. Si estan integrats, sempre estaran carregats. Pot ser interessant per tenir sempre la targeta de xarxa o algun altre, funcionant. Els (M) es carregaran quan es necessitin, però no és descarregaran. Fes un lsmod i veuras els que tens carregats actualment, a més dels integrats que no surten a la llista. Si fas lsmod | wc -l et dira el nombre de mòduls carregats+1.

5. Compilar Kernel, Mòduls, crear initrd..:
(Farem veure que compilam la versió: 2.6.24.3)
debianAMD:/usr/src# make
debianAMD:/usr/src# make modules_install

**Si compiles una versió d'un kernel que ja tens, es substituirà la carpeta de mòduls de /lib/modules/2.6.24.3 per l'actual, perdràs mòduls instal·lats manualment, p.ex Driver d'NVIDIA.

debianAMD:/usr/src/linux-2.6.24.3# mkinitramfs -o /boot/initrd.img-2.6.24.3
debianAMD:/usr/src/linux-2.6.24.3# cp System.map /boot/System.map-2.6.24.3
debianAMD:/usr/src/linux-2.6.24.3# cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.24.3
debianAMD:/usr/src/linux-2.6.24.3# update-grub


6. Reiniciem, escollim el nou kernel, i provem. Si no funciona, tornarem al kernel anterior, i una altra vegada al pas 4 a retocar-lo. Igual farem si algun mòdul no ens funciona o ens falta.

Una vegada compilat, retocar-lo és molt ràpid ja que no ha de re-compilar tots els mòduls. Si vols fer net la instalació i començar de 0, has de fer:

debianAMD:/usr/src# cd linux-2.6.24.3
debianAMD:/usr/src/linux-2.6.24.3# make mrproper

7. Pot ser que et costi que tot funcioni bé, però si ho fas bé aconseguiràs que l'ordinador no et gasti memòria, que vaigi tot més ràpid, que utilitzi el mínim de processador, que la bateria del protàtil et duri 30 minuts més, etc. SORT!


3 Comentaris:
1. A Ubuntu funciona la majoria de hardware que hi connectis a la primera, perquè té gairebé totes les opcions del kernel activades com a mòduls, i a més, la gent d'Ubuntu modifica el kernel i hi afegeix altres drivers que no hi són a la versió de www.kernel.org oficial. Un dia explicaré com "parchejar" el Kernel, afegint actualitzacions o més mòduls.

2. A Windows, no pots modificar el Kernel, és el mateix per totes les màquines del planeta. Per això consumeix tants de recursos i funciona sovint, tant malament. Tu podràs triar fins i tot el model del processador!

3. Resum ràpid:
debianAMD:/usr/src/linux-2.6.24.3# make xconfig
debianAMD:/usr/src/linux-2.6.24.3# make
debianAMD:/usr/src/linux-2.6.24.3# make modules_install
debianAMD:/usr/src/linux-2.6.24.3# mkinitramfs -o /boot/initrd.img-2.6.24.3
debianAMD:/usr/src/linux-2.6.24.3# cp System.map /boot/System.map-2.6.24.3
debianAMD:/usr/src/linux-2.6.24.3# cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.24.3
debianAMD:/usr/src/linux-2.6.24.3# update-grub


No hay comentarios: