 
 
 
 
 
 
 
  
 Next: LILO
 Up: Personalización y compilación del
 Previous: Actualización del núcleo
     Índice General 
Habiendo enumerado los pasos para la actualización del núcleo en el
sistema, vamos a abocarnos a una de las etapas quizás mas complicadas
del proceso.
Un detalle muy importante a tener en cuenta a la hora de compilar un
núcleo, es que se deben tener instalados en el sistema los paquetes de
desarrollo. El núcleo Linux está programado en casi su totalidad en C,
por lo tanto se debe tener instalados la biblioteca C de desarrollo y
el compilador de dicho lenguaje.
Dependiendo de la distribución que se utiliza, el método de
instalación de los paquetes difiere un poco. Dejando de lado el
formato de paquetes y la distribución, se debe revisar si los paquetes
gcc y libc6-dev se
encuentran instalados, estos paquetes siempre tienen un nombre similar
en cualquier distribución.
Existen 3 formas de configurar las opciones y características a
incluir en el núcleo, una es usando un programa de línea de comandos,
que línea a línea va preguntando las diferentes opciones, este método
era el que se utilizaba hace algunos años, los demás métodos son mas
agradables. El segundo método es mediante el uso de una interfaz de
texto, pero a pantalla completa, con uso de la biblioteca
ncurses, si se quiere utilizar este método, se deben tener
instalados en el sistema dicha biblioteca (normalmente se instala por
defecto), cuyo paquete generalmente se denomina libncurses.
El tercer y último método es mediante el uso de una interfaz gráfica
en las X; este método utiliza las bibliotecas Tcl/Tk, que
también normalmente se instalan por defecto en el sistema.
El primer método es el que se utilizaba con las primeras versiones del
núcleo, como se puede observar en la figura
11.1, no es muy amigable pero a veces
puede resultar útil cuando no se tiene disponible una interfaz gráfica
ni las bibliotecas ncurses. Estando en el directorio del código
fuente del núcleo, se ejecuta el siguiente comando:
root@maquina:/usr/src/linux# make config
Figura 11.1:
Configurando el núcleo con la interfaz de línea de comandos
|  | 
 
Siempre hay que tener en cuenta el usuario que se está utilizando en
esta tarea, si bien el compilar un núcleo no requiere de utilizar el
usuario administrador, dependiendo del directorio donde esté alojado
el árbol de fuentes será o no necesario usar la cuenta root.
Como generalmente el directorio donde se aloja el código fuente del
núcleo es /usr/src, se necesitará usar la cuenta de
administrador, a menos que dicho directorio posea permisos especiales
para algún otro usuario del sistema.
El segundo método mencionado corresponde al uso de la interfaz de
texto a pantalla completa, como se ve en la figura
11.2. Este método se usará en el
resto del curso.
Esto se obtiene ejecutando el siguiente comando:
root@maquina:/usr/src/linux# make menuconfig
Figura 11.2:
Interfaz de texto a pantalla completa
|  | 
 
El tercer método utiliza una interfaz gráfica en las X (figura
11.3). Es el método mas práctico,
siempre y cuando se disponga de las X, claro está. Por esa razón hemos
seleccionado el anterior método para las demás figuras, aunque se debe
saber que los tres métodos poseen los mismos contenidos, solo cambia
la manera de desplegar la información.
Este tercer método se obtiene ejecutando desde una terminal X lo siguiente:
root@maquina:/usr/src/linux# make xconfig
Figura 11.3:
Interfaz gráfica para configurar el núcleo
|  | 
 
