Aula Macedonia


Curso de Introducción y Uso del Linux


Artículo realizado por
Pedro A. Carrasco.





Capítulo 3.
Instalación y compilación del núcleo

Tras los dos capítulos anteriores empezamos ahora con el nucleo o kernel, el núcleo es la capa intermedia de software directamente ligada con el hardware de nuestra máquina, por lo tanto es el que implementa las funciones o llamadas para acceder a él. Tradicionalmente nos han acostumbrado a núcleos ya compilados, como el de MS-DOS o W95-NT; pero con Linux y siguiendo con la libre distribución de todo, incluidas las fuentes, tenemos estas últimas disponibles, por lo que podremos compilar el núcleo a nuestra medida (por si alguien se lo pregunta, una compilación es el mecanismo que se encarga de "traducir" los ficheros fuente, en formato texto, a ficheros binarios que entienda el procesador).

Antes de asustarnos por eso de la compilación vamos a ver antes las ventajas que tiene el compilar el núcleo:

Existen muchas más razones y podría ser discutido largo y tendido, pero, no es el tema de este curso, por el momento veremos los procedimientos generales para realizar la instalación de las fuentes del núcleo:

  1. Conseguir las fuentes del núcleo, para ello podemos instalar los paquetes necesarios de nuestra distribución, en kernel-sources generalmente, o ir a Internet a buscar la última versión, en estos momentos la 2.0.34 de las estables (si el segundo número es par es una versión estable, si no es de desarrollo). Podemos buscar en ftp.rediris.es.

  2. Una vez tenemos el fichero comprimido de las fuentes (suele llamarse linux-2.0.34.tar.gz por ejemplo), lo copiamos a /usr/src como usuario root, hacemos una copia de seguridad del directorio de las fuentes anteriores, si lo hubiese, con mv linux linux.old y lo descomprimimos con tar xvzf linux-2.0.34.tar.gz.

  3. Nos creará un árbol de directorios bajo el directorio linuxcon todas las fuentes del núcleo, ahora no voy a analizarlo ya que sería reinventar la rueda, hay documentos específicos que hablan de ello.

  4. Entramos dentro del directorio linux.

Bien, ya tenemos las fuentes descomprimidas en /usr/src/linux, ahora viene el proceso de configuración y compilación.

3.1 Configuración

Lo primero es saber qué dispositivos tenemos, el disco duro, la tarjeta de sonido con sus parámetros, discos SCSI (la unidad ZIP de Iomega en puerto paralelo se toma como un disco SCSI), CD-ROM (si es ATAPI o de alguna marca no compatible con ATAPI), a fin de cuentas cuanta más información tengamos del Harware instalado en nuestro ordenador, mejor.

Para configurar el núcleo, estando en /usr/src/linux y como usuario root, tecleamos:

localhost # make config

o si queremos la configuración con menús:

localhost # make menuconfig

y si estamos dentro del entorno X-Window

localhost # make xconfig

Aquí explicaré la configuración por menús, esta requiere las n-curses instaladas, lo que suele venir por defecto en todas las distribuciones. Bien, empecemos, una vez que nos aparece el menú en pantalla podemos ir moviéndonos con las flechas y con [INTRO] entramos en el menú seleccionado, dentro del menú, con Select seleccionamos la opción resaltada, con la tecla M la seleccionamos como módulo si se puede (en vez de [ ] aparece < >), y con las flechas de izquierda derecha nos movemos por Select, Exit y Help, este último como siempre es importante si no sabemos qué hace una opción determinada.

Ya estamos dentro de la pantalla principal y vemos los menús, ahora empezaré explicando uno por uno:

Code maturity level options:

Aquí seleccionamos Prompt for development and/or incomplete code/drivers, esta opción nos permitirá seleccionar drivers o elementos que están aún en desarrollo, pero que en algunos casos funcionan bien.


Loadable module support:

Dentro de este menú están las opciones de modulos cargables, seleccionaremos Enable loadable module support para activar el soporte de módulos, la opción Set version information on all symbols for modules la seleccionaremos si no queremos mezclar módulos de versiones anteriores con los de la versión actual, personalmente yo no la selecciono, luego seleccionaremos Kernel daemon support (e.g. autoload of modules) para permitir que el núcleo cargue los módulos en demanda, o sea, sólo cuando los necesita.


