Compilación del kernel

Estrictamente hablando, para compilar el kernel no se necesita ser root ya que se puede realizar desde el directorio de un usuario, siempre y cuando se disponga de suficiente espacio en disco y de las herramientas de compilación instaladas. En este instructivo se utiliza la cuenta del root para efectos prácticos.

Obtención y descompresión de los fuentes

Obtenga una copia del código fuentes del kernel de http://www.kernel.org o de alguno de los servidores alternos listados en http://www.kernel.org/pub/mirrors/ . Para el ejemplo, para el kernel versión 2.2.18 el archivo a obtener es ya sea linux-2.2.18.tar.bz2 (empaquetado con tar y comprimido con bzip2) o linux-2.2.18.tgz (empaquetado con tar y comprimido con gzip). Los archivos comprimidos con bzip2 normalmente son de menor tamaño.

Descompresión de los fuentes

Antes de proceder a su descompresión, verifique que disponga de 70 o más MBytes libres en el disco duro, por ejemplo con el comando df:


[root@linux]# df

Importante: Normalmente el directorio donde se descomprimen los fuentes del kernel es /usr/src. 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

  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
    

Creación de un archivo de configuración

La definición de la configuración del nuevo kernel es el punto crucial de la compilación. Una buena configuración se alcanza sólamente:

  1. Si tiene a la mano todos los datos del hardware que el kernel va a soportar: puertos, discos duros, tarjetas, etc.

  2. Si define qué características ofrecidas van a ser soportadas por el nuevo kernel, ya sea directamente dentro del núcleo o como módulos.

Las alternativas para configurar el nuevo kernel corresponden a los comandos:

El comando make config ofrece un interfaz primitivo basado en modo texto, sin ayuda ni menús. Los comandos make menuconfig y make xconfig conducen a mejores interfaces de usuario, con menús y quizá lo más importante, con una ayuda contextual que facilita en gran medida la configuración.

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:

Opciones de configuración del kernel 2.2.18

Un ejemplo de uno de los submenús expandido (Processor type and features) se aprecia enseguida:

Submenu expandido en la configuración del kernel 2.2.18

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 paréntesis 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:

    • Un nuevo sub-menú.

    • Un asterisco (en ocasiones acompañado de sub-opciones), indicando que se va a compilar integrado al kernel.

    • La letra M (en ocasiones acompañada de sub-opciones), indicando que se va a compilar en forma modular.

    • La letra X, similar al asterisco, pero sólo para opciones de selección múltiple con única alternativa.

    • Un espacio en blanco, indicando que no se va a incluir dentro del kernel el soporte para un determinado item.

  3. Cuando haya llevado a cabo por completo los puntos 1 y 2, desde el menú principal seleccione la opción exit y responda con Y (de Yes) para grabar la configuración resultante en el archivo .config, de lo contrario tendrá que volver a realizar todo el proceso otra vez.

Una guía de apoyo para definir un archivo de configuración

La ayuda contextual de disponible con make menuconfig o con make xconfig es quizás lo suficientemente apropiada para facilitar el proceso de definición del archivo de configuración, no obstante aquí se presenta alguna ilustración adicional.

Code Maturity Level Options

Esta opción viene desactivada en forma predeterminada, deshabilitando el uso de código experimental en el kernel.

Processor Type and Features

Bajo esta sección es posible definir entre otros:

  • Tipo de procesador de su computador. Para optimizar el kernel para su procesador utilice la ayuda contextual para mayor ilustración.

  • Emulación del procesador matemático (útil con equipos 386 y similares que vienen sin él). Deshabilitada en forma predeterminada.

  • Soporte para sistemas con más de 1 procesador (SMP). Deshabilite este soporte si va a trabajar en un computador que solamente dispone de 1 procesador.

Importante: Es posible que el kernel no arranque si usted selecciona un procesador incorrecto, por ejemplo si optimiza el kernel para un procesador Pentium y usted tiene un procesador 486.

Para el ejemplo, el cambio principal realizado fue deshabilitar el soporte para SMP.

Loadable Module Support

Si por alguna razón desea generar un kernel monolítico, sin módulos, desactive esta opción. Lo normal es por el contrario, no realizar ningún cambio, aceptando la opción predeterminada.

General Setup

Esta sección incluye entre otros, soporte para:

  • Redes.

  • Bus PCI.

  • Puerto paralelo

  • Administración Avanzada de Energía (APM).

Para el ejemplo, el cambio principal realizado fue habilitar el soporte para el puerto paralelo y para APM, deshabilitados en forma predeterminada.

Plug and Play

Habilite esta opción si desea que el kernel automáticamente configure algunos dispositivos periféricos.

Block Devices

Bajo esta sección se presenta soporte para:

  • Unidades de discos flexibles.

  • Soporte mejorado para dispositivos de almacenamiento estándar IDE y

  • Otros dispositivos de datos en modo bloques.

Si se dispone de un disco duro IDE, será necesario habilitar el soporte para el disco IDE apropiado.

Para el ejemplo, se aceptaron los valores predeterminados propuestos sin realizar ningún cambio.

Networking Options

Esta sección es de vital importancia para equipos que van a operar en red. Las opciones que en forma predeterminada vienen habilitadas son:

  • Packet socket

  • Unix domain socket

  • TCP/IP networking, e

  • IP: Allow large windows

