En esta página
- 1 nota preliminar
- 2 Creación de un paquete .deb del kernel
- 2.1 Instalar los paquetes necesarios para la compilación del kernel
- 2.2 Descargar las fuentes del núcleo
- 2.3 Aplicar parches a las fuentes del kernel (opcional)
- 2.4 Configurar el núcleo
- 2.5 Construir el núcleo
- 2.6 Instalar el nuevo kernel
- 3.1 Instalar los paquetes necesarios para la compilación del kernel
- 3.2 Descargar las fuentes del núcleo
- 3.3 Aplicar parches a las fuentes del kernel (opcional)
- 3.4 Configurar el núcleo
- 3.5 Compile e instale el kernel
- 3.6 Pasos posteriores a la instalación
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