General setup:

Este apartado define como su nombre indica la configuración general, consta de:

  • Kernel math emulation : Lo seleccionaremos siempre que nuestro ordenador no tenga coprocesador matemático (486SX o inferiores)

  • Networking support : Soporte de red, lo seleccionaremos aunque no estemos conectados a ninguna red, es necesario para aplicaciones como X-Window.

  • Limit memory to low 16Mb: Esta opción es para placas madres que experimentaban errores con cantidades de memoria superiores a 16Mb, raramente ocurre por lo tanto lo normal es no seleccionarla.

  • PCI bios support: Si tienes bus PCI seleccionala, si no, no la selecciones.

  • PCI bridge optimization (experimental): Optimización del puente PCI, este apartado es experimental, pero parece que es bastante estable, si has seleccionado la opción anterior seleccionala, si experimentases errores con el bus PCI deseleccionala y recompila el núcleo.

  • System V IPC: Comunicación entre procesos, seleccionala, ya que si no muchos programas no te funcionarán.

  • Kernel support for a.out binaries

  • Kernel support for ELF binaries

  • Kernel support for JAVA binaries : Es el formato de ficheros ejecutables que soportará el núcleo, las dos primeras hay que seleccionarlas (nunca como módulos), y la de JAVA depende de cada uno, yo la tengo como módulo(con la tecla M).

  • Compile kernel as ELF - if your GCC is ELF-GCC: Si tienes una distribución muy antigua de Linux, quizás no puedas seleccionar esta opción, si tu distribución tiene como máximo 2 años seleccionala.

  • (Pentium) Processor type: Aquí seleccionas el tipo de procesador que tienes.


Floppy, IDE, and other block devices:

En este apartado seleccionamos los dispositivos de almacenamiento, diskettes, CD-ROM etc, está compuesto por:

  • Normal floppy disk support: Soporte para diskettes normales, puedes seleccionarlo como módulo o no.

  • Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support: Si tienes dispositivos IDE selecciona esta opción, si tienes poca memoria en el ordenador puedes dejarla y seleccionar Use old disk-only driver on primary interface.

  • Include IDE/ATAPI CDROM support

  • Include IDE/ATAPI TAPE support

  • Include IDE/ATAPI FLOPPY support (new): Con estas opciones seleccionamos los dispositivos IDE/ATAPI que tengamos, tanto el CD-ROM como unidades de cinta y de diskette(incluida la LS-120 y la ATAPI-ZIP).

  • SCSI emulation support: Normalmente está deseleccionada, si tienes unidades no soportadas como ATAPI PC-CD seleccionala.

  • Support removable IDE interfaces (PCMCIA): Para tarjetas PCMCIA, normalmente en portátiles.

  • CMD640 chipset bugfix/support: En la mayoría de placas para 486 y Pentium se utiliza este chipset, seleccionando esta opción resolvemos un error de la placa. Normalmente es conveniente seleccionarla.

  • CMD640 enhanced support: Si tienes este chipset, seleccionala.

  • RZ1000 chipset bugfix/support: Igual que CMD640.

  • Intel 82371 PIIX (Triton I/II) DMA support: Si utilizas un disco IDE y tienes la placa Tritón I o II selecciona esta opción.

  • Other IDE chipset support: Si tienes otros chipset IDE selecciona esta opción, también es necesaria para acceder al tercer y cuarto dispositivo en algunos sistemas. Al seleccionarla saldrá una lista con los dispositivos soportados.

  • Loopback device support: Permite montar un fichero como un sistema de ficheros, es útil para chequear un sistema de archivos ISO9660 (el de CD-ROM), para montar sistemas de archivos encriptados también, puedes seleccionarla como módulo.

  • Multiple devices driver support: Permite combinar varias particiones de disco duro en un dispositivo lógico.

  • RAM disk support: Soporte para disco RAM, normalmente no es necesario a no ser que se monte el sistema de ficheros en diskette.

  • XT harddisk support: Controlador de disco de los antiguos XT si es tu caso seleccionalo.


Networking options:

