Página siguiente Página anterior Índice general

11. Recompilar el núcleo

11.1 Pentium

Linux maneja sin ningún problema las maquinas basadas sobre procesadores Pentium. Para optimizar un poco la compilación, es suficiente especificar Pentium al momento de la recompilación del núcleo. Existe mas sin embargo un gcc especializado para Pentium, que esta en desarrollo.

Consulta la pagina http://www.goof.com/pcg para mas 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 patchees de gcc que manejan la optimizacion pentium tiene bugs, y de todas formas la optimizacion mas importante (95% de ganancia constante) que estas contienen esta 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 optimado de los buses PCI, solamente 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]

11.2 Compilación

Esta sección es inspirada de Kernel HowTo (ward@blah.tu-graz.ac.at).

Los nuevos fuentes del núcleo Linux pueden ser recuperados sobre ftp.ibp.fr en el directorio /pub/linux/kernel/sources/v2.0 para las versiones "estables". Es un sitio mirror de ftp.funet.fi

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 bugs. Utilizándolos, se corre el riesgo de perder datos en tu maquina. Los fuentes se instalan normalmente en el directorio /usr/src/linux. La compilación es muy simple pero algunos puntos deben ser seguidos muy escrupulosamente:

  1. Tener a la mano un disquete que te permita arrancar el sistema y montar tu partición root, para que puedas retomar el control en caso de error. Haz los test necesarios para asegurarte que con ese disquete puedes rearrancar.
  2. make config te va preguntar la configuración que deseas. Algunos puntos pueden parecer bastante oscuros, en este caso no los cambies. Configuremos juntos... Nota importante: este ejemplo es con el núcleo 2.0.26... por lo tanto algunos campos 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 posesionar los lazos 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 deseas tener ciertas opciones particulares. Las opciones así propuestas pueden acarrear la inclusión de dispositivos que no han llegado a su madurez completa. Mas sin embargo si deseas utilizar los módulos cargables con kerneld responde 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) [N/y/?] 
    
    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) 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 cargamento automático.
     
      * 
      * 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 aritmético. Yo aconsejo fuertemente imitar estas opciones. Claro esta, que si dispone de una maquina con PCI y diferente de 486, basta con dar las características reales de su maquina. 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/?] 
    
    Yo le pido administrar mi lector de disquetes como modulo cargable, y de manera general, yo activo el soporte IDE.
     
      * 
      * Please see drivers/block/README.ide 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 interfase PCMCIA. Nótese bien que Linux propone ciertas opciones particulares para algunos controladores IDE conocidos por que tienen bugs. Si este es su caso, no lo dudes y selecciona 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és conectado a una red (ciertas aplicaciones lo necesitan). Lo demás depende de tu maquina. Paso 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/?] 
      SLIP (serial line) support (CONFIG_SLIP) [N/y/m/?] 
      PPP (point-to-point) support (CONFIG_PPP) [Y/m/n/?] 
    
    Lista de las posibilidades de red... no olvidar de colocar PPP o SLIP si es necesario. En seguida vienen las tarjetas en si. No son detalladas aquí.
     
      * 
      * ISDN subsystem 
      * 
      ISDN support (CONFIG_ISDN) [N/y/m/?] 
    
    Soporte de tarjetas ISDN. A menos de tener alguna de estas, 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 de 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 standard y el formato extendido que utiliza Windows95 (VFAT). Si se tiene un CD-Rom, seria 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 olvides activar tu impresora si esta esta 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. Solo 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 va limpiar toda la arborescencia.
  5. Lance make zImage para compilar el núcleo. Puede irse a tomar un cafecito: es largo! Con mi DX2/66, la compilación toma aproximadamente 40 minutos. Depende sobre todo de la cantidad de memoria viva disponible.
  6. si tu tienes módulos, lanza su compilación con : make modules y luego instálalos con : make modules_install. Ellos serán recopiados en el repertorio /lib/modules/2.0.26
  7. Cuando hayas terminado, ve 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 "). Modifica la configuración de lilo.conf pero no retires nada, copia una sección y modifícala de manera que puedas lanzar tu nuevo núcleo. Luego relanza lilo para que el nuevo núcleo sea tomado en cuenta. Rearrancas la maquina y eso debería funcionar.

Nota: Si no logras modificar la configuración de lilo tienes que copiar el nuevo núcleo sobre el antiguo núcleo (vmlinux). Te aconsejo mucho dejar una copia del antiguo en algún lugar y sobre todo verifica que puedes re-arrancar en el gracias a un disquete por ejemplo.


Página siguiente Página anterior Índice general