Gentoo proporciona dos maneras para manejar la instalación y actualización del núcleo: la automática (con genkernel) y la manual. Aunque el método automático podría ser visto como más fácil para el usuario, hay un gran número de razones por las cuales una gran proporción de usuarios Gentoo escogen configurar su núcleo manualmente: mayor flexibilidad, menor tamaño del núcleo, tiempos de compilación más cortos, mejor experiencia didáctica, aburrimiento severo, etc. etc.
Esta guía no cubre la manera automática (con genkernel). Si prefiere usar genkernel para compilar e instalar su núcleo, diríjase a la documentación de Genkernel.
Esta guía no intenta documentar el proceso de configuración manual desde el inicio hasta el final -- el proceso de configuración depende en mayor grado en el sentido común y un grado de conocimiento técnico relativamente alto acerca de su sistema. En vez de eso, este documento introducirá los conceptos de la configuración manual y detallará los problemas más comunes que enfrentarán los usuarios.
Este documento está escrito tomando en cuenta las versiones más recientes del núcleo, para las arquitecturas de computadora más comunes. Algunos detalles pueden ser distintos para núcleos más antiguos o para arquitecturas más exóticas, pero la mayor parte del contenido seguirá siendo relevante.
En esta coyuntura, asumiremos que tiene las fuentes del núcleo Linux desempacadas en el disco duro (usualmente por ahí por /usr/src) y esperamos que conozca cómo ingresar a la herramienta de configuración menuconfig y navegar a través de su sistema de menús. Si no se encuentra ya en esta etapa, hay otros documentos disponibles para ayudarlo.
El proceso general es realmente simple: se prensentan una serie de opciones categorizadas en menús individuales y sub-menús y entonces uno selecciona el soporte de hardware y características relevantes del núcleo para su sistema.
El núcleo incluye una configuración por defecto, que es presentada la primera vez que ejecute menuconfig sobre un conjunto particular de fuentes. Los valores por defecto son generalmente amplios y con sentido común, lo cual significa que la mayoría de los usuarios solamente tendrán que hacer una pequeña cantidad de cambios a la configuración base. Si decide desctivar una opción activada por defecto, asegúrese de comprender exactamente qué hace esa opción y las consecuencias de su desactivación.
Si esta es su primera vez configurando un núcleo Linux, debe apuntar a ser algo conservador: no sea demasiado aventuroso y mientras sea posible, trate de no hacer demasiadas modificaciones a los valores por defecto. Al mismo tiempo, tome en cuenta que hay ciertas partes de la configuración que absolutamente deben afinarse a su sistema ¡solo para arrancar!
La mayoría de las opciones de configuración tienen tres estados: pueden no ser construidas, pueden ser construidas para formar parte integral del núcleo (Y) o construidas como un módulo (M). Los módulos se almacenan externamente en el sistema de archivos, mientras que los ítems integrales forman parte de la imagen del núcleo.
Hay una diferencia importante entre integrales y modulates: con pocas excepciones, el núcleo no hace intento alguno de cargar módulos externos cuando haga falta (esto se deja a cuenta del usuario). Mientras que otras partes del sistema puedan cargar módulos según demanda, se recomienda que construya las opciones de soporte de hardware y características del núcleo de manera integral. El núcleo entonces puede asegurar que la funcionalidad y soporte de hardware esten siempre disponibles cuando hagan falta.
Por supuesto que para algunas partes de la configuración, la construcción integral es un requerimiento absoluto. Por ejemplo, si su partición raíz es un sistema de archivos ext2, el sistema no va a arrancar si el soporte para ext2 fue construido como un módulo (ya que el sistema tendría que buscar en la misma partición raíz para encontrar el módulo ext2, pero no puede ver la partición raíz ¡hasta que tenga cargado el módulo de soporte ext2 cargado!).
Más allá de detectar el tipo de arquitectura del sistema, la herramienta de configuración no hace ningún intento para identificar qué hardware está presente en el sistema. Mientras que hay una configuración por defecto para algún soporte de hardware, es obligatorio encontrar y seleccionar las opciones de configuración relevantes a la configuración de hardware del sistema.
Esto simplemente requiere un conocimiento de los componentes adentro y conectados al computado, o para que identifique estos componentes. Para la mayoría de los componentes internos, necesita identificar el chipset usado en cada uno, en vez de el nombre de mercado del producto.
Existen algunas herramientas disponibles que pueden ser de ayuda. lspci (parte del paquete sys-apps/pciutils) identificará su hardware PCI y AGP, incluyendo componentes construidos en la propia tarjeta madre. lsusb (del paquete sys-apps/usbutils) identificará los dispositivos conectados a los puertos USB.
La situación es algo confusa por la variación de grados de estandarización en el mundo del hardware. A no ser que haya una verdadera desviación de las normas, los discos IDE "sencillamente funcionarán". al igual que los teclados y ratón PS/2 o USB. Obtendrá soporte para una pantalla básica VGA. Sin embargo, algunos dispositivos, tales como adaptadores ethernet prácticamente no tienen estandarización, así que tendrá que identificar el chipset ethernet y seleccionar el soporte apropiado de hardware para la tarjeta específica para poder obtener acceso a la red.
Adicionalmente, mientras que algunas cosas apenas funcionan con la configuración por defecto, tal vez tenga que seleccionar opciones más especializadas para obtener el potencial pleno de su sistema. Por ejemplo, si no activa el soporte para el chipset IDE apropiado, los discos IDE correrán muy lentamente.
Al igual que el soporte de hardware, también hace falta pensar en términos de las características del software requeridos del núcleo. Un importante ejemplo de este tipo de característica es soporte para sistemas de archivos: hará falta seleccionar soporte para los sistemas de archivos usados en el disco duro, al igual que cualquier otro sistema de archivo utilizado en almacenamiento externo (por ejemplo, VFAT en pen drives USB).
Otro ejemplo común es la funcionalidad avanzada de redes. Si desea hacer algún tipo de enrutamiento o trabajar con un cortafuego, debe asegurar que los ítems relevantes de la configuración del núcleo estará incluidos.
Ahora que hemos introducido los conceptos, podremos empezar a identificar el hardware y navegar a través de los menús de configuración, seleccionando las opciones requeridas para el núcleo del sistema.
El resto de esta página tratará de clarificar algunas áreas comunes de confusión y proporcionar consejos para evitar problemas comunes que los usuarios a menudo encuentran. ¡Buena suerte!
3. Problemas y áreas de confusión comunes
La mayoría de sistemas de escritorio modernos vienen con dispositivos de almacenamiento (discos duros y discos CD/DVD) en un bus Serial ATA, en vez del más antiguo bus tipo IDE (cable plano).
El soporte SATA en Linux está implementado en una capa llamada libata, el cual se siente debajo del subsistema SCSI. Por esta razón los manejadores SATA se encuentran en la sección de configuración de manejadores SCSI. Además, los dispositivos de almacenamiento serán tratado como dispositivos SCSI, lo cual significa que también se requiere soporte para discos y cdroms SCSI. El disco duro SATA será nombrado (por ejemplo) /dev/sda y el disco CD/DVD SATA será nombrado (por ejemplo) /dev/sr0.
Aunque la mayoría de estos manejadores son para controladores SATA, libata no fue diseñado para ser específica a SATA. Todos los manejadores IDE comunes también serán porteados a libata en el futuro cercano y en ese punto, las cosideraciones antes mencionadas aplicarán tmbién a usuarios de IDE.
Listado de Código 3.1: Opciones de configuración para libata |
Device Drivers --->
SCSI device support --->
<*> SCSI device support
<*> SCSI disk support
<*> SCSI CDROM support
SCSI low-level drivers --->
<*> Serial ATA (SATA) support
Seleccione el chipset de las opciones listadas debajo de
la opción anterior
|
A pesar de la introducción de SATA, los dispositivos IDE todavía son muy comunes y muchos dependen de ellos. IDE es un tecnología bastante genérica y como tal, Linux soporta casi todos los controladores IDE tal cual sin seleccionar opciones específicas a determinados controladores.
Sin embargo, IDE es una tecnología vieja y en su encarnación Programmed Input/Output, no logra proporcionar las tasas de transferencia requeridas para acceso rápido a dispositivos modernos de almacenamiento. El manejador genérico IDE está limitado a usar el modo de transferencia PIO, lo cual resulta en tasas de transferencia lentas y un uso significativamente alto del CPU mientras la data es transferida desde/hacia el disco.
A no ser que esté tratando con un sistema anterior a 1995, el controlado IDE también soportará un modo alternativo de transferencia conocido como Direct Memory Access (DMA). El modo DMA es mucho más rápido y la utilización del CPU casi no se nota mientras se efectúan transferencias. Si sufre de un desempeño realmente pobre y está usando un disco IDE, es muy posible que no esté usando DMA.
Nota: Como se ha mencionado anteriormente, libata está también disponible para discos IDE. Si estás usando libata, entonces todos tus discos, incluyendo los discos IDE, deberán usar DMA. Para hacer esto no necesitas más comprobaciones ni configuraciones. |
Si no estás usando libdata para tus discos IDE, entonces necesitarás comprobarlo para usar el DMA y activarlo.
Listado de Código 3.2: Revisando si el DMA está activado en su disco IDE |
# hdparm -d /dev/hda
/dev/hda:
using_dma = 0 (off)
|
Para activar DMA en dispositivos IDE devices, debe activar la opción de configuración del controlador IDE.
Listado de Código 3.3: Opciones de configuración para controladores IDE |
Device Drivers --->
ATA/ATAPI/MFM/RLL support --->
<*> ATA/ATAPI/MFM/RLL support
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
[*] PCI IDE chipset support
[*] Generic PCI bus-master DMA support
Seleccione el chipset de las opciones listadas debajo de
la opción anterior
|
Controladores de anfitrión USB
El USB es un bus ampliamente adoptado para conectar periféricos externos al computador. Una de las razones por el éxito de USB es que es un protocolo estandarizado, sin embargo, los dispositivos controladores de anfitrión (HCDs) USB implementado en el computador anfitrión varían un poco. Existen tres tipos distintos:
La mayoría de los sistemas tendrán uno de los dos tipos de interfaz: EHCI (USB 2.0) además de UHCI o OHCI (USB 1.1). Es importante que selecciones ambos tipos presentes en su sistema. Mientras que todos los dispositivos USB 2.0 son compatibles con USB 1.1, una gran proporción de dispositivos USB (aún los que se fabrican actualmente) estan basados en el interfaz USB 1.1 - ¿porqué un ratón USB podría necesitar más que 1,5 megabits/segundo?
Si no selecciona las opciones relevantes que corresponde a los tipos de HCD USB disponibles en su sistema, puede experimentar puertos USB 'muertos': se enchufa un dispositivo, pero ni prende ni responde de forma alguna.
Un excelente truco usando lspci (del paquete sys-apps/pciutils) hace que sea relativamente sencillo detectar cuáles HCDs estan disponibles en su sistema. Sin tomar en cuenta el controlador FireWire que también aparece, es sencillo determinar que mi sistema requiere soporte OHCI y EHCI:
Listado de Código 3.4: Usando lspci para detectar el tipo de HCD |
# lspci -v | grep HCI 00:02.0 USB Controller: nVidia Corporation CK804 USB Controller (rev a2) (prog-if 10 [OHCI]) 00:02.1 USB Controller: nVidia Corporation CK804 USB Controller (rev a3) (prog-if 20 [EHCI]) 01:0b.0 FireWire (IEEE 1394): Agere Systems FW323 (rev 61) (prog-if 10 [OHCI]) |
Listado de Código 3.5: Configuración de HCDs USB |
Device Drivers --->
USB support --->
<*> Support for Host-side USB
--- USB Host Controller Drivers
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
Selecciones los HCD presentes en su sistema, o los 3 si no está seguro.
|
Sistemas Multiprocesadores, Hyper-Threading y de Doble Núcleo
Muchos sistemas usan procesadores múltiples, aunque no siempre en maneras inmediatamente obvias.
En todos estos casos debe seleccionar las opciones apropiadas del núcleo para obtener el óptimo desempeño de estos equipos.
Listado de Código 3.6: Configuración para multi-procesamiento |
Processor type and features ---> [*] Symmetric multi-processing support Seleccione la opción anterior si está en cualquier tipo de sistema multi-procesador [*] SMT (Hyperthreading) scheduler support Seleccione la opción anterior si está usando un CPU Intel con Hyper-Threading [*] Multi-core scheduler support (NEW) Seleccione la opción anterior si el CPU es de doble núcleo |
Soporte para memoria alta en x86
Debido a limitaciones en el espacio de direcciones de 32 bits de la arquitectura x86, un núcleo con la configuración por defecto sólo puede soportar hasta 896mb RAM. Si su sistema tiene más memoria, solo serán visibles los primeros 896mb, a no ser que active el soporte para memoria alta.
Nota: Esta limitación es específica a la arquitectura x86 (IA32). Las demás arquitecturas soportan naturalmente grandes cantidades de memoria, sin requerir afinamientos en la configuración. |
El soporte para la memoria alta no está activada por defecto porque introduce un pequeño costo en términos de desempeño. No se distraiga por esto, ¡esta carga es insignificante en comparación con el aumento de desempeño por disponer de la memoria adicional!
Listado de Código 3.7: Activando el soporte para memoria alta en un x86 |
Processor type and features --->
High Memory Support --->
(X) 4GB
( ) 64GB
Escoja la opción de 4GB, a no ser que tenga más que 4GB de memoria RAM.
|
4. Otra documentación sobre la configuración del núcleo
Hasta ahora solamente hemos discutido conceptos generales y problemas específicos relacionados con la configuración del núcleo, sin entrar en detalles precisos (¡estos detalles estan para ser descubiertos!). Sin embargo, otros partes de la documentación Gentoo proporcionan detalles especializados para las materias a la mano.
Podrá darse cuenta que estos documentos son de utilidad al configurar áreas específicas, pero si es un principiante en la configuración del núcleo, no sea demasiado aventurado. Comienze echando a andar un sistema básico ya que siempre puede volver más tarde para agregar soporte para audio, impresión, etc.
Cambios de Configuración que no tienen efecto
Es muy común que los usuarios hagan algún cambio de configuración, pero que hacen un pequeño error en el proceso a partir de este punto. Ellos arrancan con una imagen de núcleo que no es la recien reconfigurada, observan que el problema que intentaban solucionar todavía existe y concluyen que el cambio de configuración no era la solución del problema.
El proceso de compilar e instalar núcleos está más allá de este documento, debe referirse a la Guía de Actualización del Núcleo para orientación general. En pocas palabras, el proceso es: configuración, compilación, montar /boot (si no está montada ya), copiar la nueva imagen del núcleo y reiniciar la máquina. Si salta algunos de estos pasos finales, ¡los cambios realizados no tomarán efecto!
Es posible verificar que el núcleo con el que arrancó es igual al núcleo compilado en el disco duro examinando la fecha y hora de la compilación. Asumiendo que su arquitectura es x86 y las fuentes del núcleo estan instaladas en /usr/src/linux:
Listado de Código 5.1: Verificando si arrancó del núcleo modificado |
# uname -v #4 SMP PREEMPT Sat Jul 15 08:49:26 BST 2006 El comando anterior muestra la fecha y hora en que fue compilado el núcleo del cual arrancó. # ls -l /usr/src/linux/arch/i386/boot/bzImage -rw-r--r-- 1 dsd users 1504118 Jul 15 08:49 /usr/src/linux/arch/i386/boot/bzImage El comando anterior muestra la fecha y la hora en que se compiló por última vez la imagen del núcleo en el disco duro. |
Si las horas de los dos comandos anteriores difieren por más de 2 minutos, indica que se ha equivocado en la reinstalación del núcleo y ¡no ha arrancado con la imagen del núcleo que creía!
Los módulos no son cargados automáticamente
Como mencionamos antes, en este mismo documento, el sistema de configuración del núcleo esconde un grn cambio de comportamiento cuando uno selecciona compilar un componente como módulo (M) en vez de integrarlo (Y). Vale la pena repetir esto porque muchos usuarios caen en esta trampa.
Al seleccionar un componente como integrado, el código forma parte de la imagen del núcleo (bzImage). Cuando el núcleo necesita usar ese componente lo puede inicializar y cargar automáticamente sin intervención por parte del usuario.
Cuando selecciona un componente como módulo, el código se construye como un archivo de módulo del núcleo aparte instalado en el sistema de archivos. En general, cuando el núcleo necesita usar ese componente, ¡no podrá! Con algunas excepciones, el núcleo no hace esfuerzo alguno para cargar estos módulos - esa tarea queda en manos del usuario.
De manera tal que, si construye el soporte para la tarjeta de red como un módulo y entonces encuentra que no tiene acceso a la red, es probable que el módulo no esté cargado - debe hacerlo manualmente o configurar su sistema para cargarlo automáticamente al arrancar.
A no ser que tenga razones para hacerlo de otra manera, ahórrese algo de tiempo construyendo estos componentes de manera integrada en la imagen del núcleo, para que el núcleo pueda hacer todo automáticamente.
El contenido de este documento está registrado bajo los términos de la licencia Creative Commons - Reconocimiento / Compartir Igual