Opciones de red, en principio deja las opciones por defecto.


SCSI support:

Soporte para dispositivos SCSI, aquí elegimos los dispositivos SCSI si los tenemos, si tenemos la unidad IOMEGA ZIP en puerto paralelo seleccionaremos como modulo el soporte de SCSI y el de disco SCSI, luego en SCSI low level drivers elegimos el driver de IOMEGA ZIP, si tenemos disco duro SCSI lo elegimos (no es conveniente hacerlo como módulo) y en Low level drivers elegimos el correspondiente a nuestro dispositivo.


Network device support:

Dispositivo de red, normalmente dejamos las opciones que hay por defecto, aunque podemos elegir el soporte para conectar dos ordenadores por el puerto serie o paralelo, y el soporte para ppp si queremos conectarnos a Internet. También tenemos las opciones de soporte para Ethernet, Conexión por radio, Token Ring etc.


ISDN subsystem:

Si te conectas por RDSI tendrás que configurar este apartado.


CD-ROM drivers (not for SCSI or IDE

ATAPI drives):/ Drivers de CD-ROM que no son ni SCSI ni IDE/ATAPI, como por ejemplo los CD-ROM de Philips.


Filesystems:

Sistemas de ficheros soportados por el núcleo, tendremos que elegir como mínimo ext2fs, proc y ISO9660 si tenemos CD-ROM, este último lo podemos seleccionar como módulo, los dos anteriores no, luego podemos elegir FAT y VFAT si tenemos una partición de DOS o W95 (actualmente hay un parche para FAT32), o queremos leer diskettes en formato DOS, NFS si queremos montar sistemas de ficheros en red.


Character devices:

Dispositivos de carácter, como la impresora, el puerto serie, tarjetas digitalizadoras etc, si tenemos la unidad ZIP en puerto paralelo, la impresora habrá que configurarla como modulo y la unidad ZIP también.


Sound:

Configuramos nuestra tarjeta de sonido si la tenemos, como existen muchas tarjetas y configuraciones este apartado no lo profundizo ya que es bastante intuitivo.


Kernel hacking:

Si vamos a desarrollar partes para el kernel podemos activar esta opción, en el caso normal de que no lo vallamos a hacer lo dejaremos sin desactivar.


Load an Alternate Configuration File y Save Configuration to an Alternate File:

Sirven para cargar o guardar la configuración del núcleo de un fichero alternativo.

3.2 Compilación.

Llegados a este punto ya tendremos configurado el núcleo, con el botón Exit nos preguntará si queremos guardar la configuración, seleccionamos que sí. Tras esto nos instará a que creemos las dependencias y limpiemos el árbol de directorios. Para ello hacemos:

localhost # make dep ; make clean

Una vez que termina este proceso y si no ha habido errores hacemos

localhost # make zlilo 
o
localhost # make zimage

En el primer caso nos creará la imagen y nos la instalará en su sitio, reiniciando el lilo para que tenga en cuenta los cambios, en el segundo lo tendremos que hacer nosotros a mano.

3.3 Conclusión.

En este tercer capítulo se explica la instalación de un nuevo núcleo o la instalación del que disponemos pero adaptándolo a nuestra máquina, los apartados de la compilación los he sacado de la versión 2.0.33 del núcleo, aunque los cambios a versiones posteriores o anteriores son fáciles si comprendemos el proceso de configuración. Tras tener instalado nuestro nuevo núcleo si ponemos o quitamos algún dispositivo simplemente tenemos que configurarlo correctamente en el núcleo y recompilar. Si ocurriese algún error puedes leerte el documento Kernel-Howto que está también traducido por el grupo LuCAS. Espero que este capítulo haya servido para que comprendas mejor los entresijos del núcleo, para todos aquellos que quieran profundizar en la estructura y programación del núcleo y de Linux les remito al artículo aparecido en el número dos de Linux Actual sobre el núcleo y al libro Programación en Linux 2.0 de la editorial Eyrolles. Sin más me despido hasta el próximo artículo que tratará de la conexión a la red de redes Internet por medio de Infovía (o infobirria como empieza a llamarse).




AULA MACEDONIA
a
MACEDONIA Magazine