Creación de un kernel modular

Las instrucciones descritas en esta sección están relacionadas con la creación de un kernel modular. Si, en cambio, está interesado en crear un kernel monolítico, consulte el la sección de nombre Creación de un kernel monolítico para obtener una explicación detallada sobre los distintos aspectos relacionados con la creación e instalación de un kernel monolítico.

Los siguientes pasos le servirán de ayuda para crear un kernel personalizado para la arquitectura x86.

NotaNota
 

Este ejemplo utiliza la versión de kernel 2.4.2-0.1.21. Es posible que su versión sea distinta. Para determinar la versión del kernel, escriba el comando uname -r. Sustituya 2.4.2-0.1.21 por la versión del kernel.

  1. El paso más importante es asegurarse de que dispone de un disco de arranque de emergencia válido por si se produce un error. Si no creó un disco de arranque durante la instalación, utilice el comando mkbootdisk para crearlo ahora. El comando estándar es similar a mkbootdisk --device /dev/fd0 2.4.x, donde 2.4.x es la versión completa del kernel (como 2.4.2-0.1.21). Cuando haya terminado, pruebe el disco de arranque para comprobar que puede arrancar el sistema.

  2. Debe de tener instalados los paquetes kernel-headers y kernel-source. Ejecute los comandos rpm -q kernel-headers y rpm -q kernel-source para determinar las versiones correspondientes. Si no los ha instalado previamente, realice su instalación desde el CD 1 de Red Hat Linux o desde el sitio FTP de Red Hat FTP que se encuentra en ftp://ftp.redhat.com (puede consultar la lista de sitios espejo en la dirección http://www.redhat.com/mirrors.html). Consulte el Capítulo 17 para obtener más información sobre la instalación de los paquetes RPM.

  3. En el indicador de comandos de shell, cambie al directorio /usr/src/linux-2.4. Todos los comandos citados a partir de ahora deberán ejecutarse desde este directorio.

  4. Es importante que comience a crear el kernel conociendo bien el árbol fuente. Por tanto, se recomienda empezar por ejecutar el comando make mrproper. Este comando eliminará los ficheros de configuración y el resto de la información que pueda quedar en el árbol fuente como consecuencia de haber creado otros kernels anteriores. Si ya dispone del fichero de configuración válido (/usr/src/linux-2.4/.config) que desea utilizar, cree una copia de seguridad del mismo en otro directorio antes de ejecutar este comando y vuelva a copiarlo después de ejecutar el comando. Si utiliza un fichero de configuración existente, omita el paso siguiente.

  5. Ahora debe crear un fichero de configuración para determinar qué componentes se incluirán en el nuevo kernel.

    Si utiliza el sistema X Window, se recomienda ejecutar el comando make xconfig. Los componentes se muestran en las listas de los distintos niveles de menús y se pueden seleccionar con el ratón. Puede seleccionar Y (sí), N (no), o M (módulo). Tras elegir los componentes, pulse el botón Save and Exit para crear el fichero de configuración /usr/src/linux-2.4/.config y salir del programa Linux Kernel Configuration.

    A continuación, se describen otros métodos para realizar la configuración del kernel:

    • make config - Programa de texto interactivo. Los componentes se presentan en formato lineal y el usuario va respondiendo sucesivamente a cada uno de ellos. Este método no requiere el uso del sistema X Window y no permite que el usuario modifique una de las respuestas que ha contestado previamente.

    • make menuconfig - Programa en modo texto que utiliza menús. Los componentes se presentan en un menú de categorías y el usuario selecciona los componentes que desea de la misma manera que si utilizase el programa de instalación Red Hat Linux en modo texto. Seleccione la etiqueta del elemento que desee incluir: [*] (integrado), [ ] (excluido), <M> (módulo) o < > (con capacidad modular). Este método no requiere el uso del sistema X Window.

    • make oldconfig - Es un script no interactivo que configurará el fichero de configuración con los parámetros por defecto. Si está utilizando por defecto el kernel Red Hat, éste creará un fichero de configuración para el kernel distribuido junto con Red Hat Linux para la arquitectura. Es útil para configurar el kernel con los valores válidos por defecto que se conocen y desactivar las funciones que no desee.

    NotaNota
     

    Para utilizar kmod (consulte la la sección de nombre Carga de los módulos del kernel para obtener más información) y los módulos del kernel, debe responder Yes a kmod support y a module version (CONFIG_MODVERSIONS) support durante la configuración.

  6. Después de crear un fichero /usr/src/linux-2.4/.config, utilice el comando make dep para configurar las dependencias correctamente.

  7. Use el comando make clean para preparar el árbol fuente para la creación del kernel.

  8. El siguiente paso para crear un kernel modular consiste en editar /usr/src/linux-2.4/Makefile de modo que no tenga que sobrescribir el kernel existente. El método descrito en esta sección es el más sencillo para realizar una recuperación en el caso de producirse un contratiempo. Si está interesado en conocer otros métodos alternativos, consulte la información disponible en http://www.redhat.com/mirrors/LDP/HOWTO/Kernel-HOWTO.html o en el fichero Makefile que se encuentra en el directorio /usr/src/linux-2.4 del sistema Linux.

    Edite /usr/src/linux-2.4/Makefile y modifique la línea que empieza por EXTRAVERSION = de modo que se recupere un nombre "único" al añadir la fecha al final de la cadena. Por ejemplo, si está compilando la versión del kernel 2.4.2-0.1.21, puede añadir el indicador para que sea similar a EXTRAVERSION = -0.1.21-feb2001). Esto le permitirá disponer de forma simultánea en el sistema del kernel anterior y del kernel nuevo (versión 2.4.2-0.1.21-12feb2001).

  9. Para crear el kernel, utilice el comando make bzImage.

  10. Genere los módulos que ha configurado mediante el comando make modules.

  11. Instale los módulos del kernel (incluso si no ha creado ninguno) con el comando make modules_install. Asegúrese de escribir el carácter de subrayado (_). Con esta acción, se instalarán los módulos del kernel en la ruta del directorio /lib/modules/ y se utilizará el nombre de ruta especificado en Makefile. En el ejemplo propuesto, se correspondería con /lib/modules/2.4.2-0.1.21-12feb2001/.

  12. Si tiene un adaptador SCSI y ha convertido el controlador SCSI en modular, cree una nueva imagen initrd (consulte la la sección de nombre Creación de una imagen initrd; tenga en cuenta que, en un kernel personalizado, las razones prácticas a favor de convertir un controlador SCSI en modular son más bien limitadas). Excepto si tiene un motivo muy concreto para crear una imagen initrd, no la cree ni la añada al fichero lilo.conf.

  13. Utilice el comando make install para copiar el nuevo kernel y los archivos asociados a los directorios adecuados.

  14. Conserve el kernel original disponible para así poder arrancar el sistema si se produce un error en el nuevo kernel. Para ello, actualice el fichero /etc/lilo.conf y ejecute /sbin/lilo.

    El fichero por defecto /etc/lilo.conf es similar a lo siguiente:
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    message=/boot/message
    linear
    default=linux
    
    image=/boot/vmlinuz-2.4.2-0.1.21
            label=linux
            initrd=initrd-2.4.2-0.1.21.img
            read-only
            root=/dev/hda5
    Para agregar un nuevo kernel a LILO, copie la sección existente y modifíquela para arrancar la imagen del kernel que se acaba de crear (además de la imagen initrd si utiliza dispositivos SCSI y ha creado este tipo de imagen). Asimismo, cambie el nombre del kernel anterior a, por ejemplo, linux-antiguo. El fichero /etc/lilo.conf deberá ser similar a:
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    message=/boot/message
    linear
    default=linux
    
    image=/boot/vmlinuz-2.4.2-0.1.21-12feb2001
    label=linux
    initrd=initrd-2.4.2-0.1.21-12feb2001.img
    read-only
    root=/dev/hda5
    
    image=/boot/vmlinuz-2.4.2-0.1.21
    label=linux-antiguo
    initrd=initrd-2.4.2-0.1.21.img
    read-only
    root=/dev/hda5

  15. Para activar los cambios, ejecute el comando /sbin/lilo. Si el proceso se ha realizado sin errores, el resultado será similar a lo siguiente:
    Added linux *
    Added linux-antiguo
    El asterisco (*) después de linux significa que la sección con la etiqueta linux es el kernel por defecto que LILO arrancará.

  16. A partir de este momento, cada vez que arranque el sistema aparecerán linux y linux-antiguo como opciones de arranque de LILO.

    Para arrancar el nuevo kernel (linux), pulse la tecla Intro o espere a que LILO lo realice una vez transcurrido el tiempo de espera. Si desea arrancar el kernel antiguo (linux-antiguo), seleccione linux-antiguo y pulse Intro.

  17. Puede comenzar a probar el nuevo kernel arrancando nuevamente la máquina y prestando atención a los mensajes para asegurarse de que se ha detectado correctamente el hardware.