Compilando el kernel

El kernel es el que se encarga de comunicar los programas con los dispositivos físicos de la computadora.
Es conveniente tener el kernel actualizado por varios motivos, entre ellos: Mas y mejor soporte de Hardware y corrección de errores.

Autor: Hernan

Para recómpilar un kernel se necesita tener instalado el gcc, libc y para los 2.6 las mod-utils (que son las nuevas herramientas insmod, rmmod, lsmod, etc para los kernel 2.6). Gralmente esta todo eso, si no fijate de tener todos los paquetes de desarrollo!

Al momento de compilar nuestros kernel's vamos a poder elegir usar los drivers como modulos o built-in.

A mi me gusta poner todo built-in.

Generalmente compilo como built-in solo los drivers que se van a cargar en el booteo, como ser los discos rígidos y los que se utilizen en todo momento, como ser las NIC's (placas de red), la placa de sonido y otras cosas más.

A medida que le vayan tomando la mano al sistema y vayan conociendo su hardware, necesidades, etc. van a ir optimizando su kernel.

Sabiendo que al compilar el kernel uds van a setear todo aquel soporte que necesitan y quieren cargar para su hard, lo que necesitan hacer es:

Bajarse el source que mas les guste de ftp.kernel.org/ o algún otro mirror.

Descomprimirlo en /usr/src y linkearlo a /usr/src/linux

ln -s /usr/src/linux-2.x.x-x /usr/src/linux

Entrar al directorio que contiene los sources con cd linux-2.x.x-x

Tienen varias opciones para empezar a configurar su kernel.

make menuconfig es algo mucho mas cómodo ya que pueden configurarlo a traves de una hermosa (???, jeje, para modo texto va bien) interfaz utilizando ncurses.

make xconfig es aún mucho mas cómodo pero van a necesitar tener configurada las X.

Hoy por hoy en los kernels 2.6 tambien se puede hacer un make gconfig el cual utiliza las librerias de gnome.

Una vez que eligieron el método que mejor les pareció van a tener que configurar todo lo que necesiten, lo mejor seria usar menuconfig pq el dia q no tienen por alguna razon andando el servidor x (y me ha pasado) se van a querer matar! y aunque ahora voy a intentar explicarles lo mas importante, va a depender, mayormente, de su criterio y hardware.

Basandome en un kernel 2.6

--General Setup

Generalmente no van a necesitar tocar nada aca (puse la opción porque el titulo les va a parecer tentador, pero no... let it be)

--Loadable module support

Aca tienen las opciones para poder cargar / descargar / forzar descargar modulos, tanto como habilitar la carga automatica de modulos del kernel (se cargan automaticamente según se vayan necesitando) y el soporte para modulos que pertenecen a otras versiones del kernel.

--Processor type and features

Aca eligen la subarquitectura que corresponde (dejenlo como estan a no ser que su plataforma no sea una pc), el tipo de procesador, aca pongan el micro que tienen, si su sistema es UP o SMP (Uni-processor o Symmetric multi-processing) (Si tienen un p4 con HT pueden veneficiarse con la opción SMP), la función preemptible kernel (Uno de las mejores opciones, creanme que van a notar mucho la diferencia uds), APIC, cooprocesador matemático, MTRR (se usa para controlar los accesos del procesador a los rangos de memoria, o sea... activenlo, esto afecta mucho el rendimiento si no lo tienen seteado).

--Power management option

está mas que claro, utilizen la que mas les guste, dejenlo como esta o ninguna.

--Bus options

Aca especifican como va a ser el modo de acceso del PCI (puede ser directo, según lo que especifique el bios o cualquiera de las dos opciones).

Si tienen slots ISA... habiliten el soporte para el mismo si no tienen ISA saquenlo!.

Aca tambien van a encontrar soporte para PCMCIA/CardBus (si no es notebook saquen esto) y PCI Hotplug (dudo q alguien tenga esto).

--Executable file formats

pasamos de largo!

--Device drivers

Lo importante aca es:

--Parallel port (si tenes impresora paralelo obvio q lo necesitas, si no sacalo!)

--Plug and Play Support

--Block devices... asegurense de tener habilitado el loopback, lo van a necesitar. Tambien RAM disk.

--ATA/ATAPI/MFM/RLL support

Esta es una de las partes mas importantes en cuanto a rendimiento de su sistema respecta. Aca estan los controladores IDE...

mínimamente van a querer habilitar 'Include IDE/ATA-2 DISK support','Include IDE/ATAPI CDROM support','SCSI emulation support','PCI IDE chipset support','Sharing PCI IDE interrupts support', 'Generic PCI bus-master DMA support',' Use PCI DMA by default when available' y luego van a tener que escoger el driver del chipset que corresponda a su motherboard, en mi caso como es un mother con chipset SIS lo tengo configurado con el 'SiS5513 chipset support'.

--SCSI device support

Aca ponemos legacy SCSI support

SCSI disk support

SCSI cdrom support

SCSI generick support

estos los vamos a necesitar si queremos montar por ej un pendrive!

--Multi-device support (RAID and LVM)

