Site Navigation:
 
 

8. Kernel de Linux

Esta sección cubre los cambios e información importante respecto del kernel 2.6.18 en el que se basa Fedora Core 6. El kernel 2.6.18 incluye:

8.1. Versión

Fedora Core puede incluir parches adicionales con mejoras, corrección de errores y características adicionales. Por esta razón, el kernel de Fedora Core puede no ser línea a línea equivalente al así llamado kernel de vainilla del sitio web de kernel.org:

http://www.kernel.org/

Para obtener una lista de estos parches, descargue el paquete RPM con las fuentes y ejecute el siguiente comando contra éste:

rpm -qpl kernel-<versión>.src.rpm

8.2. Log de Cambios

Para obtener un registro de los cambios al paquete, ejecute el siguiente comando:

rpm -q --changelog kernel-<versión>

Si necesita una versión amigable al usuario del log de cambios, vaya a http://wiki.kernelnewbies.org/LinuxChanges. Un diff corto y uno completo del kernel está disponible en from http://kernel.org/git. La versión de kernel de Fedora está basada en el árbol de Linus.

Las personalizaciones hechas para la versión de Fedora están disponibles en http://cvs.fedora.redhat.com .

8.3. Sabores del Kernel

Fedora Core 6 incluye los siguientes kernels construídos:

  • Kernel nativo, para usar en la mayoría de los sistemas. Las fuetnes configuradas están disponibles en el paquete kernel-devel-<version>.<arch>.rpm.

  • kernel-PAE para usar en sistemas con x86 de 32 bit con > 4GB de RAM, o con CPUs que tengan la característica "NX (no ejecutar)". Este kernel da soporte a sistemas monoprocesador y multiprocesadores.

  • Kernel virtual invitado para usar con el paquete emulador de Xen. Las fuentes configuradas se encuentran disponibles en el paquete kernel-xen-devel-<version>.<arch>.rpm.

  • Kernel kdump para usar con las capacidades kexec/kdump. Las fuentes configuradas están disponibles en el paquete kernel-kdump-devel-<version>.<arch>.rpm.

Puede instalar las cabeceras del kernel para todos los sabores de los kernel al mismo tiempo. Los archivos son instalados en el árbol /usr/src/kernels/<version>-[xen|kdump]-<arch>/. Use el siguiente comando:

su -c 'yum install kernel-{PAE,xen,kdump}-devel'

Seleccione uno o más de estos sabores, separados por comas y sin espacios, según corresponda. Ingrese la clave de root cuando se le pregunte.

[Nota]El kernel por defecto provee SMP

No hay un kernel SMP separado disponible en Fedora Core 6 en i386, x86_64 y ppc64. El soporte multiprocesador se provee en forma nativa en el kernel.

[Nota]Soporte para PowerPC en el Kernel

No hay soporte para Xen o kdump en la arquitectura PowerPC en Fedora Core 6. PowerPC de 32 bit tiene un kernel SMP separado.

8.4. Reporte de Errores

Vaya a http://kernel.org/pub/linux/docs/lkml/reporting-bugs.html para obtener información sobre cómo reportar errores en el kernel de Linux. Puede también usar http://bugzilla.redhat.com para informar errores que sean específicos a Fedora.

8.5. Libros de texto Genéricos a continuación

Muchos de los tutoriales, ejemplos y libros de textos acerca del desarrollo del kernel de Linux asumen que las fuentes del kernel están instalados en el directorio /usr/src/linux/. Si hace un enlace simbólico, como se muestra más abajo, debe poder usar esos materiales de aprendizaje con los paquetes de Fedora Core. Instale los fuentes de kernel apropiados, como se mostró antes, y luego ejecute el siguiente comando:

su -c 'ln -s /usr/src/kernels/<versión>.<release>-<arch> /usr/src/linux'

Ingrese la clave de root cuando se le pregunte.

8.6. Preparación para Desarrollo del Kernel

Fedora Core 6 no incluye el paquete kernel-source provista por versiones anteriores dado que sólo se requiere el paquete kernel-devel para construir módulos externos. Las fuentes configuradas están disponibles, como se describe en la sección sabores del kernel.

[Nota]Las instrucciones se refieren al Kernel Actual

