Configurar y compilar el kernel Linux

La mayoría de distribuciones vienen con un kernel configurado y compilado. Sin embargo esto significa que usted depende de su distribución para actualizar el kernel. Si desea actualizar el kernel a una versión más moderna sin tener que esperar a que su distribución la publique en el repositorio; o simplemente precisa activar alguna opción no activa por defecto en su kernel, siga leyendo.

En este tutorial usted aprenderá a descargar las fuentes del kernel, configurar el kernel y compilarlo. Debe tener en cuenta que en este tutorial sólo se le enseñará como configurar el kernel; en ningún momento se hará un repaso por todas las opciones del kernel, eso es tarea del lector.

1.- Descargar las fuentes

  • Desde el repositorio: Es posible que en el repositorio de su distribución exista la posibilidad de bajarse las últimas fuentes, si es así tal vez prefiera optar por usar su gestor de paquetes.
  • Descargar un tar.bz con las fuentes: En ftp.kernel.org puede bajarse un paquete comprimido con las fuentes del kernel. Si desea obtener las últimas fuentes, las podrá encontrar en la rama testing.
  • Directamente desde git: La única forma de acceder a las últimas modificaciones es clonar los repositorios del kernel. Para ello precisará tener instalado git y ejecutar el comando cd /usr/src && git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6.
Para más información, man tar.
En el momento de escribir este tutorial, la última versión disponible es linux-2.6.38-rc3. Y será esta la versión que se seguirá en el tutorial.

Una vez tenga las fuentes, deberá descomprimirlas con cd /usr/src && tar -xvfj linux-2.6.38-rc3.tar.bz2. Tal vez también quiera modificar el enlace simbólico con ln -s /usr/src/linux-2.6.38-rc3 /usr/src/linux.

Para facilitar la tarea, al menos hasta que se familiarice, puede usar el archivo de configuración (.config) de su kernel actual; e ir eliminando aquellas opciones que no precise. Para hacer esto simplemente copie el fichero .config ubicado en el directorio de su kernel en uso a /usr/src/linux-2.6.38-rc3. A continuación ejecute el comando make oldconfig dentro del directorio /usr/src/linux-2.6.38-rc3, comenzara a salir información sobre el proceso y posteriormente se parará en espera de una respuesta por su parte, llegado a este momento pulse ctrl+c para interrumpir el proceso y continúe leyendo el tutorial.

2.- Configurar el kernel
Para configurar el kernel tan solo necesita abrir un terminal, dirigirse a /usr/src y ejecutar make menuconfig, es decir, cd /usr/src && make menuconfig. Le aparecerá un menú en modo texto desde donde podrá decidir que compilar o no, dentro del propio kernel o como un módulo que podrá ser cargado por este.

A continuación os dejo con algunas capturas de pantalla:
* Captura de pantalla del menú principal. Puede moverse a través de él usando las teclas de navegación. Una vez colocado sobre una opción puede incluirla (tecla Y), no incluirla (tecla N) o convertirla en un módulo (tecla M). Presionando la tecla intro puede acceder al submenu, indicado como --->; para retroceder al menú anterior debes pulsar dos veces la tecla ESC.

*  El submenu General setup.

* Desde el submenu Processor type and features usted puede configurar el tipo de procesador para obtener el mejor rendimiento, el soporte para multiprocesamiento simétrico -SMP- (HyperThreading)...

* Si en cualquier momento duda sobre el significado de una entrada, puede recurrir a la ayuda del kernel pulsando la tecla ? o sobre < Help >.

* El menú ayuda, además de una descripción, en algunos casos le recomiendan activar, o no, dicha opción. En este caso, por ejemplo, se le recomienda compilar la opción Single-depth WCHAN output. La línea roja no esta presente en la ayuda del kernel, es una edición posterior.

* Captura del submenu de selección de la familia del procesador. Si tiene un procesador Intel i, seleccione la opción Core2/newer Xeon.