Una vez presentados los métodos de configuración del núcleo, nos toca
seleccionar las opciones y características que el nuevo núcleo
incluirá. Lo que siempre se recomienda al agregar opciones en el
núcleo, es que aquellas opciones que tengan la posibilidad de ir como
módulos, que lo hagan. Con esto, obtendremos un núcleo mas pequeño, y
los módulos que se han compilado se irán cargando y descargando
automáticamente, a medida que se necesiten activar ciertas
funcionalidades, y luego ya no se necesiten. Al tener menos cantidad
de código en memoria, no sólo se produce un ahorro de RAM (que es
prácticamente insignificante en estos días ahorrar unos 100k de RAM),
sino que lo mas importante es el tener menos posibilidades que algo
falle. El sentido común dice que un núcleo de 400Kb en memoria mas
200Kb de módulos no cargados tendrá menos posibilidades de falla que el
mismo núcleo, pero con sus 600Kb completos en memoria.
Cómo saber cual función debería ir en módulo y cual en el núcleo? Lo
que se recomienda es tener en cuenta la necesidad del uso de cada
funcionalidad del núcleo para realizar esta decisión. Por ejemplo, una
máquina que posee discos rígidos IDE, los va a necesitar usar en todo
el tiempo que esté encendido el equipo (salvo raras ocasiones),
entonces el soporte para discos IDE debería ir en el núcleo y no como
un módulo, ya que de ir como módulo, estaría siempre cargado. Un
servidor de red necesitará el manejador de la tarjeta de red siempre
activo, entonces conviene compilarlo en el núcleo, pero el uso del
módem de dicho equipo es muy esporádico, en este caso el manejador del
módem o los puertos serie podría ir como módulos. También hay que
tener en cuenta algo importante: el núcleo necesita saber como manejar
un disco rígido para poder iniciar todo el sistema (si el sistema está
almacenado en un disco rígido, como normalmente ocurre), si se compila
el soporte de discos rígidos (cualquiera sea el tipo) como módulo, el
núcleo necesitará poder manejar el disco rígido al iniciar el equipo
para poder cargar el módulo para poder manejar el disco
rígido11.7, y obviamente este tipo de casos causan
problemas.
Resumiendo, hay dos casos en los cuales una funcionalidad del núcleo
no debería ser compilada como núcleo:
- La funcionalidad en cuestión es esencial para el correcto
  arranque del sistema.
- Dicha funcionalidad va a utilizarse en todo momento del
  funcionamiento del sistema.
Para los demás casos es conveniente compilar como módulo. El sistema
se encargará de cargar el módulo cuando se necesite, y cuando ya no se
use, se descargará para liberar memoria.
Cuando se ejecuta el comando make menuconfig se presenta una
serie de secciones donde se agrupan las diferentes capacidades del
núcleo, esta lista que sigue proporciona una breve explicación de los
contenidos de cada una de estas secciones11.8:
- Code maturity level options
- Se presenta una única opción, al
  activarla, será posible activar aquellas funcionalidades
  experimentales que tenga el núcleo, generalmente esto no es
  recomendable cuando se está compilando un núcleo para algún servidor
  de producción, a menos que se tenga la certeza de que tal o cual
  opción es estable y funciona bien (o sea imprescindible).
- Loadable module support
- Las opciones que se incluyen en esta
  sección tienen que ver con el manejo de los módulos del núcleo. En
  algunos casos no será necesario o no se podrá tener módulos,
  entonces se pueden desactivar. En este método de configuración del
  núcleo, aquellas opciones del mismo que sea posible compilar como
  módulo tendrán la casilla de selección a la izquierda de esta forma:
  < >, cuando se llega a alguna opción con este tipo de casilla
  de selección, oprimiendo  se la selecciona para compilarse
  dentro del núcleo, si se presiona se la selecciona para compilarse
  dentro del núcleo, si se presiona se la seleccionará para
  compilarse como un módulo. se la seleccionará para
  compilarse como un módulo.
- Processor type and features
- Dentro de esta sección
  encontraremos opciones de optimización del núcleo para el tipo de
  procesador que se posea. Con cada nueva serie de procesadores,
  características nuevas van siendo disponibles para ciertas
  funciones, lo que aprovecharlas es interesante para aumentar el
  desempeño general del sistema. El núcleo Linux soporta también
  equipos con mas de un procesador, en caso de estar compilando el
  núcleo para un equipo de este tipo, en esta sección se debe activar
  la opción Symmetric multi-processing support para sacar el
  máximo provecho.
- General setup
- Como su nombre lo indica, esta sección contiene
  opciones de configuración general del núcleo, entre ellas se
  encuentran opciones especificando la marca y el modelo del
  chipset de la placa madre del equipo, así como también si el
  núcleo utilizará el sistema de administración de energía que provee
  el BIOS, el formato en el cual el núcleo será compilado, si se
  soportarán dispositivos PCMCIA, etc.
- Memory Technology Devices (MTD)
- Esta sección en nueva de los
  núcleos de la serie 2.4.x, posee una opción para dar soporte a los
  dispositivos de discos en memoria, para poder manejar sistemas de
  archivos de estado sólido en dispositivos embebidos. Normalmente
  esta opción no se utilizará.