Para simplificar las situientes directivas, asumimos que quiere configurar las fuentes del kernel para ser el mismo que el kernel actualmente en ejecución. En los pasos más abajo, la expresión <version> se refiere a la versión de kernel mostrado por el comando: uname -r.

Los usuarios que necesiten acceso a las fuentes del kernel original de Fedora Core los pueden encontrarn en el paquete .src.rpm del kernel. Para crear un árbol de fuentes desde este archivo, realice los siguientes pasos:

[Nota]No construya paquetes como super usuario (root)

La construcción de paquetes como superusuario es inherentemente peligroso y no es necesario, incluso para el kernel. Estas instrucciones le permitirán instalar las fuentes del kernel como un usuario normal, Muchos sitios de información general se refieren al directorio /usr/src/linux en sus instrucciones del kernel. Si usa estas instrucciones, simplemente sustituya ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>.

  1. Prepare un entorno de construcción de paquetes RPM en su directorio de inicio (home). Ejecute los siguientes comandos:

    su -c 'yum install rpmdevtools yum-utils' 
    rpmdev-setuptree
  2. Ingrese la clave de root cuando se le pregunte.

  3. Descargue el archivo kernel-<version>.src.rpm . Active los repositorios de fuentes apropiados, tales como Core, Updates o Testing, con la opción -e :

    yumdownloader -e core-source -e updates-source --source kernel
  4. Ingrese la clave de root cuando se le pregunte.

  5. Instale kernel-<version>.src.rpm usando el comando:

    rpm -Uvh kernel-<versión>.src.rpm
  6. Este comando escribe los contenidos del RPM en ${HOME}/rpmbuild/SOURCES y filename class="directory">${HOME}/rpmbuild/SPECS

    [Nota]Espacio Necesario

    El proceso de construcción del kernel completo puede requerir varios gigabytes de espacio extra en el sistema de archivo que contenga su directorio home.

  7. Prepare las fuentes del kernel usando los comandos:

    cd ~/rpmbuild/SPECS 
    rpmbuild -bp --target $(uname -m) kernel-2.6.spec
  8. El árbol de códigos fuentes del kernel se ubica en el directorio ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch> .

    Las configuraciones para los kernels específicos que vienen en Fedora Core 6 están en el directorio ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>/configs/. Por ejemplo, el archivo de configuración i686 se llama filename class="directory">~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>/configs/kernel-<version>-i686.config

    cp configs/<archivo-config-deseado> .config
  9. Cada kernel tiene un nombre basado en su número de versión. Este es el valor que muestra el comando uname -r. El nombre del kernel está definido por las primeras cuatro líneas del archivo Makefile del kernel. El Makefile ha sido cambiado para generar un kernel con un nombre diferente del que está actualmente en ejecución. Para que sea aceptado por el kernel en ejecución, un módulo debe ser compilado para el kernel con el nombre correcto. Para hacer esto, debe editar el archivo Makefile del kernel.

    Por ejemplo, si el comando uname -r devuelve la cadena 2.6.17-1.2345_FC6 , cambie la definición de EXTRAVERSION con esto:

    EXTRAVERSION = -prep 

    a esto:

    EXTRAVERSION = -1.2345_FC6

    Es decir, sustituya todo desde el guion final en adelante.

  10. Ejecute el siguiente comando:

    make oldconfig

    A continuación, proceda como lo hace siempre.

[Nota]Construcción de los RPMs de Binarios del Kérnel

Normalmente, los kernel para Fedora se contruyen usando el utilitario rpmbuild y un archivo de especificaciones .spec. Sus resultados pueden variar si usa un kernel construído con make rpm.

8.7. Construcción de los Módulos del Kérnel Unicamente

No se requiere un arbol de fuentes expandido para construir un módulo de kernel, tal como su propio controlador de dispositivo, contra el kernel actualmente en uso. Sólo se necesita el paquete kernel-devel para construir módulos externos. Si no lo seleccionó durante la isntalación, use Pirut para instalarlo, vaya a AplicacionesAgregar/Quitar Programas o use yum para instalarlo. Ejecute el siguiente comando para instalar el paquete kernel-devel usando yum.

su -c 'yum install kernel-devel' 

Por ejemplo, para construir el módulo foo.ko, crear el siguiente Makefile en el directorio que contenga el archivo foo.c :

obj-m := foo.o 

KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

Emita el comando make para construir el módulo foo.ko .