Recompila tu kernel

Imagen de pablo_carballude

En esta receta intentare explicar como se recompila el kernel.

Lo primero explicare breve y bastamente que es el kernel. El kernel de
Linux es el núcleo del SO (Sistema Operativo), es quien se encarga de
lidiar con el hardware y de administrar las funciones básicas.

Y si ya me funciona ¿Para que recompilarlo?

Pues una de las ventajas es que ganarías velocidad, pero sobre todo
para dejas las cosas a tu gusto o para dar soporte a hardware que antes
no tenias, o mejorar el existente.

Manos a la obra, lo primero es ir a kernel.org y bajarse el
kernel, vereis que hay barios, bajaos el ultimo, pero el ultimo que su
segundo numero sea par, es decir, vereis que hay 2.5.XX pero ese no,
por que 5 es impar, eso significa que el kernel es inestable, bajaos
uno de la 2.4.XX en este caso el 2.4.22, es cierto que esta el 2.6.0,
pero vereis que tiene detrás la palabra test, esto significa que no
esta aun listo... así que a menos que os sintáis afortunados, bajaos el
2.4.22. Haaa, se me olvidaba, bajaos el enlace que tiene la F, que
significa Full Source si no podéis tener problemas, el archivo en
cuestión son unos 22MB más o menos (espero haber puesto bien la MB...).

Lo primero que debemos hacer es seguir la regla no establecida de
que el kernel ha de estar en /usr/src/linux así que nos vamos a una
Shell, nos ponemos en la carpeta en que lo hallamos bajado y COMO ROOT,
ponemos:

cp linux-2.4.22.tar.bz2 /usr/src/
rm linux-2.4.22.tar.bz2

Si, eso es un move lo se... pero así os obligo a usar el copy y el
remove :-) bueno, luego nos vamos a la carpeta /usr/src (en la shell)
que se hace poniendo:

cd /usr/src/

Aunque me imagino todos lo sabríais, ahora lo descomprimimos,
veremos que tiene una doble extensión ".tar.bz2" Bz2 es de Bzip2, un
programa de compresión que obtiene ratios de compresión muy buenos,
claro que también es bastante lentito si se compara con un gzip, y el
".tar" es de tar que lo unico que hace es agrupar ficheros y
directorios en un unico archivo, esto es por que bzip2 solo puede
comprimir un fichero. Para descomprimirlo ponemos:

bzip2 -dv linux-2.4.22.tar.bz2 && tar -xvf linux-2.4.22.tar

Bien, paso a paso, bzip2 -dv lo que hace es ("d") descomprimir el
fichero y (v) nos dice si ha resultado bien o no, veremos que hay un
&& esto en linux se usa para hacer varios comandos de una vez,
es decir si quisiera entrar en el directorio hola y listarlo podría
haber puesto: cd hola && ls o bien cd hola INTRO y luego ls.
Bueno, el tar tiene tantos parámetros que yo casi los pongo a boleo...
en este caso (x) que los extraiga, (v) que nos vaya diciendo que
archivos extrae y creo que la (f) es para que mantenga las rutas y
permisos... si alguno tiene curiosidad tar puede de comprimir bzip2 (en
realidad es que llama a bzip2) solo hay que ponerle un parámetro mas...
pero le quita la gracia :-)
Con esto tendremos un directorio /usr/src/linux-2.4.22, lo primero
borramos los residuos:

rm linux-2.4.22.tar

Bien, ahora entramos en el directorio /usr/src/linux-2.4.22 y ponemos:

make mrproper

Este es el típico comando que nadie se pone de acuerdo cuando usarlo... yo lo hago en este orden y a mi me funciona

make clean

Ahora viene la hora de la elección, es ahora cuando debemos
configurar nuestro kernel, y eso nos lleva a decidir como queremos
hacerlo, hay 3 maneras, modo texto (si no sois gurus no lo hagáis) por
menú de consola (menuconfig necesitaras ncurses completo) y lo mas normal que lo hagamos dentro de las X.

Yo intentare documentar muy bien el proceso, pero únicamente para las X que si no me paso la vida haciendo la receta...

así que ponemos:

make xconfig

Este comando puede dar un error... si lo que os dice es bad
interpreter o similares debéis instalaros las librerías TK y el WISH
que creo viene dentro de tk pero bueno... eso mejor preguntadlo ya en
el canal que son cosas mas especificas. Otro error común es algo como
esto:

reXlib: connection to ":0.0" refused by server
Xlib: No protocol specified
Application initialization failed: couldn't connect to display ":0.0"

Lo que nos esta diciendo es que no puede acceder a la pantalla por
que en la shell estamos como root (y si no lo estabais estadlo por
dios) y en las x como usuario normal... y se crean problemas, así que
tenéis dos maneras: entrar en las x como root para recompilar el
kernel, o ejecutar en una ventana de terminal como usuario el comando:

xhost +

Si no tenéis ningún problema (que seria lo normal) se os presentara
una pantallita con unos cuantos botones que no tendrás ni idea de que
significan, normal, les ponen nombres raros para acojonar... pero si
piensas un poco sabes de que son ;-)

Lo primero es asegurarse de tener un kernel modular, así que nos
vamos a "Loadable module support" y activamos las tes opciones de Y (osea, yes :-) ).

En Processor type and features si no sabes lo que haces... ni entres.
En General Setup debéis entrar si vuestra bios tiene activo el APM, eso
del ahorro de energía y que permite que el ordenador se apge solo sin
tener que darle al botón, pues si lo tenemos entramos y dejamos como
"Y" la opción que pone:

"Power Management support" y también la de "Advanced Power Management BIOS support"

Luego nos vamos a "Parallerl port support" y bien, si tenemos algún dispositivo en un puerto paralelo, generalmente una impresora debemos darle soporte, así que marcamos con "Y" la opción Parallel port
support, y si es para un impresora marcamos como "Y" la opción
"PC-style hardware".
Lo siguiente que debemos es poner los IDE y SCSI, por lo general el
problema viene cuando la gente tiene una grabadora IDE, ya que tal cosa
no existe... lo que hace el sistema operativo es emular SCSI para
trabajar con ella, si tenemos una grabadora SCSI debemos hacer lo
siguiente:

ATA/IDE/MFM/RLL support, entramos y vamos a: IDE, ATA and ATAPI
Block devices, marcamos como "N" la opción: "Include IDE/ATAPI/CDROM
support"

Macamos como "Y" la opción: "SCSI emulación support"

Ahora nos vamos a SCSI support y marcamos como "Y": "SCSI support", "SCSI CD-ROM support" y "SCSI generic support"

Nos vamos a "Network device support" aquí caben dos posibilidades
que tengas un módem o una tarjeta de red, si tienes tarjeta de red lo
unico que has de hacer es seleccionar la tuya marcándola como "Y" y si
tienes módem tienes que hacer esto:
Marcas como "Y" la opción: "PPP (point-to-point protocol) support" y si
lo tienes por un puerto com pues marcas también como "Y" "PPP support
for sync tty ports" y si no es serie pues la "PPP support for async
serial ports" si dudas... marca las dos :-) la Deflate compresión y BSD
Compress compression Deben estar activados con "Y".

Si tienes una tarjeta sintonizadora de TV o Radio debes pasarte por
"Multimedia devices" darle soporte como "Y" y marcar como "Y" tu
tarjeta.

En el apartado "File systems" damos soporte a sistemas de ficheros,
esto es muy importante sobre todo si nuestra partición no es EXT2, en
mi caso es REISERFS así que debo marcar como "Y" NI SE OS OCURRA COMO
MODULO la opción: "Reiserfs support", de cualquier modo también marco
como "Y" las siguientes opciones:

"Ext3 journaling file system support"

"DOS FAT fs support"

"MSDOS fs support"

"VFAT (Windows 95) fs support"

"Microsoft Joliet CDROM extensions" <--- Esta es muy recomendable

"NTFS file system support (read only)"

Se hecha de menos el soporte para BeFS pero bueno... ya parcheare luego el kernel :-P

Ahora viene el galimatias... Console drivers.

Voy a pasar de explicarlo por que hay mucho lío con las tarjetas
gráficas y el framebuffer y depende de la tarjeta se necesitan unas
opciones u otras o simplemente con tu tarjeta no se puede... así que
paso del tema ya que no es ni mucho menos imprescindible.

Sound, bueno... aquí simplemente tenemos que seleccionar la tarjeta
que tenemos, en mi caso es una SB-128 PCI así que marcaría la casilla
SB 128 PCI... esto... no aparece, vereis... linux no da soporte a una
tarjeta, si no a un chipset, en mi caso es el CT5880 que es compatible
con: "Creative Ensoniq AudioPCI 97 (ES1371)"

USB Support, esto es aun mas enrevesado, haceros a la idea de que
hoy por hoy, o eres un guru o no tienes usb en linux, de cualquier modo
podéis activar el soporte de lo que queráis aquí dentro, aunque la
verdad yo ni me molesto en cambiarlo.

Kernel hacking, bien, aquí activamos con "Y" el "Kernel debugging" y el "Magic SysRq Key"

Y configuración del kernel finalizada, por supuesto con estas
opciones funcionara fijo, pero deberás experimentar un poco para que se
adapte 100% a tu hardware. Bueno, pues le damos a Save and Exit.

Nos sugiere que pongamos make dep y como somos obedientes le hacemos caso y ponemos esto:

make dep
make modules
make modules_install
make bzImage
>

No os asustéis, cuando acabe el bzImage os dará algo así como:

warning: kernel is too big for standalone boot from floppy

Es totalmente normal ya que esta compilación es muy bestia... esta
todo en el kernel y no como modulo, cuando lo hayas hecho así unas
veces empezares a coger experiencia y pondréis cosas como modulos...
pero para no liaros mas de la cuenta lo he hecho así, el kernel
funcionara, pero no permitirá arrancar desde diskete...

Bueno, ahora queda poner el kernel en /boot, para ello ponemos:

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

Con este cp lo que hacemos es copiarlo y cambiarle el nombre ahora el kernel lo tendremos en /boot/vmlinuz-2.4.22

También pon:

ln /boot/vmlinuz-2.4.22 /vmlinuz-2.4.22

Esto hace que el kernel se busque en / y no en /boot, suele ser recomendable

Nos falta decirle a LiLo que queremos que lo use, para ello ponemos: kedit /etc/lilo.conf

probablemente tengamos algo como esto:>

default=Linux

image=/vmlinuz
label=Linux
read-only
restricted
alias=1

image=/vmlinuz.old
label=LinuxOLD
read-only
optional
restricted
alias=2

pues bien, lo dejamos como:

default=Linux

image=/vmlinuz-2.4.22
label=Linux
read-only
restricted
alias=1

image=/vmlinuz>
label=LinuxOLD
read-only
optional
restricted
alias=2

Así si nuestro kernel no arranca, podremos arrancar el anterior seleccionando LinuxOLD, guardamos el fichero y ponemos:

:~$ /sbin/lilo

para que los cambios se haga efectivos.