* Desde el submenu Bus options (PCI etc.) usted podrá activar el soporte para dispositivos PCI, PCI Express, soporte hotplug...

* El menú Device Drivers es el más extenso de todos. Desde él deberá compilar el soporte para las controladoras de discos IDE, SATA, SCSI; controladores de red ethernet, wifi, usb, firewire... soporte para impresoras, webcams... 

* Como su propio nombre indica, en File systems puede añadir soporte para los distintos tipos de sistemas de fichero, incluyendo el soporte para FAT, NTFS y CDs (ISO 9600  y UDF). 

Copiar la configuración que esta viendo no es buena idea. La configuración del kernel es especifica de cada PC y usuario. Este caso, por ejemplo, es la configuración de mi servidor virtual. Por ello la mayoría de opciones no están compiladas.

Una vez tenga su kernel configurado, deberá salvar la configuración (Save an Alternate Configuration File) como .config y salir.

3.- Compilar el kernel y los módulos
Asegurese que está en /usr/src/linux. Lo puede hacer ejecutando el comando pwd, el cual le devolverá el directorio donde se encuentra actualmente. A continuación ejecute el comando make. Si todo va bien, comenzará la compilación del kernel y deberá ver algo similar a lo siguiente:

agd-server linux # make
scripts/kconfig/conf --silentoldconfig Kconfig
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  CC      arch/x86/kernel/asm-offsets.s
  GEN     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CC      init/main.o
  CHK     include/generated/compile.h
  CC      init/version.o
  CC      init/do_mounts.o
  LD      init/mounts.o
  CC      init/noinitramfs.o
  LD      init/built-in.o
  AS      arch/x86/crypto/aes-x86_64-asm_64.o
  AS      arch/x86/crypto/twofish-x86_64-asm_64.o
  LD      arch/x86/crypto/aes-x86_64.o
  LD      arch/x86/crypto/twofish-x86_64.o
  LD      arch/x86/crypto/salsa20-x86_64.o
...
...
...
  VOFFSET arch/x86/boot/voffset.h
  AS      arch/x86/boot/compressed/head_64.o
  OBJCOPY arch/x86/boot/compressed/vmlinux.bin
  LZO     arch/x86/boot/compressed/vmlinux.bin.lzo
  MKPIGGY arch/x86/boot/compressed/piggy.S
  AS      arch/x86/boot/compressed/piggy.o
  LD      arch/x86/boot/compressed/vmlinux
  ZOFFSET arch/x86/boot/zoffset.h
  AS      arch/x86/boot/header.o
  CC      arch/x86/boot/version.o
  LD      arch/x86/boot/setup.elf
  OBJCOPY arch/x86/boot/setup.bin
  OBJCOPY arch/x86/boot/vmlinux.bin
  BUILD   arch/x86/boot/bzImage
Root device is (254, 2)
Setup is 13980 bytes (padded to 14336 bytes).
System is 2869 kB
CRC 3a61d933
Kernel: arch/x86/boot/bzImage is ready  (#2)
agd-server linux #

Por último debe de compilar los módulos con make modules_install.

4.- Instalar la nueva imagen del kernel
El nuevo kernel compilado se encuentra en /usr/src/linux/arch/x86/boot/bzImage, debe de copiarlo a /boot: cp /usr/src/linux/arch/x86/boot/bzImage /boot/kernel-linux-2.6.38-rc3. Por último solo queda editar grub para agregar el nuevo kernel.

2 comentarios:

#
bixo dijo...

make[1]: *** [silentoldconfig] Interrupción


tengo este problema y me empieza a preguntar todo lo que ya configure :S

#
Unknown dijo...

Prueba con:
1.- Hacer una copia del .config
2.- make mrproper
3.- Restaurar la copia del .config
4.- make oldnoconfig
5.- make && make modules && make modules_install

Saludos

Publicar un comentario

Recuerde que puede utilizar algunos códigos HTML como <b>para negrita</b>, <i>para cursiva</i> y <a href="URL">para enlaces</a>.