Seguramente habrás encontrado muchos artículos en la red donde explican paso a paso el proceso de descargar un nuevo kernel de kernel.org, configurarlo, compilarlo e instalarlo para actualizar el kernel de tu distribución GNU/Linux con una versión más moderna y no genérica, sino que lo puedas configurar para que se adapte mejor a tus necesidades u optimizarlo. Pero lo cierto es que en esos tutoriales no hablan demasiado de las opciones del menú de configuración, simplemente se limitan a decirte que las dejes todas por defecto, con lo que se consigue un kernel funcional pero muy genérico (similar a los que incluyen las distros en sus repositorios), sin ningún tipo de optimización. Por tanto, si quieres alguna modificación te las tienes que arreglar tú para buscar la información necesaria. El motivo es lógico, y es que cada computadora es un mundo y por tanto la configuración de una específica no tiene porqué funcionar en otra máquina diferente e incluso los usuarios también tienen necesidades diferentes.
Pero entiendo que una ayuda sobre las opciones que puedes ver en el menú de configuración núnca viene mal. Y eso es precisamente lo que vamos a hacer en este tutorial, dejando un poco de lado el procedimiento de descarga del nuevo kernel, compilación e instalación, gestión de módulos, parcheado, e incluso de las diferentes formas de configurarlo que existen (config, menuconfig, kconfig,...). Insisto, no se trata de explicar el proceso, simplemente hacer ver a los nuevos usuarios que lo desconocen qué tienen delante de sus ojos cuando configuran un kernel.
Items del menú de configuración:
Aunque las opciones del menú puedan variar en función de la versión del kernel, yo voy a usar uno bastante actual para describir los diferentes menús que nos podemos encontrar:
- 64-bit kernel: aquí podemos seleccionar el soporte para los 64-bit en nuestra arquitectura, si no lo marcamos funcionará como un sistema de 32-bit. Como sabes, tanto las nuevas ISA AMD64 (o EM64T), IA-64 (Itanium) SPARC, PPC, ARM64, etc., ya cuentan con soporte para los 64-bit y por tanto deberemos activarla. En caso de estar usando procesadores más clásicos o retro, como los pertenecientes a ISAs IA-32, ARM (arm, armhf), PPC32, etc.
- General setup: aquí se aglutinan algunas de las opciones generales de configuración de nuestro kernel. Por ejemplo, puedes seleccionar la Kernel Compression o compresión que tendrá la imagen del kernel (lz4,...). También puedes usar opciones de compilación cruzada o Cross-compiler, es decir, si por ejemplo queremos construir o compilar un kernel para una arquitectura diferente a la nativa de nuestra máquina, debemos usar estas opciones. Imagina que quieres construir un kernel Linux para funcionar en un ARM desde tu PC que es un x86, entonces la compilación cruzada es lo que lo hace posible, de lo contrario constuirá un kernel compatible con la arquitectura nativa. Si lo deseas también puedes especificar un nombre de máquina o Hostname, si deseas marcar un Initial RAM, si quieres que se construya con características para sistemas embebidos con Embedded system, si queremos características de seguridad como SLAB, etc.
- Enable loadable module: activa o desactiva la carga de módulos dinámica, es decir, si está desactivado funcionará como un kernel monolítico. Es decir, todos los controladores estarán integrados en la imagen del kernel, obteniendo un núcleo bastante grande y pesado, pero consiguiendo que todas sus funcionalidades estén ya cargadas desde el inicio. En cambio, si lo dejamos activo conseguimos algo similar al microkernel, es decir, un núcleo con los controladores imprescindibles y la capacidad de cargar o descargar módulos de forma dinámica durante el uso del sistema según se necesite. Por ejemplo, si tienes un controlador USB cargado como parte del kernel, entonces tendrás funcionalidad USB durante el arranque del sistema, y si lo tienes como módulo, éste debe cargarse para que el dispositivo USB funcione durante la ejecución del sistema operativo.
- Enable block layer: si quieres que tu sistema posea manejo de dispositivos de bloques, entonces habilitalo. Es decir, para dispositivos que trabajan con bloques de datos o en paralelo como las unidades de almacenamiento (discos duros,...), etc. Debes saber que en el mundo Unix se diferencia entre dispositivos de bloques y de caracteres (serie).
- Processor type: otra parte del menú muy importante, ya que permite optimizar el código del kernel que se va a construir para una arquitectura o modelo de CPU específico, lo que hará que se ejecute de una forma más fluida y mejor seleccionando tu microprocesador desde el submenú Processor family. Además, también podrás activar o desactivar otras tecnologías y características como DMA o acceso directo a memoria que debería estar activo para la mayoría de sistemas modernos, evitando así sobrecarga de la CPU en los accesos a memoria que provienen del E/S. SMT se refiere a las tecnologías de procesamiento de hilos o threads en paralelo, como lo es Intel HT (HyperThreading). Otras características que encontrarás aquí son el soporte para EFI, en aquellos sistemas que no usan BIOS. Y también Maxim number CPU, o el número de CPUs que tiene el sistema en caso de tener un sistema multiprocesador.
- Power Manager: es aquí donde podrás configurar algunos parámetros como los que permitirán que el sistema pueda hibernar, ponerse en modo suspensión, etc., es decir, los relativos a la gestión de energía. Aquí tendrás también las opciones de los gobernadores que funcionarán en CPU Frequency para que modifiquen la frecuencia en función de la carga de trabajo y que ahorren energía cuando se pueda. Y en CPU Idle se podrá configurar también otras funciones referentes al volaje el apagado o encendido de núcleos desocupados, etc. Los modelos comerciales de Intel y AMD suelen incluir marcas registradas que hacen referencia a estas funcionalidades como Intel SpeedStep, AMD Power Now!, etc.
- Bus options: encontrarás las opciones de configuración de los buses soportados y sus características.
- Execute file format: puedes seleccionar los ejecutables o binarios que el sistema soportará, por lo general son los ELF y ELF64. A pesar de que GNU GCC sigue generando por defecto binarios con nombre a.out cuando escribimos y compilamos algún programa... pero en realidad ese formato ya está en desuso y a pesar de su nombre son ELF.
- Networking support: protocolos, dispositivos y tecnologías de red que queremos. Por ejemplo, podemos marcar la interfaz de red (tarjeta de red), los protocolos de comunicacion en Networking options, etc.
- Device driver: controladores o drivers de dispositivos que incluirá nuestro kernel. Deberemos marcar los que queramos que se carguen dentro del kernel como los de disco (SATA, IDE, etc.) y que son necesarios para la carga del sistema, o como módulos aquellos que no son imprescindibles para que el sistema inicie (tarjeta de sonido, webcam, HID, Wifi,...).
- Firmware: aquí podemos configurar algunas otras opciones del firmware del sistema, BIOS, etc.
- File system: también bastante interesante, ya que aquí activaremos los FS o sistemas de archivos que estarán soportados. Por ejemplo, ZFS, btrfs, ext3, ext4, ReiserFS, etc.
- Kernel hacking: aquí podemos realizar algunas modificaciones del kernel muy avanzadas, como las famosas combinaciones de teclas Magic SysRq Key que podemos usar para recuperar el sistema de ciertos eventos. También tendremos opciones de desarrollo como la depuración del kernel (debbugging), etc.
- Security options: muy de actualidad ahora que se da tanta importancia a la seguridad. Encontrarás multitud de opciones para mejorar la seguridad del kernel. Por ejemplo, puedes elegir entre SELinux y AppArmor, sería posible activar ambos pero no lo recomiendo porque podría haber conflictos. También existen otras alternativas a estos sistemas de protección como puedes comprobar, e incluso otros sistemas de protección de desbordamingo, protección del kernel, etc.
- Cryptographic: son también otras opciones de seguridad, ya que se refieren a los modelos de cifrado y algoritmos que estarán soportados (AES, DES, ICE, Blowfish, RSA, DSA, etc.).
- Virtualization: encontrarás multitud de opciones para activar o desactivar características y tecnologías para la virtualización completa, la paravirtualización, contenedores, etc.
- Library routines: y bueno, por último, el menú de rutinas de bibliotecas...
Por cierto, si te encuentras con características marcadas como New o Experimental quiere decir que se han agregado a la versión que estás configurando recientemente y no estaban presentes en la versión anterior y que se están desarrollando (pueden no ser demasiado estables o funcionales) respectivamente. En principio, a menos que sepas lo que haces, no te recomiendo que incluyas características experimentales para que el nucleo sea estable.