Introducción Compilación del kernel Instalación del nuevo kernel Referencias
De cualquier forma al final de este instructivo se presentan algunas referencias de documentos disponibles en Internet para mayor ilustración.
Es útil recompilar un kernel porque trabajando con kernels nuevos generalmente se obtiene:
1. Un sistema más rápido,
estable y robusto.
2. Un sistema con soporte a elementos
de hardware no encontrado en kernels viejos.
3. Un sistema con soporte a características
especiales disponibles pero no habilitadas en kernels viejos.
Una alternativa a recompilar el kernel es instalar una nueva versión de la distribución GNU/Linux que esté utilizando. Dependiendo de las circunstancias puede resultar conveniente o preferible lo uno o lo otro. Por ejemplo, si tiene un sistema GNU/Linux que le costó esfuerzo y tiempo para instalar y configurar, y no desea volver a realizar todo ese trabajo otra vez, es posible que recompilar el kernel sea lo más sencillo para dar solución a su necesidad particular.
Recompilar el kernel de GNU/Linux no es más que personalizar el kernel y como con cualquier aplicación, la personalización se hace para sacar un mayor provecho de las diferentes características que ofrece el software.
En forma particular, se sabe que algunas versiones de GNU/Linux Red Hat no están optimizadas para procesadores Pentium, siendo recomendable recompilar su kernel.
Importante: Si usted no tiene experiencia compilando el kernel es recomendable que utilice un equipo donde usted pueda practicar sin temor de que su sistema eventualmente vaya a quedar estropeado. No hay ningún riesgo al compilar el kernel (salvo que se quede sin espacio), en cambio, la instalación del mismo debe de realizarse con algo de cuidado.
Importante: No utilice kernels de desarrollo a menos que usted sepa lo que está haciendo.
Importante: Hay componentes que no deben compilarse como módulos porque son escenciales para hacer posible el arranque del sistema, por ejemplo el soporte para el sistema de archivos ext2, que GNU/Linux utiliza en forma predeterminada. Otros componentes si pueden hacerlo, por ejemplo, el soporte para una cierta tarjeta de red.
Para compilar un nuevo kernel correspondiente a una misma versión mayor del kernel, como es el caso del ejemplo escogido (instalar kernel 2.2.18 bajo Red Hat 6.1/kernel 2.2.12), seguramente no necesitará software adicional al incluido en la distribución GNU/Linux que esté empleando.
En cualquier caso es recomendable consultar primero el archivo README principal incluido en los fuentes del kernel a instalar bajo el directorio base linux.
[root@linux]# df
Importante: Normalmente el directorio donde se descomprimen los fuentes del kernel es /usr/scr. Los archivos fuentes del kernel crean una estructura de directorios a partir de /usr/src/linux, lo que puede resultar inconveniente si (1) ya existe un vínculo o un directorio con ese nombre y (2) al desempaquetar se sobreescriben archivos.
Luego de seleccionar el directorio de trabajo proceda a descomprimir de la siguiente forma:
(1) Si decidió trabajar con el archivo linux-2.2.18.tar.bz2, desempaquete y descomprima utilizando mediante:
[root@linux]# bzcat linux-2.2.18.tar.bz2 | tar -xvf -
Alternativamente puede ejecutar:
[root]# tar --use-compress-program bunzip2 -xvf linux-2.2.18.tar.bz2
(2) Si optó por usar el archivo linux-2.2.18.tgz, el comando a utilizar es:
[root]# tar -zxvf linux-2.2.18.tgz
Las alternativas para configurar el nuevo kernel corresponden a los comandos:
Para el ejemplo se utiliza make menuconfig, porque ofrece un interfaz amigable al usuario al igual que make xconfig, pero resulta más práctica si no se dispone o no se quiere utilizar X Windows. Antes de proceder a ejecutar este comando, cámbiese al directorio apropiado:
[root]# cd linux
Ahora si ejecute:
[root]# make menuconfig
Las diferentes opciones disponibles a partir del menú inicial se presentan en forma ampliada en la siguiente figura:
Linux Kernel v2.2.18
Configuration
-----------------------------------------------------------------------------
+-------------------------------
Main Menu -------------------------------+
| Arrow
keys navigate the menu. <Enter> selects submenus --->.
|
| Highlighted
letters are hotkeys. Pressing <Y> includes, <N> excludes, |
| <M>
modularizes features. Press <Esc><Esc> to edit, <?> for
Help. |
| Legend:
[*] built-in [ ] excluded <M> module < > module
capable |
| +---------------------------------------------------------------------+
|
| |
Code maturity level options --->
| |
| |
Processor type and features --->
| |
| |
Loadable module support --->
| |
| |
General setup --->
| |
| |
Plug and Play support --->
| |
| |
Block devices --->
| |
| |
Networking options --->
| |
| |
Telephony Support --->
| |
| |
SCSI support --->
| |
| |
I2O device support --->
| |
| |
Network device support --->
| |
| |
Amateur Radio support --->
| |
| |
IrDA (infrared) support --->
| |
| |
ISDN subsystem --->
| |
| |
Old CD-ROM drivers (not SCSI, not IDE) --->
| |
| |
Character devices --->
| |
| |
USB support --->
| |
| |
Filesystems --->
| |
| |
Console drivers --->
| |
| |
Sound --->
| |
| |
Kernel hacking --->
| |
| |
---
| |
| |
Load an Alternate Configuration File
| |
| |
Save Configuration to an Alternate File
| |
| +-----------v(+)------------------------------------------------------+
|
+-------------------------------------------------------------------------+
|
<Select> < Edit > < Help >
|
+-------------------------------------------------------------------------+
Un ejemplo de uno de los submenús expandido (Processor type and features)se aprecia en seguida:
+----------------------
Processor type and features ----------------------+
| Arrow keys navigate
the menu. <Enter> selects submenus --->.
|
| Highlighted
letters are hotkeys. Pressing <Y> includes, <N> excludes, |
| <M> modularizes
features. Press <Esc><Esc> to exit, <?> for Help.
|
| Legend: [*]
built-in [ ] excluded <M> module < > module capable
|
+-------------------------------------------------------------------------+
| | (PPro/6x86MX)
Processor family
| |
| | <
> /dev/cpu/microcode - Intel P6 CPU microcode support (NEW)
| |
| | <
> /dev/cpu/*/msr - Model-specific register support (NEW)
| |
| | <
> /dev/cpu/*/cpuid - CPU information support (NEW)
| |
| | (1GB)
Maximum Physical Memory
| |
| | [ ]
Math emulation
| |
| | [ ]
MTRR (Memory Type Range Register) support
| |
| | [*]
Symmetric multi-processing support
| |
+-------------------------------------------------------------------------+
|
<Select> < Exit > < Help >
|
+-------------------------------------------------------------------------+
En esta pantalla se puede apreciar por ejemplo que en forma predeterminada se ha desactivado la emulación matemática (Math emulation) y que si se desea habilitar ésta quedaría incluida necesariamente dentro del kernel y no como un módulo (como lo indican los parentesis rectangulares de esa opción), contrario a las opciones que están acompañadas por parentesis angulares (<>), que pueden compilarse o no como módulos si se desea.
Continuando con el ejemplo, si se ingresa al sub-menú Processor Family, se aprecian las siguientes opciones:
+-------------------------
Processor family -------------------------+
| Use the arrow
keys to navigate this window or press the hotkey of |
| the item you
wish to select followed by the <SPACE BAR>. Press
|
| <?> for additional
information about this option.
|
+--------------------------------------------------------------------+
| |
( ) 386
| |
| |
( ) 486/Cx486
| |
| |
( ) 586/K5/5x86/6x86
| |
| |
( ) Pentium/K6/TSC
| |
| |
(X) PPro/6x86MX
| |
+--------------------------------------------------------------------+
|
<Select> < Help >
|
+--------------------------------------------------------------------+
En definitiva el procedimiento a seguir es entonces:
(1) Con la ayuda de las teclas de movimiento del cursor y la tecla [Enter] recorra todas y cada una de las opciones de los submenús disponibles a partir del menú principal,
(2) Con la ayuda de la barra espaciadora defina si habilita o no el soporte para una u otra característica, y si lo hace en forma integrada al kernel o en forma modular si desea y es posible.
Al oprimir la barra espaciadora una o varias veces según se necesite, es posible que visualice:
El procedimiento es dispendioso pero necesario.
Para el ejemplo, el cambio principal realizado
fue desabilitar el soporte para SMP.
Para el ejemplo, se aceptaron los valores
predeterminados propuestos sin realizar ningún cambio.
Adicionalmente, entre otras están
las opciones que permiten a GNU/Linux actuar como un enrutador o dar soporte
a protocolos tales como IPX o Reverse ARP.
Para el ejemplo, se habilitó soporte
integrado al kernel para la tarjeta de red disponible y también
pero en forma modular para otras tarjetas de red de las cuales eventualmente
se pueda disponer. En complemento, se habilitó el soporte para protocolo
PPP, desactivado en forma predeterminada.
(1) Para compilar el kernel ejecute primero:
[root]# make dep
O mejor, para poder observar de mejor forma la salida y eventuales errores, ejecute:
[root]# make dep 1> dep-salida.txt 2>dep-errores.txt
(2) Ahora compile el kernel mediante:
[root]# make bzImage
o mejor, por ejemplo mediante:
[root]# make bzImage 1> bzImage-salida.txt 2>bzImage-errores.txt
Es necesario mencionar que make bzImage no es la única opción. Consulte la documentación disponible bajo el directorio linux/Documentation para obtener alguna información al respecto.
Al ejecutar bzImage se generan entre otros, el kernel linux/arch/i386/boot/bzImage y el archivo linux/System.map, para instalar posteriormente bajo el directorio /boot.
(3) Si se habilitaron los múdulos, ejecute:
[root]# make modules
o si prefiere:
[root]# make modules 1> modules-salida.txt 2>modules-errores.txt
[root]# ls -l /boot
Algunos de los archivos allí contenidos son:
lrwxrwxrwx
1 root root 20 Nov 12 09:34 System.map
-> System.map-2.2.12-20
-rw-r--r--
1 root root 191102 Sep 27 1999 System.map-2.2.12-20
lrwxrwxrwx
1 root root 17 Nov 12 09:34 vmlinuz
-> vmlinuz-2.2.12-20
-rw-r--r--
1 root root 622784 Sep 27 1999 vmlinuz-2.2.12-20
(2) Mire el contenido del archivo /etc/lilo.conf, dando como un hecho que se está utilizando Lilo:
[root]# cat /etc/lilo.conf
Por ejemplo, ese archivo podría contener:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux
image=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-20.img
read-only
root=/dev/hda9
(3) Desde el directorio linux utilizado, proceda a copiar el archivo bzImage generado durante la compilación dentro del directorio /boot. Por ejemplo, de esta forma:
[root]# cp -i arch/i386/boot/bzImage /boot/vmlinuz-2.2.18
(4) Desde el directorio linux utilizado, proceda a hacer lo propio con el archivo System.map. Por ejemplo, de esta forma:
[root]# cp -i System.map /boot/System.map-2.2.18
[root]# mv /lib/modules/2.2.12-20 /lib/modules/2.2.12-20.old
y luego si:
[root]# make modules_install
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=nuevo
image=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-20.img
read-only
root=/dev/hda9
image=/boot/vmlinuz-2.2.18
label=nuevo
read-only
root=/dev/hda9
Note el cambio realizado en la línea default.
(7) Ubíquese dentro del directorio /boot:
[root]# cd /boot
(8) Cambie los vínculos simbólicos asociados, si desea realizando una copia de respaldo de ellos, con estos comandos:
[root]# ln -sfb vmlinuz-2.2.18 vmlinuz
[root]# ln -sfb System.map-2.2.18
System.map
Los archivos de respaldo generados son: vmlinuz~ y System.map~.
(9) Pruebe sin llevar a cabo la instalación del nuevo MBR ejecutando:
[root]# /sbin/lilo -t -v
(10) Si no observó nada anormal proceda a la instalación del nuevo MBR ejecutando:
[root]# /sbin/lilo
(11) Reinicie el sistema.
Si en un dado caso tuviera problemas con el nuevo kernel puede arrancar utilizando el kernel anterior, escribiendo linux frente al indicador de lilo, cuando apenas se inicie el arranque.