Gentoo Logo

Guía de Configuración del Núcleo en Gentoo Linux

Contenido:

1.  Introducción

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.

2.  Conceptos de Configuración

Lo básico

El proceso general es realmente simple: se presentan 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 desactivar 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!

Inclusión vs modular

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 estén 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!).

Soporte de Hardware

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.

Características del Núcleo

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.

Listo?

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

Los discos SATA son SCSI

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 consideraciones antes mencionadas aplicarán tambié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

Chipsets IDE y DMA

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 de la CPU mientras los datos son transferidos 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 de la 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:

  • UHCI es el Interfaz Universal Controlador de Anfitriones o Universal Host Controller Interface, en inglés. Soporta USB 1.1 y usualmente lo encontramos en tarjetas madre basados en un chipset VIA o Intel.
  • OHCI es el Interfaz Abierto Controlador de Anfitriones o Open Host Controller Interface, en inglés. Soporte USB 1.1 y se encuentra usualmente en tarjetas madre basadas en un chipset Nvidia o SiS.
  • EHCI es el Interfaz Controlador de Anfitriones Extendido o Extended Host Controller Interface, en inglés. Es el único controlador de anfitriones común que soporta USB 2.0 y puede ser encontrado en cualquier computador que soporte USB 2.0.

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) están 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 están 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 Multiprocesador, Hyper-Threading y de Múltiples Núcleos

Muchos sistemas usan procesadores múltiples, aunque no siempre en maneras inmediatamente obvias.

  • Muchas CPUs de Intel soportan una tecnología que ellos llaman hyper-threading, que hace que el sistema vea la CPU como si fueran dos procesadores lógicos.
  • Actualmente, la mayoría de las CPUs Intel/AMD contienen varios procesadores físicos dentro del mismo chip. Se conocen como procesadores multinúcleo.
  • Algunos sistema de alto desempeño tienen de hecho múltiples procesadores físicos instalados en tarjetas madres especializadas para proporcionar un aumento de desempeño significativo sobre un sistema con un procesador. Probablemente sabrá si tiene uno de estos sistemas, ya que no tienen nada de barato.

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 una CPU Intel con Hyper-Threading
 [*]   Multi-core scheduler support (NEW)
 Seleccione la opción anterior si la CPU es de múltiples núcleos
Power management and ACPI options  --->
 [*] ACPI (Advanced Configuration and Power Interface) Support
 La opción anterior no solo habilita características de gestión de
 energía, además podría ser un requisito para que todas las CPUs de su sistema
 estén disponibles

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 solo 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.  Notación corta para la configuración del núcleo

Introducción

Cuando lea sobre las configuraciones del núcleo, verá a menudo que los ajustes se describen como CONFIG_<algo>. Esta notación corta es lo que realmente utiliza internamente el núcleo, y es lo que encontrará en el fichero de configuración del núcleo (bien esté en /usr/src/linux/.config o en el fichero autogenerado /proc/config.gz file). Desde luego, el hecho de utilizar la notación corta no sería de muy útil si no se puede traducir a la localización real en la configuración del núcleo. Afortunadamente, la herramienta make menuconfig le permite hacer precisamente esto.

Traduciendo CONFIG_FOO a la localización real de la configuración

Suponga que necesita habilitar CONFIG_TMPFS_XATTR, lance el menú de configuración del núcleo (make menuconfig) y teclee /. Esto abrirá la caja de búsqueda. En esta caja, escriba CONFIG_TMPFS_XATTR (puede incluso omitir la parte CONFIG_). El siguiente listado de código muestra el resultado de esta búsqueda.

Listado de Código 4.1: Resultado de buscar CONFIG_TMPFS_XATTR

Symbol: TMPFS_XATTR [=n]
Type  : boolean
Prompt: Tmpfs extended attributes
  Defined at fs/Kconfig:138
  Depends on: TMPFS [=y]
  Location:
    -> File systems
      -> Pseudo filesystems
        -> Virtual memory file system support (former shm fs) (TMPFS [=y])
  Selected by: TMPFS_POSIX_ACL [=n] && TMPFS [=y]