- Parallel port support
- Dentro de esta sección se encuentra la
  opción que activa el soporte para el puerto paralelo. Generalmente
  utilizaremos el puerto paralelo si en la máquina se tendrá alguna
  impresora de puerto paralelo instalada, alguna unidad de disco Zip,
  o cualquier otra unidad de disco por puerto paralelo (grabadoras de
  CD-R, por ejemplo) o en el caso de utilizar un cable paralelo para
  conectarse con otra máquina. Se debe tener en cuenta que esta opción
  se refiere solamente al soporte de base para todos aquellos
  dispositivos que utilicen el puerto paralelo, en otras secciones se
  debe después confirmar el soporte individual para aquellos
  dispositivos específicos.
- Plug and Play configuration
- Hace unos años se ha impuesto como
  estándar una norma para periféricos de tal modo que no tengan que
  ser configurados sus parámetros (IRQs, direcciones de E/S, etc.)
  manualmente, sino que el sistema lo pueda manejar lo mas
  convenientemente posible, de esta forma, el sistema operativo podría
  lidiar con los conflictos y solucionar los problemas que puedan
  surgir, liberando al usuario de estas tareas que a veces suelen ser
  complicadas de solucionar. Este estándar se conoce como
  Plug&Play (o abreviado, PnP), y aunque inicialmente los
  dispositivos PnP no funcionaban muy bien, hoy en día es mas común
  ver este tipo de periféricos que los otros. El núcleo Linux tiene
  soporte para estos dispositivos mediante la opción dentro de esta
  sección. Además, se cuenta con un paquete de software llamado
  isapnptools que es muy útil para configurar los antiguos
  dispositivos PnP ISA (normalmente, los módems).
- Block devices
- En esta sección se presentan opciones para dar
  soporte a varios tipos dispositivos de bloques, incluyendo unidades
  de discos flexibles, discos IDE por puerto paralelo, discos en
  memoria RAM, y otros mas.
- Multi-device support (RAID and LVM)
- Esta sección contiene
  opciones de configuración que muchas veces se utilizan en equipos
  servidores. RAID es una norma que sirve para generar arreglos de
  múltiples discos de manera de obtener redundancia de información y
  evitar problemas de corrupción de datos en el caso de que algún
  disco del arreglo tenga una falla. RAID tiene varios modos de
  funcionamiento, generalmente en los servidores se utilizan placas
  controladoras de discos RAID (soporte de hardware) que funcionan en
  forma transparente y el sistema operativo no se da cuenta, sin
  embargo el núcleo Linux da la posibilidad de poder utiliza discos
  comunes como discos RAID (soporte por software) teniendo de esta
  manera un elemento mas de seguridad a bajo costo. LVM es otro método
  de combinación de discos, pero para la generación de volúmenes o
  grupos de volúmenes de lógicos, cuyo tamaño puede variar en tiempo
  de corrida del sistema, sin tener que reiniciar ni parar servicios.
  LVM no se utiliza para dar redundancia de datos, sino para combinar
  varios discos (de distintos tipos) y utilizarlos como si fuera un
  gran disco grande.
- Networking options
- En esta sección se encuentran las opciones
  de soporte base de redes. Se podrán activar los soportes de varios
  protocolos, con sus opciones específicas, el mas común en estos días
  es el protocolo TCP/IP, uno de los protocolos que se utiliza
  en Internet. Otra opción bastante novedosa en los núcleos, es la
  opción QoS (Quality of Service) la cual se utiliza para definir los
  algoritmos de planificación de paquetes de red, pudiendo partir un
  enlace en varios sub-canales por decirlo de alguna manera, y de esta
  forma poder asignar cierto ancho de banda a diferentes clientes.
  Tener en cuenta que esta sección no se trata acerca de soporte a
  periféricos de red, sino a protocolos, para tener soporte de una
  placa de red en especial, se debe activar en otra sección.
- Telephony Support
- En esta sección se da soporte a los
  dispositivos VoIP (Voice over IP), que se utilizan para hablar por
  teléfono a través de redes de datos, en vez de redes de telefonía.
  Estos dispositivos cada vez se están viendo con mas frecuencia, quien
  sabe, en unos años quizás podremos hablar al otro lado del mundo sin
  tener que pagar altísimos costos.
