



(11 opiniones)
El kernel o núcleo es una de las partes esenciales de un sistema operativo. El kernel proporciona todos los servicios básicos requeridos por otras partes del sistema operativo y aplicaciones, y en complemento, se encarga de la administración de la memoria, los procesos y los discos. El kernel es independiente de la distribución Linux utilizada, de tal forma que el mismo kernel debería servir en cualquier caso. La actualización del kernel se divide en 2 partes: compilación e instalación del nuevo kernel.
En esta guía se desarrolla el ejemplo de la compilación del kernel versión 2.2.18 bajo Debian 2.1 Citius (kernel 2.0.36). Si desea compilar un kernel 2.4.x bajo un sistema con kernel 2.0.x o 2.2.x deberá consultar otros documentos que tratan específicamente sobre el tema.
De cualquier forma al final de este instructivo se presentan algunas referencias de documentos disponibles en Internet para mayor ilustración.
Hay diversas razones para querer reconstruir el kernel de Linux:
Es útil recompilar un kernel porque trabajando con kernels nuevos generalmente se obtiene:
Un sistema más rápido, estable y robusto.
Un sistema con soporte a elementos de hardware no encontrado en kernels viejos.
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 Linux que esté utilizando. Dependiendo de las circunstancias puede resultar conveniente o preferible lo uno o lo otro. Por ejemplo, si tiene un sistema 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 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.
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.
Los kernels pueden corresponder a versiones de "producción" o a versiones de "desarrollo". Las versiones 2.0.x, 2.2.x y 2.4.x son versiones de producción, por el contrario, las versiones 2.1.x y 2.3.x son versiones de desarrollo. En forma particular se tiene que, por ejemplo, la versión 2.2.17 o la versión 2.2.18 son versiones de producción, estables y para usuarios finales y las versiones 2.1.1 o 2.1.2 corresponden a versiones de desarrollo, inestables, utilizadas por desarrolladores o por ciertos usuarios que desean probar.
Importante: No utilice kernels de desarrollo a menos que usted sepa lo que está haciendo.
Varias partes de código del kernel pueden compilarse por separado en forma de módulos, dando flexibilidad al sistema. Los módulos no están enlazados directamente en el kernel, siendo necesario insertarlos en él ya sea durante el proceso de arranque o si se quiere, posteriormente, de tal forma que sólo se usan cuando se necesitan, sin utilizar innecesariamente la memoria RAM del sistema.
Importante: Hay componentes que no deben compilarse como módulos porque son esenciales para hacer posible el arranque del sistema, por ejemplo el soporte para el sistema de archivos ext2, que Linux utiliza en forma predeterminada. Otros componentes si pueden hacerlo, por ejemplo, el soporte para una cierta tarjeta de red.
Los requisitos de software necesario para compilar el kernel varian considerablemente de una versión mayor del kernel a otra, por ejemplo para compilar un kernel 2.4.x bajo un sistema con kernel 2.2.x. Si es esa su necesidad, es mejor que consulte la nota respecto a la instalación de kernels 2.4.x, en la sección de Introducción de este documento.
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 Linux que esté empleando.
Para compilar un nuevo kernel generalmente no necesitará software adicional al incluido en la distribución Linux que esté empleando, a menos que se trate de un kernel 2.4.x, caso en el cual es posible que si se lo requiera.
En cualquier caso es recomendable consultar primero el archivo README principal incluido en los fuentes del kernel a instalar bajo el directorio base linux.
Importante: En particular, para el ejercicio planteado en este documento basado en Debian 2.1 Citius, fue necesario instalar, adicionalmente al software base, el paquete bin86 para lograr el objetivo.
El tiempo necesario para compilar es muy variable, dependiendo del computador que se vaya a utilizar. En computadores recientes, por ejemplo en equipos Pentium Celeron o superiores, el proceso toma 10 minutos o menos. Tenga en cuenta que si utiliza computadores poco recientes, por ejemplo en equipos Pentium viejos, 486s y 386s el proceso puede tardar incluso varias horas.
Importante: El tiempo de compilación puede reducirse a la mitad o menos, si primero se optimiza el disco duro donde se encuentra instalado Linux, utilizando el comando hdparm. Las mejoras en velocidad de lectura/escritura en discos será mayor cuanto más nuevos sean los discos. La optimización de un disco debe realizarse con cuidado ya que existe algún riesgo de malograr los archivos contenidos en el disco. Al final se presentan algunas referencias al respecto. Una vez se consigue optimizar un disco, se configura el sistema operativo para trabajo en modo optimizado en forma permanente.
El espacio necesario para compilar el kernel varía de acuerdo a la versión del kernel a utilizar. Los fuentes del kernel 2.2.18 ocupan cerca de 92 MB, así que para este caso tomado de ejemplo sería bueno disponer de al menos unos 100 MB libres.
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.
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.
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
ya existe un vínculo o un directorio con ese nombre
al desempaquetar se sobreescriben archivos.
Luego de seleccionar el directorio de trabajo proceda a descomprimir de la siguiente forma:
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
Si optó por usar el archivo linux-2.2.18.tgz, el comando a utilizar es:
[root]# tar -zxvf linux-2.2.18.tgz
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:
Si tiene a la mano todos los datos del hardware que el kernel va a soportar: puertos, discos duros, tarjetas, etc.
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:
make config,
make menuconfig, o
make xconfig
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:
Un ejemplo de uno de los submenús expandido () se aprecia enseguida:
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ú , 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:
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,
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.
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.
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.
Esta opción viene desactivada en forma predeterminada, deshabilitando el uso de código experimental en el kernel.
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.
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.
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.
Habilite esta opción si desea que el kernel automáticamente configure algunos dispositivos periféricos.
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.
Esta sección es de vital importancia para equipos que van a operar en red. Las opciones que en forma predeterminada vienen habilitadas son:
, e
Para el ejemplo, se habilitaron adicionalmente las opciones:
, 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
, 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.
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.
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.
Esta opción que hace referencia a la Intelligent Input/Output (I20) architecture, viene deshabilitada en forma predeterminada.
Entre las diferentes alternativas disponibles en esta sección se destacan:
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.
Esta sección permite soporte para transmisión de datos para radio aficionados. En forma predeterminada esta opción está deshabilitada.
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 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.
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.
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.
Habilite esta opción si su computador tiene puerto USB.
Esta sección determina el tipo de sistemas de archivos a utilizar. Entre las opciones habilitadas en forma predeterminada se destacan entre otros:
Para poder acceder a CDROM estándares.
Sistema de archivos virtual que proporciona información sobre el sistema operativo.
El sistema de archivos estándar de Linux
Para interactuar con otros equipos UNIX utilizando el protocolo NFS.
Adicionalmente a estos sistemas de archivos podría resultar interesante habilitar el soporte para:
Para poder colocar límites al uso del disco.
Para poder trabajar con sistemas de archivos de MS-DOS (MSDOS fs support) y de Windows 95 (VFAT fs support)
Para poder leer CDROM en ese formato
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).
Bajo esta sección se presentan dos opciones:
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.
Habilite esta opción si su computador tiene una tarjeta de sonido. Consulte la ayuda disponible.
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).
Como se mencionó, no se necesita ser root para compilar el kernel. En este ejemplo se muestran los comandos a nombre del root.
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
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.
Si se habilitaron los módulos, ejecute:
[root]# make modules
o si prefiere:
[root]# make modules 1> modules-salida.txt 2>modules-errores.txt
|