Página siguiente Página anterior Índice general

12. Recompilar el núcleo

12.1 Cyrix

Existen parches no oficiales para el núcleo 2.0.xx. De todas formas, lo mejor es utilizar la utilidad set6x86 que modifica ciertos registros de l cyrix para optimizar su funcionamiento. El sitio imprescindible para todo lo relativo a linux/cyrix: es http://wauug.erols.com/~balsa/linux/cyrix/index.html.

12.2 Pentium

Linux maneja sin ningún problema las máquinas basadas en procesadores Pentium. Para optimizar un poco la compilación, es suficiente especificar Pentium al recompilar el núcleo. Existe sin embargo un gcc especializado para Pentium, que está en desarrollo.

Consulte la página http://www.goof.com/pcg para más información.

[nt : Lo que sigue es lo que estaba en esta sección en la versión anterior del Guide du Rootard y me parecio que esta información merecía estar aquí, aunque sea en esta primera versión en español]

A la pregunta, ¿Existe una opción de gcc -mpentium?, Laurent Chemla nos indica que la respuesta es ¡no! En efecto, las versiones parcheadas de gcc que manejan la optimización pentium tiene fallos, y de todas formas la optimización más importante (95% de ganancia constante) que éstas contienen está presente en gcc 2.7 por defecto (alineamiento sobre 64 bits casi en todas partes).

Por tanto, para un pentium, gcc 2.7 causa 15% de ganancia con respecto a las versiones anteriores. Esta ha sido constatada personalmente, yo me puedo equivocar, sin haber leído nunca esto en ninguna parte de manera oficial. Parece también, según algunos que se obtiene una ligera ganancia utilizando m386 en lugar de m486 sobre un pentium. Es posible...

Lo anterior fue afirmado por un grupo de voluntarios trabajando sobre las optimizaciones de gcc para procesadores Pentium. Información adicional esta disponible sobre http://www- iss.mach.uni-karlsruhe.de/pcg/.

En lo relativo al manejo optimizado de los buses PCI, sólamente los núcleos llamados de "desarrollo" lo hacen (v1.3 actualmente)... Sin embargo cuidado: ¡estos núcleos tienen frecuentemente bugs! [Nt : fin de la antigua versión]

12.3 Compilación

Los nuevos fuentes del núcleo Linux pueden obtenerse en ftp.lip6.fr en el directorio /pub/linux/kernel/sources/v2.0 para las versiones "estables". Es un sitio mirror de ftp.kernel.org.

Existe otro directorio: v2.1 : se trata de la versión de desarrollo. No aconsejo instalarla: ya que es la versión en curso de desarrollo, pueden ser estables pero es igualmente posible que estén completamente llenos de errores. Utilizándolos, se corre el riesgo de perder datos en la máquina.