- ATA/IDE/MFM/RLL support
- Aquí se da soporte a los discos IDE,
  sean discos rígidos, flexibles, CD-ROMs, etc. También hay varias
  opciones para especificar la marca de controladora de disco que se
  posee, y otros detalles para mejorar la performance. El núcleo Linux
  puede manejar sin problemas los nuevos discos con UDMA.
- SCSI support
- También existe soporte para los dispositivos SCSI,
  en esta sección están las opciones para definir los tipos de
  dispositivos SCSI que se dará soporte, mas otras opciones de
  control. Un ejemplo común para esta sección es el soporte para las
  unidades de discos Zip por puerto paralelo, En realidad estas
  unidades trabajan con la norma SCSI, y es por eso que parte de las
  opciones que se necesitan para poder hacer funcionar estos
  periféricos, se encuentran en esta sección.
- IEEE 1394 (FireWire) support
- FireWire es una nueva clase de bus
  de datos, de alta velocidad que normalmente se utiliza para
  transmitir vídeo. Originariamente en las Macintosh, esta clase de
  conexiones se las utiliza para conectar una cámara de vídeo al
  equipo y capturar vídeo sin problemas de lentitud. Actualmente
  existen placas con puertos FireWire para PCs compatibles con IBM.
- I2O device support
- La arquitectura I2O se ha pensado
  para dividir los manejadores de dispositivos I2O en dos partes: una
  dependiente del sistema operativo y otra no, de manera de que el
  fabricante del dispositivo en cuestión solamente deba hacer un solo
  manejador (la parte no dependiente del sistema operativo) y de esta
  forma poder utilizarlo en cualquier sistema operativo compatible con
  I2O. El autor11.9 no conoce actualmente ningún dispositivo de esta clase,
  seguramente con el tiempo irán siendo mas comunes.
- Network device support
- Esta sección engloba a todas las
  opciones de soporte de interfaces de red, desde ethernet de 10, 100
  y 1000 Mbps, pasando por SLIP, PPP, PLIP, hasta interfaces WAN,
  Token Ring y otras. Normalmente se deberán activar las opciones de
  soporte para placas ethernet e interfaces PPP (si es que se
  utilizará módem).
- Amateur Radio support
- Los aficionados a las comunicaciones
  radiales no quedan de lado en lo que respecta a soporte en el
  núcleo. Linux tiene soporte para varios TNCs, o para simular un TNC
  usando una placa de sonido, de tal forma de poder conectarse con
  otros equipos mediante el protocolo AX.25.
- IrDA (infrared) support
- Esta sección generalmente es para las
  notebooks, que poseen un puerto infrarrojo. IrDA es un protocolo de
  transferencia de datos vía infrarrojo que se encuentra normalmente
  en PDAs (como las Palm) permitiendo así sincronizar los datos de la
  PDA en una notebook sin necesidad de conectarla con un cable serie o
  USB.
- ISDN subsystem
- ISDN (o RDSI, como se lo llama en España) es un
  tipo especial de servicios digitales de telefonía. Normalmente se lo
  utiliza para conectarse a Internet, teniendo una velocidad mucho
  mayor que conectando se con módem. Actualmente se está dejando de
  lado ISDN en favor de ADSL, en Argentina por ejemplo, ISDN no se ha
  visto, por su alto costo.
- Old CD-ROM drivers (not SCSI, not IDE)
- En esta sección se da
  soporte a aquellas unidades de CD-ROMs antiguas que no eran
  compatibles con las normas IDE ni SCSI. Generalmente eran unidades
  que había que conectar a placas de sonido, actualmente no se ven
  esta clase de unidades de CD-ROM.
- Input core support
- Las opciones que esta sección provee,
  permiten la configuración de dispositivos de entrada del tipo USB,
  tales como teclados, mouses, etc.
- Multimedia devices
- Esta sección contiene las opciones
  necesarias para dar soporte a dispositivos de captura de vídeo y
  tarjetas de radio.