esto saquenlo a menos q tengan raid en su pc!

--IEEE 1394 (FireWire) support

Si no tenes firewire al pedo, salcalo!

--I2O device support (Intelligent I/O support) (Si no saben no toquen, como yo).

--Networking support

Esta parte es tambien de las mas importantes, aca no solo van a elegir el tipo de adaptador que tienen sino que tambien, como quieren que funcione (bridge, routed, etc.), protocolos (IPV4, IPV6, IPX, PPP, SLIP, CSLIP), filtros (IPCHAIN, IPTABLES), fare queues y mil mil cosas mas. Es inmensa la cantidad de cosas que pueden habilitad aca y me tadaría demasiado tiempo explicar una por una para que sirve (y buscar información de las que no tengo idea para no chamuyarlos). Solo limitense a habilitar la/las placas de red que tengan esto lo hacen en la seccion ethernet y depende de la velocidad de sus placas! y las opciones de PPP/SLIP.

--ISDN subsystem

si hay algun loco con una conección ISDN, metale mano nomas.

--Input device support

joystick, mouse, touchscreens, pc speacker eso aca!

--Character devices

Aca van a setear los puertos serie, soporte para impresoras paralelo, y el soporte AGP (/dev/agpgart), aca solo ponen esta opcion y la placa de video q tengan, si es una placa de video nvidia y queremos untilizarla con la aceleracion solo esta opcion y debemos sacar todas las demas, si si y el q dice nvidia tb!

--I2C

Bien, esto es interesante aca yo puse todo como modulo, esto sirve para monitorear los sensores de nuestro motherboard, aca les dejo un link de como usar este soporte! Se pueden dar una vuelta por mi blog y ver el post sobre lm_sensors!

--Multimedia device

alguna capturadora de video? si no sacalo!

--Graphic Support

Aca ponen:

Frame buffer devices

VGA 16 color graphic support

Vesa VGA support

y virtual frame buffer support

y en caso de tener alguna de esas placas de video ponganla, insisto q si queres usar tu nvidia con la aceleracion y el driver nvidia no pongas la opcion nvidia.

--Sound

Bien, aca ponene el 1ro y en la 2da opcion entran y ponen el 1ro el 2do y todos los OSS

se van a la parte de PCI y ponen su placa de sonido!

Solo seteen la placa de sonido que corresponda. Para aquellos con placas de sonido AC97 usen el driver Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111.

Para aquellos con la misma placa pero con mothers basados en el chipset VIA el driver es VIA 82C686A/B, 8233 South Bridge si no me equivoco.

Si quieren pueden usar OSS pero les aviso que en un futuro no muy lejano esa opción va a desaparecer del kernel.

--USB support

aca pongan todos los q dice HCI y busquen las cosas usb q puedan tener, si tienen un pendrive pongan el soporte para mass storage. el resto saquenlo!

--File Systems

Este es el tipo de File systems que puede manejar el kernel.

El sistema de archivos mas común es el Ext2, Ext3 o Reiser, sobre el que uds instalaron, seguramente, su sistema GNU/linux, Yo puse soporte para todos!.

Si quieren poder montar sus particiones de windows van a tener que habilitar las opciones que correspondan en el submenu DOS/FAT/NT Filesystems. Lo mismo para los CD-ROM/DVD... ISO9660 7 joliet y UDF Support.

Una vez que setearon todo a su gusto le dan al Exit, cuando les pregunte si quieren salvar la nueva configuración del kernel le dan que si. En ese momento los va a devolver al shell.


Los paso para compilar el kernel 2.6 son tan fáciles como hacer un:


make bzImage

make modules

make modules_install

Después de esto solo nos queda mover el kernel propiamente dicho (arch/i386/boot/bzImage) a /boot con el nombre bzImage-2.6.x-X donde x es la version de kernel y X es tu version y el System.map-2.6.x-X es obvio q van los mismos q antes, en la raiz de los sources del kernel a la misma carpeta (/boot).

Luego hay q editar el bootloader

para Grub

editamos /boot/grub/menu.lst

title Linux-2.6.x.X

root (hd0,1)

kernel /boot/bzImage-2.6.x.X ro root=LABEL=/ <--- aca pone lo mismo q ya tenes escrito para el otro kernel!

para lilo

editamos /etc/lilo.conf

image=/boot/bzImage-2.6.x.X

label=Linux-2.6.x.X

root=/dev/hdaX <-- aca X es tu numero de particion.

read-only

guardar y no olvidarse de ejecutar el comando "lilo" para que grabe los nuevos parametros en el MBR. Para grub no es necesario mas que editar el archivo!

Reinicien y Listo! Ya tienen un nuevo Kernel, si al cargar kernel panic a no desesperar es cuestion de configuracion del kernel, carguen el kernel anterior y revisen todos los pasos!

Bueno, esto solo pretende ser general de lo que van a encontrar en un kernel y para que puede servir cada cosa.

Cada una de las opciones salvo las generales, dependen pura y exclusivamente de tu PC.

El que tenga alguna drama, me manda un mail a hernan82arg2004@ciudad.com.ar


Saludos y espero q sirva!