Esta salida muestra cantidad de información interesante.

Entrada Descripción
Symbol: TMPFS_XATTR [=n] Esto identifica la entrada de la configuración del núcleo que está buscando. También le indicate que el ajuste no está habilitado actualmente ([=n]).
Type: boolean El ajuste que buscó es un booleano (lo que significa que puede habilitarlo o deshabilitarlo). Algunos ajustes son números o cadenas de caracteres.
Prompt: Tmpfs extended attributes Este es el texto que encontrarán en make menuconfig y como tal, es la entrada que estaba buscando en un formato que es legible mejor por los humanos.
Depends on: TMPFS [=y] Antes de que pueda ver esta entrada, necesitará tener habilitado el ajuste CONFIG_TMPFS. En este caso, esto ya se ha realizado (de ahí el [=y]), sin embargo, si este no es el caso, necesitará en primer lugar buscar (y habilitar) CONFIG_TMPFS.
Location: ... Esta es la localización en la estructura make menuconfig en la cual se puede encontrar el ajuste. Recuerde, el ajuste que está buscando es Tmpfs extended attributes.
Selected by: TMPFS_POSIX_ACL [=n] && TMPFS [=y] Si los ajustes descritos aquí están ambos habilitados (en nuestro caso, el primero no lo está), entonces, CONFIG_TMPFS_XATTR se activará automáticamente y no podrá deshabilitarlo.

Con esta información, debería poder traducir cualquier requerimientos CONFIG_* con los que se encuentre. Resumiendo, esto significa que

  1. necesita habilitar los ajustes en el campo Depends on
  2. navegar a dónde Location: le indica
  3. activar el valor indicado por Prompt:

5.  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 están 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. Comience echando a andar un sistema básico ya que siempre puede volver más tarde para agregar soporte para audio, impresión, etc.

  • La Guía ALSA detalla las opciones de configuración necesarias para dar soporte a una tarjeta de sonido. Note que ALSA es una excepción al esquema de no construir las cosas como módulos: el ALSA es de hecho más sencillo de configurar cuando los componentes son modulares.
  • El artículo wiki Bluetooth (en inglés), detalla las opciones que necesita para utilizar dispositivos bluetooth en su sistema.
  • La Guía del enrutador IPv6 en Gentoo describe cómo configurar el núcleo para enrutar usando el esquema de direccionamiento de redes de próxima generación.
  • Si va a usar el manejador gráfico propietario de nVidia para obtener mejor desempeño gráfico, la Guía nVidia lista las opciones que deben y no deben seleccionarse en el sistema.
  • Entre otras cosas, la Guía de Administración de Energía explica la configuración del núcleo para ajusta la frecuencia de la CPU y para activar la funcionalidad de suspensión e hibernación.
  • Si trabaja con un sistema PowerPC, el PUF (FAQ) PPC tiene algunas secciones acerca de la configuración del núcleo.
  • La Guía de Impresión Gentoo lista las opciones del núcleo necesarias para soportar la impresión en Linux.
  • La Guía USB detalla la configuración necesaria para utilizar dispositivos USB comunes como teclados/ratones, dispositivos de almacenamiento e impresoras.

6.  Solucionando problemas

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 recién 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 están instaladas en /usr/src/linux:

Listado de Código 6.1: Verificando si arrancó del núcleo modificado

# uname -v
#4 SMP PREEMPT Sat Jul 15 08:49:26 BST 2006
La orden 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
La orden 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 las dos órdenes anteriores difieren en más de dos 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.



Imprimir

Página actualizada 16 de diciembre, 2012

Sumario: Este documento tiene la finalidad de presentar conceptos acerca de la configuración manual del núcleo y detallar algunos de las fallas más comunes de configuración.

Daniel Drake
Autor

Curtis Napier
Contribuyente

Justin Robinson
Contribuyente

Łukasz Damentko
Contribuyente

Jonathan Smith
Editor

Joshua Saddler
Editor

John Christian Stoddart
Traductor

Manuel Peral González
Traductor

Enrique Barbeito Garcia
Traductor

José María Alonso
Traductor

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.