- File systems
- Los sistemas de archivos son los formatos que se
  le dan a las particiones para poder almacenar archivos, administrar
  los atributos de cada archivo, etc. Esta sección posee las opciones
  de soporte de sistemas de archivos tanto nativos de GNU/Linux como
  de otros sistemas operativos, como por ejemplo FAT32. Es importante
  tener en cuenta que el soporte para el sistema de archivo que se
  esté utilizando en el sistema debe estar compilado dentro del núcleo
  y no como módulo, normalmente este sistema es el Second
    extended filesystem (e2fs). En los últimos núcleos se puede
  configurar el soporte para un nuevo sistema de archivos nativo de
  GNU/Linux: el Reiser filesystem (reiserfs), el cual es un
  sistema de archivos jornalizado, que provee ciertas características
  que lo hacen mas seguro que el e2fs. Además se provee opciones para
  dar soporte a varios sistemas de archivos de red, que permiten
  utilizar discos remotos como si fueran locales al equipo, como por
  ejemplo NFS (generalmente se utiliza en los UN*X), SMB (plataformas
  Windows) y NCP (volúmenes NetWare).
- Console drivers
- Aquí se encuentran las opciones para configurar
  el tipo de consola que se usará en el sistema. Dependiendo de la
  tarjeta de vídeo que se posea, se puede configurar para que la
  consola tenga el típico formato de 80x25 caracteres, o mas
  resolución. También se puede configurar el núcleo para soportar mas
  de una placa de vídeo, pudiendo tener dos monitores, uno como
  consola de texto y otro como consola gráfica.
- Sound
- Esta sección contiene las opciones de sonido, pudiendo
  configurar una gama de tarjetas de sonido bastante amplia.
- USB support
- Esta sección provee soporte para distintos
  dispositivos USB, desde escáneres, dispositivos de almacenamiento de
  datos, reproductores de MP3, módems, impresoras hasta adaptadores de
  red.
- Kernel hacking
- Esta sección contiene una opción que se utiliza
  cuando se prueban núcleos en desarrollo, generalmente no se
  necesitará (ni tampoco será muy seguro) activar esta opción, a menos
  que se esté colaborando con el desarrollo del núcleo.
Una vez seleccionadas todas las opciones, se debe salir del sistema de
configuración del núcleo y salvar los cambios. Las opciones
seleccionadas del núcleo se guardarán en el un archivo llamado
.config dentro del árbol de fuentes del núcleo. Esto es
interesante saberlo para poder copiarlo en algún sitio como respaldo y
no perder las configuraciones del núcleo si necesitamos alguna vez
borrar todos los archivos (por cuestión de espacio, por ejemplo).
Una vez que se ha salido del sistema de configuración del núcleo,
antes de compilar se deben generar las dependencias con el siguiente
comando:
root@maquina:/usr/src/linux# make dep
Luego se compila el núcleo:
root@maquina:/usr/src/linux# make bzImage
Esto puede tardar algunos minutos, dependiendo de la potencia del
procesador y la cantidad de memoria RAM del equipo.
La opción bzImage (tener en cuenta las mayúsculas) le dice al
compilador que genere el archivo del núcleo y lo comprima con
bzip2.  Antes se utilizaba la opción zImage que
generaba un núcleo comprimido con gzip, pero tenía un límite
de tamaño que actualmente se ha sobrepasado por la cantidad de
opciones que posee el núcleo. bzip2 comprime mejor que
gzip.
Luego de generar el núcleo, se deben generar los módulos, con el comando:
root@maquina:/usr/src/linux# make modules
Esta etapa quizás tome mas tiempo que la anterior, dependiendo de la
cantidad de opciones que se hayan elegido como módulos.
Una vez finalizado, se deben instalar los módulos de la siguiente
manera:
root@maquina:/usr/src/linux# make modules_install
Y por último, se debe copiar el archivo del núcleo a algún sitio donde
estén alojados normalmente los núcleos, como por ejemplo el directorio
/boot. El archivo del núcleo, suponiendo que el conjunto de
archivos fuente del núcleo se haya almacenado en el directorio
/usr/src/linux, se encuentra en
/usr/src/linux/arch/i386/boot/bzImage.
Como último paso, se debe configurar el LILO para poder
probar el nuevo núcleo, pero esto se verá en la sección
11.2.5.
A modo de información, es conveniente comentar el uso de una utilidad
bastante práctica. El comando dmesg imprime en pantalla los
diferentes mensajes de inicio que el núcleo muestra cuando se arranca
el sistema. Esto puede ser muy útil cuando se necesita chequear
mensajes de error que no se han podido leer bien en el arranque.
 
 
 
 
 
 
 
  
 Next: LILO
 Up: Personalización y compilación del
 Previous: Actualización del núcleo
     Índice General 
Proyecto Cursos - LuCAS - http://lucas.hispalinux.es/htmls/cursos.html