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 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!
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
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!).
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 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
|
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)
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
|
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)
|
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
|
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.
-
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 de Enrutación IPv6
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
ocpiones 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 trabajao 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.
5.
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 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
# 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 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
|