GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo compilar un kernel:al estilo Debian

En esta página

  1. 1 nota preliminar
  2. 2 Creación de un paquete .deb del kernel
    1. 2.1 Instalar los paquetes necesarios para la compilación del kernel
    2. 2.2 Descargar las fuentes del núcleo
    3. 2.3 Aplicar parches a las fuentes del kernel (opcional)
    4. 2.4 Configurar el núcleo
    5. 2.5 Construir el núcleo
    6. 2.6 Instalar el nuevo kernel
  • 3 Creación de un núcleo de forma tradicional
    1. 3.1 Instalar los paquetes necesarios para la compilación del kernel
    2. 3.2 Descargar las fuentes del núcleo
    3. 3.3 Aplicar parches a las fuentes del kernel (opcional)
    4. 3.4 Configurar el núcleo
    5. 3.5 Compile e instale el kernel
    6. 3.6 Pasos posteriores a la instalación
  • 4 enlaces
  • Cada distribución tiene algunas herramientas específicas para construir un kernel personalizado a partir de las fuentes. Este artículo trata sobre la compilación de un kernel en un sistema Debian (Etch). Describe cómo crear un kernel personalizado utilizando las últimas fuentes de kernel no modificadas de www.kernel.org (kernel estándar) para que sea independiente de los kernels proporcionados por su distribución. También muestra cómo parchear las fuentes del kernel si necesita funciones que no están allí.

    ¡No emito ninguna garantía de que esto funcione para usted!

    1 nota preliminar

    Describiré dos formas de compilar un nuevo kernel. Usando el primer método, terminará con un paquete kernel .deb que se puede instalar en el sistema y que puede compartir con otros e instalar en otros sistemas Debian Etch.

    El segundo método es compilar un kernel de la manera "tradicional". De esta manera funciona en cualquier distribución de Linux, pero por supuesto, no termina con un paquete kernel .deb.

    2 Creación de un paquete .deb del kernel

    Este capítulo muestra cómo construir un kernel y terminar con un paquete .deb que puede instalar y compartir con otros.

    2.1 Instalar los paquetes necesarios para la compilación del kernel

    Primero actualizamos nuestra base de datos de paquetes:

    apt-get update

    Luego instalamos todos los paquetes necesarios como este:

    apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential

    2.2 Descargar las fuentes del kernel

    A continuación, descargamos nuestro kernel deseado a /usr/src. Vaya a www.kernel.org y seleccione el kernel que desea instalar, p. linux-2.6.21.3.tar.bz2 (puede encontrar todos los núcleos 2.6 aquí:http://www.kernel.org/pub/linux/kernel/v2.6/). Luego puedes descargarlo a /usr/src así:

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    Luego descomprimimos las fuentes del kernel y creamos un enlace simbólico de Linux al directorio de fuentes del kernel:

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    2.3 Aplicar parches a las fuentes del kernel (opcional)

    A veces, necesita controladores para hardware que no es compatible con el nuevo kernel de forma predeterminada, o necesita soporte para técnicas de virtualización o alguna otra tecnología de última generación que aún no ha llegado al kernel. En todos estos casos, debe parchear las fuentes del kernel (siempre que haya un parche disponible...).

    Ahora supongamos que ha descargado el parche necesario (lo llamo parche.bz2 en este ejemplo) a /usr/src. Así es como lo aplica a las fuentes de su kernel (aún debe estar en el directorio /usr/src/linux):

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

    El primer comando es solo una prueba, no hace nada a sus fuentes. Si no muestra errores, puede ejecutar el segundo comando que realmente aplica el parche. ¡No lo hagas si el primer comando muestra errores!

    También puede aplicar preparches de kernel a sus fuentes de kernel. Por ejemplo, si necesita una función que solo está disponible en el kernel 2.6.22-rc3, pero aún no se han publicado las fuentes completas para este kernel. En su lugar, está disponible un parche-2.6.22-rc3.bz2. Puede aplicar ese parche a las fuentes del kernel 2.6.21, pero no al kernel 2.6.21.1 o 2.6.21.2, etc. Esto se explica en http://kernel.org/patchtypes/pre.html:

    Los parches previos son el equivalente a las versiones alfa para Linux; viven en los directorios de prueba en los archivos. Deben aplicarse utilizando la utilidad patch(1) al código fuente de la versión completa anterior con un número de versión de 3 partes (por ejemplo, el parche previo 2.6.12-rc4 debe aplicarse a las fuentes del kernel 2.6.11, no , por ejemplo, 2.6.11.10.)

    Entonces, si desea compilar un kernel 2.6.22-rc3, debe descargar las fuentes del kernel 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) en el paso 3 en lugar del kernel 2.6.21.3!

    Así es como aplica el parche 2.6.22-rc3 al kernel 2.6.21:

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    2.4 Configurar el Kernel

    Es una buena idea usar la configuración de su núcleo de trabajo actual como base para su nuevo núcleo. Por lo tanto copiamos la configuración existente a /usr/src/linux:

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    Luego corremos

    make menuconfig

    que abre el menú de configuración del núcleo. Vaya a Cargar un archivo de configuración alternativo y elija .config (que contiene la configuración de su núcleo de trabajo actual) como archivo de configuración:

    Luego navegue por el menú de configuración del kernel y haga sus elecciones. Cuando haya terminado y seleccione Salir, responda la siguiente pregunta (¿Desea guardar su nueva configuración del kernel?) con Sí:

    2.5 Construir el kernel

    Para compilar el núcleo, ejecute estos dos comandos:

    make-kpkg clean
    fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

    Después de --append-to-version=, puede escribir cualquier cadena que lo ayude a identificar el kernel, pero debe comenzar con un signo menos (-) y no debe contener espacios en blanco.

    Ahora sea paciente, la compilación del kernel puede tomar algunas horas, dependiendo de la configuración de su kernel y la velocidad de su procesador.

    2.6 Instalar el nuevo kernel

    Después de la compilación exitosa del kernel, puede encontrar dos paquetes .deb en el directorio /usr/src.

    cd /usr/src
    ls -l

    En mi sistema de prueba, se llamaban linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (que contiene el kernel real) y linux-headers-2.6.21.3-custom_2.6.21.3- custom-10.00.Custom_i386.deb (que contiene los archivos necesarios si desea compilar módulos kernel adicionales más adelante). Los instalo así:

    dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
    dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb

    (Ahora puede incluso transferir los dos archivos .deb a otros sistemas Debian Etch e instalarlos allí exactamente de la misma manera, lo que significa que no tiene que volver a compilar el núcleo allí).

    Eso es todo. El archivo de configuración del gestor de arranque GRUB /boot/grub/menu.lst se ha modificado automáticamente y se ha creado un ramdisk para el nuevo kernel en /boot.

    Ahora reinicie el sistema:

    shutdown -r now

    En el indicador de arranque, seleccione su nuevo núcleo (debe estar seleccionado de forma predeterminada):

    Si todo va bien, debería aparecer el nuevo núcleo. Puede verificar si realmente está usando su nuevo kernel ejecutando

    uname -r

    Esto debería mostrar algo como

    2.6.21.3-custom

    Si el sistema no se inicia, reinícielo y seleccione su antiguo núcleo en el indicador de inicio. Ahora puede volver a intentar compilar un kernel que funcione. No olvide eliminar la(s) estrofa(s) del kernel que no funciona de /boot/grub/menu.lst.

    3 Construir un kernel de forma tradicional

    Este capítulo describe un enfoque diferente que se puede utilizar en cualquier sistema Linux (aparte de detalles como la creación de un ramdisk o la actualización del gestor de arranque). Por supuesto, no terminará con un paquete kernel .deb.

    3.1 Instalar los paquetes necesarios para la compilación del kernel

    Primero actualizamos nuestra base de datos de paquetes:

    apt-get update

    Luego instalamos todos los paquetes necesarios como este:

    apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

    3.2 Descargar las fuentes del kernel

    A continuación, descargamos nuestro kernel deseado a /usr/src. Vaya a www.kernel.org y seleccione el kernel que desea instalar, p. linux-2.6.21.3.tar.bz2 (puede encontrar todos los núcleos 2.6 aquí:http://www.kernel.org/pub/linux/kernel/v2.6/). Luego puedes descargarlo a /usr/src así:

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    Luego descomprimimos las fuentes del kernel y creamos un enlace simbólico de Linux al directorio de fuentes del kernel:

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    3.3 Aplicar parches a las fuentes del kernel (opcional)

    A veces, necesita controladores para hardware que no es compatible con el nuevo kernel de forma predeterminada, o necesita soporte para técnicas de virtualización o alguna otra tecnología de última generación que aún no ha llegado al kernel. En todos estos casos, debe parchear las fuentes del kernel (siempre que haya un parche disponible...).

    Ahora supongamos que ha descargado el parche necesario (lo llamo parche.bz2 en este ejemplo) a /usr/src. Así es como lo aplica a las fuentes de su kernel (aún debe estar en el directorio /usr/src/linux):

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

    El primer comando es solo una prueba, no hace nada a sus fuentes. Si no muestra errores, puede ejecutar el segundo comando que realmente aplica el parche. ¡No lo hagas si el primer comando muestra errores!

    También puede aplicar preparches de kernel a sus fuentes de kernel. Por ejemplo, si necesita una función que solo está disponible en el kernel 2.6.22-rc3, pero aún no se han publicado las fuentes completas para este kernel. En su lugar, está disponible un parche-2.6.22-rc3.bz2. Puede aplicar ese parche a las fuentes del kernel 2.6.21, pero no al kernel 2.6.21.1 o 2.6.21.2, etc. Esto se explica en http://kernel.org/patchtypes/pre.html:

    Los parches previos son el equivalente a las versiones alfa para Linux; viven en los directorios de prueba en los archivos. Deben aplicarse utilizando la utilidad patch(1) al código fuente de la versión completa anterior con un número de versión de 3 partes (por ejemplo, el parche previo 2.6.12-rc4 debe aplicarse a las fuentes del kernel 2.6.11, no , por ejemplo, 2.6.11.10.)

    Entonces, si desea compilar un kernel 2.6.22-rc3, debe descargar las fuentes del kernel 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) en el paso 3 en lugar del kernel 2.6.21.3!

    Así es como aplica el parche 2.6.22-rc3 al kernel 2.6.21:

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    3.4 Configurar el Kernel

    Es una buena idea usar la configuración de su núcleo de trabajo actual como base para su nuevo núcleo. Por lo tanto copiamos la configuración existente a /usr/src/linux:

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    Luego corremos

    make menuconfig

    que abre el menú de configuración del núcleo. Vaya a Cargar un archivo de configuración alternativo y elija .config (que contiene la configuración de su núcleo de trabajo actual) como archivo de configuración:

    Luego navegue por el menú de configuración del kernel y haga sus elecciones. Cuando haya terminado y seleccione Salir, responda la siguiente pregunta (¿Desea guardar su nueva configuración del kernel?) con Sí:

    3.5 Construir e instalar el kernel

    Para compilar el núcleo, ejecute estos comandos:

    make all
    make modules_install
    make install

    Ahora sea paciente, la compilación del kernel puede tomar algunas horas, dependiendo de la configuración de su kernel y la velocidad de su procesador.

    3.6 Pasos posteriores a la instalación

    El nuevo kernel ya está instalado, pero aún necesitamos un ramdisk para nuestro nuevo kernel (¡de lo contrario, lo más probable es que el sistema no arranque!), y debemos informarle al cargador de arranque GRUB sobre nuestro nuevo kernel.

    Primero, hacemos esto:

    depmod 2.6.21.3
    apt-get install yaird

    Luego creamos un ramdisk con el siguiente comando:

    mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3

    La configuración de GRUB es muy fácil en Debian Etch. Todo lo que tenemos que hacer es correr

    update-grub

    Esto detectará el nuevo kernel y ramdisk y actualizará /boot/grub/menu.lst por nosotros.

    Ahora reinicie el sistema:

    shutdown -r now

    En el indicador de arranque, seleccione su nuevo núcleo (debe estar seleccionado de forma predeterminada). Si todo va bien, debería aparecer el nuevo núcleo. Puede verificar si realmente está usando su nuevo kernel ejecutando

    uname -r

    Esto debería mostrar algo como

    2.6.21.3

    Si el sistema no se inicia, reinícielo y seleccione su antiguo núcleo en el indicador de inicio. Ahora puede volver a intentar compilar un kernel que funcione. No olvide eliminar la(s) estrofa(s) del kernel que no funciona de /boot/grub/menu.lst.

    4 Enlaces

    • Debian:http://www.debian.org
    • Los archivos del kernel de Linux:http://www.kernel.org

    Debian
    1. Cómo compilar un kernel de Linux en el siglo XXI

    2. Construyendo kernels de Linux a la manera de Debian

    3. Cómo cambiar la imagen de perfil en Debian 10

    4. ¿La mejor manera de compilar un kernel para un procesador I7?

    5. ¿Cómo verificar HZ en la terminal?

    Cómo instalar la alternativa de Winamp Qmmp en Debian 10

    Cómo cambiar el nombre de host en Debian 10

    Cómo editar el archivo Hosts en Debian

    Cómo instalar el último kernel en Debian 11 y derivados

    Cómo instalar la última versión de MySQL 8 en Debian 11

    Cómo instalar Linux Kernel 5.15 en Debian 11