Los fuentes se instalan normalmente en el directorio /usr/src/linux. La compilación es muy simple pero algunos puntos deben seguirse muy escrupulosamente:

  1. Tener a la mano un disquete que permita arrancar el sistema y montar la partición root, para que se pueda retomar el control en caso de error. Hacer los test necesarios para asegurarse que con ese disquete se puede rearrancar.
  2. make config preguntará la configuración que desea. Algunos puntos pueden parecer bastante oscuros, en ese caso no los cambie. Puede usar make menuconfig en modo texto para tener el programa en color o make xconfig bajo X a condicion de tener instalado Tcl/Tk. Configuremos juntos... Nota importante: este ejemplo es con el núcleo 2.0.26... por lo tanto algunas opciones o indicaciones pueden no existir en otras versiones.
         # make config
         rm -f include/asm
         ( cd include ; ln -sf asm-i386 asm)
         /bin/sh scripts/Configure -d arch/i386/config.in
    
    Esto no tiene mayor interés : se trata de crear los enlaces simbólicos, pero no hay que olvidarlo.
    *
    * Code maturity level options
    *
    prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)
    [Y/n/?]
    *
    
    Esta opción permite especificar si desea tener ciertas opciones particulares. Las opciones así propuestas pueden acarrear la inclusión de dispositivos que no han llegado a su madurez completa. Sin embargo si desea utilizar los módulos cargables con kerneld responda Y.
      *
      * Loadable module support
      *
      Enable loadable module support (CONFIG_MODULES) [Y/n/?]
      Set version information on all symbols for modules (CONFIG_MODVERSIONS) [N/y/?]
      Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [Y/n/?]
    
    Esta parte es especifica a los módulos cargables. Si no sabe utilizarlos, es preferible colocar las opciones por defecto. Para responder a las preguntas, hay tres soluciones: ya sea la opción por defecto (letra en mayúscula) que es de por si la adecuada, sino, es suficiente con darle la opción escogida. Si no sabe a que corresponde esta opción, escriba ? Una breve descripción aparecerá entonces. En este caso voy a utilizar los módulos cargables con el sistema de carga automático (kerneld).
      *
      * General setup
      *
      Kernel math emulation (CONFIG_MATH_EMULATION) [N/y/?]
      Networking support (CONFIG_NET) [Y/n/?]
      Limit memory to low 16MB (CONFIG_MAX_16M) [N/y/?]
      PCI bios support (CONFIG_PCI) [N/y/?]
      System V IPC (CONFIG_SYSVIPC) [Y/n/?]
      Kernel support for a.out binaries (CONFIG_BINFMT_AOUT) [Y/m/n/?]
      Kernel support for ELF binaries (CONFIG_BINFMT_ELF) [Y/m/n/?]
     Kernel support for JAVA binaries (CONFIG_BINFMT_JAVA) [N/y/m/?]
    Compile kernel as ELF<item> if your GCC is ELF-GCC (CONFIG_KERNEL_ELF) [Y/n/?]
      Processor type (386, 486, Pentium, PPro) [486]
        defined CONFIG_M486
    
    La primera opción es necesaria cuando no se dispone de un procesador matemático (que es el caso en máquinas basadas en 386 o 486SX). Le aconsejo fuertemente evitar estas opciones. Claro está, que si dispone de una máquina con PCI y diferente de 486, basta con dar las características reales de su máquina. En cuanto al formato de los ejecutables lo mejor es activar al menos los formatos ELF y a.out
    *
    * Floppy, IDE, and other block devices
    *
    Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?]
    Enhanced IDE/MFM/RLL disk/cdrom/tape support (CONFIG_BLK_DEV_IDE) [Y/n/?]
    
    Indico aquí administrar mi lector de disquetes como módulo cargable, y de manera general, activo el soporte IDE.
      *
      * Please see Documentation/ide.txt for help/info on IDE drives
      *
    Use old disk-only driver on primary interface (CONFIG_BLK_DEV_HD_IDE) [N/y/?]
    Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD) [N/y/?]
    Include IDE/ATAPI TAPE support (CONFIG_BLK_DEV_IDETAPE) [N/y/?]
    Support removeable IDE interfaces (PCMCIA) (CONFIG_BLK_DEV_IDE_PCMCIA)[N/y/?]
    CMD640 chipset bugfix/support (CONFIG_BLK_DEV_CMD640) [Y/n/?]
    Other IDE chipset support (CONFIG_IDE_CHIPSETS) [N/y/?]
    
    Si se dispone de material ATAPI, hay que indicarlo acá. Lo mismo si se tiene una interfaz PCMCIA. Nótese que Linux propone ciertas opciones particulares para algunos controladores IDE conocidos por que tienen errores. Si este es su caso, no lo dude y seleccione la opción.
    *
    * Additional Block Devices
    *
    Loopback device support (CONFIG_BLK_DEV_LOOP) [N/y/m/?]
    Multiple devices driver support (CONFIG_BLK_DEV_MD) [N/y/?]
    RAM disk support (CONFIG_BLK_DEV_RAM) [N/y/m/?]
    XT harddisk support (CONFIG_BLK_DEV_XD) [N/y/m/?]
    
    A menos que sepa exactamente lo que hace, es mejor no modificar. Bueno, pasemos a las redes !
      *
      * Networking options
      *
      Network firewalls (CONFIG_FIREWALL) [N/y/?]
      Network aliasing (CONFIG_NET_ALIAS) [N/y/?]
      TCP/IP networking (CONFIG_INET) [Y/n/?]
      IP: forwarding/gatewaying (CONFIG_IP_FORWARD) [N/y/?]
      IP: multicasting (CONFIG_IP_MULTICAST) [N/y/?]
      IP: accounting (CONFIG_IP_ACCT) [Y/n/?]
    
    De manera general, es aconsejable activar Tcp/Ip, aunque no esté conectado a una red (ciertas aplicaciones lo necesitan). Lo demás depende de la máquina. Vemos las dos series que siguen para redes.
      *
      * SCSI support
      *
    
      etc...etc  :  Para el SCSI. Lista de tarjetas SCSI manejadas... escoger la adecuada
    (varias si es necesario).
    
      *
      * Network device support
      *
      Network device support (CONFIG_NETDEVICES) [Y/n/?]
      Dummy net driver support (CONFIG_DUMMY) [M/n/y/?]
      EQL (serial line load balancing) support (CONFIG_EQUALIZER) [N/y/m/?]
      Frame relay DLCI support (EXPERIMENTAL) (CONFIG_DLCI) [N/y/m/?]
      PLIP (parallel port) support (CONFIG_PLIP) [N/y/m/?]
      PPP (point-to-point) support (CONFIG_PPP) [M/n/y/?]
    
    Lista de las posibilidades de red... no olvide colocar PPP o SLIP si es necesario. En seguida vienen las tarjetas en sí. No son detalladas aquí.
      *
      * ISDN subsystem
      *
      ISDN support (CONFIG_ISDN) [N/y/m/?]
    
    Soporte de tarjetas RDSI. A menos de tener alguna de éstas, no activar la opción.
      *
      * CD-ROM drivers (not for SCSI or IDE/ATAPI drives)
      *
      Suport non-SCSI/IDE/ATAPI CDROM drives (CONFIG_CD_NO_IDESCSI) [N/y/?]
    
    Para los CDROM Sony CDU31A/CDU33A, Matsushita/Panasonic/Creative, etc. En resumen, los CD conectados sobre la tarjeta de sonido por ejemplo.
      *
      * Filesystems
      *
     Quota support (CONFIG_QUOTA) [Y/n/?]
      Mandatory lock support (CONFIG_LOCK_MANDATORY) [N/y/?]
      Minix fs support (CONFIG_MINIX_FS) [M/n/y/?]
      Extended fs support (CONFIG_EXT_FS) [N/y/m/?]
      Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?]
      xiafs filesystem support (CONFIG_XIA_FS) [N/y/m/?]
      DOS FAT fs support (CONFIG_FAT_FS) [M/n/y/?]
      MSDOS fs support (CONFIG_MSDOS_FS) [M/n/?]
      VFAT (MS-Windows-95) fs support (CONFIG_VFAT_FS) [M/n/?]
      umsdos: Unix like fs on top of std MSDOS FAT fs (CONFIG_UMSDOS_FS) [N/m/?]
      /proc filesystem support (CONFIG_PROC_FS) [Y/n/?]
      NFS filesystem support (CONFIG_NFS_FS) [M/n/y/?]
      SMB filesystem support (to mount WfW shares etc..) (CONFIG_SMB_FS) [N/y/m/?]
      ISO9660 cdrom filesystem support (CONFIG_ISO9660_FS) [M/n/y/?]
      OS/2 HPFS filesystem support (read only) (CONFIG_HPFS_FS) [N/y/m/?]
      System V and Coherent filesystem support (CONFIG_SYSV_FS) [N/y/m/?]
      Amiga FFS filesystem support (EXPERIMENTAL) (CONFIG_AFFS_FS) [N/y/m/?]
      UFS filesystem support (read only) (CONFIG_UFS_FS) [N/y/m/?]
    
    Se trata de configurar la lista de los manejadores de archivos comandados por Linux. Es indispensable tener ext2fs. Es muy recomendable incluir aquí el soporte /proc. SMB es usado para acceder a los recursos compartidos de Windows For Workgroup. Desde ahora, existen dos formatos para Ms-Dos : el formato estándar y el formato extendido que utiliza Windows95 (VFAT). Si se tiene un CD-Rom, sería bueno incluir el soporte ISO9660. Finalmente, si se desean utilizar las cuotas, responda Y en la primera opción.
      *
      * character devices
      *
    
    Soporte para el puerto paralelo y para diversos ratones. No olvide activar la impresora si está conectada al puerto paralelo.
      *
      * Sound
      *
    
    ¡ Pasemos a la tarjeta de sonido ! Me voy a limitar a la SoundBlaster 16. Es la que yo tengo y permite dar un ejemplo. Sóolo las opciones que hay que modificar están aquí presentes. En realidad, Linux maneja muchas otras tarjetas de sonido.
    Sound card support (CONFIG_SOUND) [M/n/y/?]
      Sound Blaster (SB, SBPro, SB16, clones) support (CONFIG_SB) [Y/n/?]
      /dev/dsp and /dev/audio support (CONFIG_AUDIO) [Y/n/?]
      MIDI interface support (CONFIG_MIDI) [Y/n/?]
      FM synthesizer (YM3812/OPL-3) support (CONFIG_YM3812) [Y/n/?]
      I/O base for SB Check from manual of the card (SBC_BASE) [260]
      Sound Blaster IRQ Check from manual of the card (SBC_IRQ) [5]
      Sound Blaster DMA 0, 1 or 3 (SBC_DMA) [1]
      Sound Blaster 16 bit DMA (_REQUIRED_for SB16, Jazz16, SMW) 5, 6 or 7 (use 1 for 8 bit
            cards) (SB_DMA2) [5]
      MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of the card
            (SB_MPU_BASE) [330]
      SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Use -1 with SB16 (SB_MPU_IRQ) [-1]
      Audio DMA buffer size 4096, 16384, 32768 or 65536 (DSP_BUFFSIZE) [65536]
    
      *
      * Kernel hacking
      *
      Kernel profiling support (CONFIG_PROFILE) [N/y]
    
    Es muy recomendable poner esta opción en N.
  3. make dep se encarga de crear las dependencias.
  4. make clean limpiará toda la arborescencia.
  5. Lance make zImage para compilar el núcleo. Puede irse a tomar un cafecito: ¡tarda bastante! Salvo que posea un P6 o algún otro mosntruo (tiempo de compilación alrededor de 4 minutos)... pero con mi 486 DX2/66 y 16 Mb, la compilación tarda aproximadamente 40 minutos. Depende sobre todo de la cantidad de memoria disponible.
  6. si tiene módulos, lance su compilación con : make modules y luego instálelos con : make modules_install. Serán copiados en el directorio /lib/modules/2.0.26
  7. Cuando haya terminado, vaya a /usr/src/linux/arch/i386/boot. El nuevo núcleo es el archivo zImage. El núcleo esta comprimido. Cópielo en la raíz / , bajo un nuevo nombre (por ejemplo " vmlinuz2 "). Modifique la configuración de LILO pero no retire nada, copie una sección y modifíquela de manera que pueda lanzar el nuevo núcleo. Luego relance lilo para que el nuevo núcleo sea tomado en cuenta.

Nota: Si no logra modificar la configuración de lilo tiene que copiar el nuevo núcleo sobre el antiguo (vmlinux). Le aconsejo dejar una copia del antiguo en algún lugar y sobre todo verificar que se puede re-arrancar con ella gracias a un disquete por ejemplo.

Rearranque la máquina y debe funcionar.


Página siguiente Página anterior Índice general