Guía de Configuración del Núcleo en Gentoo Linux
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
|
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 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
|
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
|
Sistemas Multiprocesadores, Hyper-Threading y de Doble Núcleo
Muchos sistemas usan procesadores múltiples, aunque no siempre en
maneras inmediatamente obvias.
-
Muchos CPUs de Intel soportan una tecnología que ellos llaman hyper-threading,
que hace que el sistema vea el CPU como si fueran dos procesadores
lógicos.
-
Algunos de los CPUs más recientes de Intel/AMD CPUs de ehcho
consisten en múltiples procesadores dentro de un solo paquete,
conocidos como procesadores de doble nú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
[*] SMT (Hyperthreading) scheduler support
[*] Multi-core scheduler support (NEW)
Power management and ACPI options --->
[*] ACPI (Advanced Configuration and Power Interface) Support
|
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
|
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 cofiguració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
- necesita habilitar los ajustes en el campo Depends on
- navegar a dónde Location: le indica
- 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.
-
La Guía Bluetooth
detalla las opciones necesarias para usar 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 del 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
# 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
|
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.
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logo y nombre de Gentoo.
|