Para el ejemplo, se habilitaron adicionalmente las opciones:

  • Network firewalls, para permitir que Linux actúe como un equipo "corta fuegos" con posibilidad de filtrar paquetes y protegerse de accesos no autorizados de Internet, e

  • IP firewalling, para poder acceder a equipos remotos (por ejemplo de Internet) utilizando enmascaramiento a través de un equipo "corta fuegos", de tal forma que los equipos de la red local no son visibles al mundo exterior, evitando la necesidad de direcciones IP válidas.

En la práctica, estas dos opciones permiten por ejemplo, poder utilizar en forma compartida para una red local una conexión a Internet a través de una sola línea telefónica, disponiendo de una seguridad básica.

Adicionalmente, entre otras están las opciones que permiten a Linux actuar como un enrutador o dar soporte a protocolos tales como IPX o Reverse ARP.

Telephony Support

Esta opción, que permite dar soporte a correo de voz, fax y otros dispositivos multimedia que inteoperan con modems, viene deshabilitada en forma predeterminada.

SCSI Support

En forma predeterminada esta opción viene habilitada, pero si usted no tiene o no desea usar un disco, unidad de cinta, unidad de CD-ROM o cualquier otra unidad tipo SCSI, desactívela.

I2O Device Support

Esta opción que hace referencia a la Intelligent Input/Output (I20) architecture, viene deshabilitada en forma predeterminada.

Network Device Support

Entre las diferentes alternativas disponibles en esta sección se destacan:

  • Ethernet 10/100

  • PPP (point-to-point) support

Respecto a la primera opción, al seleccionarla aparece un listado de tarjetas de red disponibles, incluyendo entre otros, tarjetas 3COM, tarjetas EISA, VESA, PCI y controladores integrados en las tarjetas principales, y otras tarjetas ISA. Por otro lado, el soporte para protocolo PPP es necesario para permitir conexión a Internet por vía telefónica.

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.

Amateur Radio Support

Esta sección permite soporte para transmisión de datos para radio aficionados. En forma predeterminada esta opción está deshabilitada.

IrDA Support

Esta sección permite soporte para trabajar con protocolos IrDA™, relacionados con comunicaciones inalámbricas infrarojas, soportadas por la mayoría de computadores portátiles (laptops) y PDA's.

ISDN Subsystem

ISDN o RDSI como se conoce en Colombia, es un tipo especial de servicio telefónico completamente digital, disponible únicamente en las principales ciudades. Una línea RDSI permite una mejor conexión a Internet que a través de una línea telefónica convencional. Habilite esta opción si tiene interés y en su ciudad cuenta con proveedores de enlaces RDSI.

Old CD-ROM Drivers (not SCSI, not IDE)

Habilite esta opción si usted tiene una unidad de CD-ROM que no sea ni IDE/ATAPI ni SCSI, es decir, si tiene una unidad de CD-ROM antigua que se conecta a la tarjeta de sonido.

Character Devices

Bajo esta sección se define el soporte para dispositivos de caracteres, entre otros:

  • Terminales

  • Puertos seriales

  • Ratones

  • Palancas de juegos (soporte deshabilitado por omisión)

Para el ejemplo, se aceptaron los valores predeterminados.

USB Support

Habilite esta opción si su computador tiene puerto USB.

File Systems

Esta sección determina el tipo de sistemas de archivos a utilizar. Entre las opciones habilitadas en forma predeterminada se destacan entre otros:

ISO 9960 CDROM filesystem support

Para poder acceder a CDROM estándares.

/proc filesystem

Sistema de archivos virtual que proporciona información sobre el sistema operativo.

Second extended fs support

El sistema de archivos estándar de Linux

NFS filesystem support

Para interactuar con otros equipos UNIX utilizando el protocolo NFS.

Adicionalmente a estos sistemas de archivos podría resultar interesante habilitar el soporte para:

Quota support

Para poder colocar límites al uso del disco.

DOS FAT fs support

Para poder trabajar con sistemas de archivos de MS-DOS (MSDOS fs support) y de Windows 95 (VFAT fs support)

Microsoft Joliet CDROM extensions

Para poder leer CDROM en ese formato

SMB filesystem support

para poder montar sistemas de archivos de Windows for Workgroups (WfW), Windows 95/98, Windows NT y OS/2 Lan Manager. Si lo que se necesita es solamente acceder a un servidor Linux utilizando Samba no se necesita habilitar esta opción.

Finalmente, parece interesante también habilitar soporte para el Español como idioma nativo preferido al momento de montar sistemas de archivos, definiendo como predeterminado a NSL ISO 8859-1 (Latin 1).

Console Drivers

Bajo esta sección se presentan dos opciones:

  • VGA text mode

  • Video mode seleccion support

La primera de ellas, habilitada en forma predeterminada, permite utilizar Linux en modo texto en una pantalla que cumpla con el estándar VGA genérico. La segunda opción, deshabilitada en forma predeterminada, permite aprovechar algunas altas resoluciones en modo texto que podría ofrecer el BIOS.

Sound

Habilite esta opción si su computador tiene una tarjeta de sonido. Consulte la ayuda disponible.

Kernel Hacking

Esta opción, principalmente útil para hackers, permite tener cierto control sobre el sistema aún si el sistema se cae haciendo uso de la tecla de Peticiones del Sistema (SysRQ).

Compilación

Como se mencionó, no se necesita ser root para compilar el kernel. En este ejemplo se muestran los comandos a nombre del root.

  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