Le Guide du ROOTard pour Linux: Recompiler le noyau
Description: Ce document regroupe l'adaptation d'articles parus dans la Linux-Gazette. Merci à Nat Makarévitch pour ses relectures et Joël Bernier pour la mise en page HTML.
Keywords: Linux, francais, français, france, GNU, FSF, Debian, Redhat, Slackware, Mandrake, kheops, document, documentation, logiciel, libre, informatique, free, software, open, source, sourceware, freeware, soleil, support, assistance, hot line

> 2. Page suivante Page précédente Table des matières ## 11. Recompiler le noyau ## 11.1 Cyrix il existe des patchs non officiels pour le noyau 2.0.xx. Toutefois, le mieux est d'utiliser l'utilitaire `set6x86` qui positionne certains registres du cyrix pour optimiser son fonctionnement. Le site incontournable pour tout ce qui concerne linux/cyrix : est http://wauug.erols.com/~balsa/linux/cyrix/index.html. ## 11.2 Pentium Linux gère sans aucun problème les machines basées sur Pentium. Pour optimiser un peu la compilation, il suffit de spécifier Pentium lors de la recompilation du noyau. Il existe toutefois un gcc spécialisé pour Pentium, qui est en cours de développement. Il suffit de consulter la page http://www.goof.com/pcg pour plus de renseignements. ## 11.3 Compilation Les nouveaux sources du noyau Linux peuvent être récupérés sur le site `ftp.lip6.fr` dans le répertoire `/pub/linux/kernel/sources/v2.0` pour les versions dites "stables". Il s'agit d'un miroir du site `ftp.kernel.org`. Il existe un autre répertoire : `v2.1` : il s'agit de la version de développement. Je vous déconseille de l'installer : il s'agit de noyaux en cours de développement; ils peuvent être stables mais il est également possible qu'ils soient complètement bogués. En les utilisant, vous prenez le risque de perdre des données de la machine. Installez donc les sources (normalement dans le répertoire `/usr/src/linux`). La compilation est très simple à réaliser mais vous devez suivre quelques points très scrupuleusement : conserver à portée de la main une disquette permettant de démarrer le système et de monter la partition root, afin de pouvoir reprendre le contrôle en cas d'erreur et tester qu'elle permet bien de démarrer. `make config` va demander la configuration que vous souhaitez. Certains points peuvent vous sembler assez obscurs. Dans ce cas, ne les changez pas. Vous pouvez lancer `make menuconfig` en mode texte pour avoir le programme en couleur ou `make xconfig` sous X à condition d'avoir installé Tcl/Tk. Configurons ensemble ce noyau... Remarque importante : il s'agit du noyau 2.0.26, donc certaines options ou certaines indications peuvent ne pas exister sur d'autres versions.
>        # make config
>        rm -f include/asm
>        ( cd include ; ln -sf asm-i386 asm )
>        /bin/sh scripts/Configure -d arch/i386/config.in
>        #
>    Cela n'a que peu d'intérêt : il s'agit de positionner des liens symboliques, mais il ne faut pas oublier !
>        *
>        * Code maturity level options
>        *
>        Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [Y/n/?]
>        *
>    Cette option permet de spécifier si vous voulez avoir certaines options particulières. Les options ainsi proposées peuvent entraîner l'inclusion de périphériques pas encore arrivés à maturité. Toutefois, si vous souhaitez utiliser les modules chargeables avec `kerneld`, répondez `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/?]
>    Cette partie est spécifique aux modules chargeables. Pour répondre aux questions, il y a trois solutions : soit l'option par défaut (lettre en majuscule) est déjà adéquate, soit il suffit de la préciser. Si vous ne savez pas à quoi correspond cette option, tapez `?` : une brève description va alors apparaître. Dans le cas présent ci-dessus, je vais utiliser les modules chargeables avec le système de chargement automatique (`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 - if your GCC is ELF-GCC (CONFIG_KERNEL_ELF) [Y/n/?]
>        Processor type (386, 486, Pentium, PPro) [486]
>          defined CONFIG_M486
>    La première option n'est nécessaire que si vous ne disposez pas d'un processeur arithmétique (ce qui est le cas sur les machines à base de 386 et de 486 SX). Je vous conseille très fortement de l'éviter. Si vous disposez d'une machine avec PCI et non 486, il vous suffit de donner les caractéristiques de la machine. Du côté des formats exécutables, il est préférable d'activer les formats ELF et 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/?]
>    Je demande ici à gérer mon lecteur de disquettes comme module chargeable, et d'une manière générale, j'active le support 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 removable IDE interfaces (PCMCIA) (CONFIG_BLK_DEV_IDE_PCMCIA) [N/y/?]
>           CMD640 chipset bugfix/support (CONFIG_BLK_DEV_CMD640) [N/y/?]
>           Other IDE chipset support (CONFIG_IDE_CHIPSETS) [N/y/?]
>    Si vous disposez de matériel ATAPI, il faut préciser ici. De même si vous avez une interface PCMCIA (attention : pour une carte PCMCIA, il est nécessaire d'utiliser un paquetage spécial). Il faut remarquer que Linux vous propose certaines options particulières pour certains contrôleurs IDE connus pour être bogués. Si vous êtes dans cette situation, n'hésitez pas à sélectionner l'option.
>        *
>        * 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 moins que vous ne sachiez exactement ce que vous faîtes, ne pas modifier. Bien, on passe au réseau maintenant !
>        *
>        * 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/?]
>    D'une manière générale, il est suggéré d'activer Tcp/Ip, même si vous n'êtes pas relié au réseau (certaines applications en ont besoin). Le reste dépend de votre machine. Je passe sur les deux séries qui suivent pour le réseau.
>        *
>        * SCSI support
>        *
>    etc...etc : pour le SCSI. Liste des cartes SCSI gérées... choisissez la bonne (ou plusieurs).
>        *
>        * 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/?]
>    Liste des possibilités réseau... ne pas oublier de positionner PPP ou SLIP si nécessaire. Ensuite viennent les cartes elles-mêmes. Elles ne sont pas détaillées ici.
>        *
>        * ISDN subsystem
>        *
>        ISDN support (CONFIG_ISDN) [N/y/m/?]
>    Support des cartes RNIS. A moins d'en avoir une, ne pas activer.
>        *
>        * CD-ROM drivers (not for SCSI or IDE/ATAPI drives)
>        *
>        Support non-SCSI/IDE/ATAPI CDROM drives (CONFIG_CD_NO_IDESCSI) [N/y/?]
>        *
>    Pour les CD-ROM Sony CDU31A/CDU33A, Matsushita/Panasonic/Creative, etc. En bref, les CD branchés sur les cartes son par exemple.
>        *
>        * 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/?]
>    Il s'agit de configurer la liste des gestionnaires de fichiers gérés par Linux. Vous devez absolument avoir ext2fs. Il est très fortement suggéré d'y mettre également le support /proc. SMB est utilisé pour accéder aux ressources partagées de MS-Windows For Workgroup. Désormais, il existe deux formats pour MS-DOS : le format standard et le format étendu qu'utilise MS-Windows 95 (VFAT). Si vous possédez un CD-ROM, pensez à inclure le support ISO9660. Enfin, si vous désirez utiliser les quotas, pensez à répondre Y à la première option.
>        *
>        * character devices
>        *
>    Support pour le port parallèle et pour diverses souris. Pensez à activer l'imprimante si elle est connectée sur le port parallèle !
>        *
>        * Sound
>        *
>    Passons à la carte son ! Je vais un peu limiter et me cantonner à la SoundBlaster 16. C'est ce que j'ai, et ça permet de donner un exemple. Seules les options qu'il convient de modifier sont présentes ici. En fait, Linux gère bien d'autres cartes son.
>        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]
> Il est très conseillé de laisser cette option à N. `make dep` se charge de créer les dépendances. `make clean` va nettoyer toute l'arborescence. Lance `make zImage` pour compiler votre noyau. Vous pouvez aller boire un bon café, voire toute autre boisson dont la publicité est interdite, car c'est long, sauf bien sûr si vous possédez un P6 ou autre monstre (temps de compilation environ 4 minutes)... mais avec mon 486 DX2/66 et 16 Mo, la compilation exige un peu plus de 40 minutes. Cela dépend surtout de la quantité de mémoire vive disponible. si vous avez des modules, lancer leur compilation par : `make modules` puis les installer par `make modules_install`. Ils seront copiés dans le répertoire `/lib/modules/2.0.26`. Quand c'est terminé, aller dans `/usr/src/linux/arch/i386/boot`. Le nouveau noyau flambant neuf est le fichier zImage, qui est déjà compacté. Le copier dans la racine : `/` en lui attribuant un nouveau nom (par exemple "vmlinuz2"). Modifier la configuration de LILO mais ne rien retirer : copier/coller en tête du fichier une section existante puis la modifier afin qu'elle concerne le nouveau noyau. Puis relancer `lilo` pour que le nouveau noyau soit pris en compte et reboote. Remarque : si vous ne parvenez pas à modifier la configuration de `lilo` il faudra installer le nouveau fichier du noyau en lieu et place de l'ancien. Je vous conseille fortement de laisser l'ancien noyau dans un coin et surtout de pouvoir booter dessus, par exemple grâce à une disquette, afin de ne pas tout perdre. Réamorcer et ça doit fonctionner. Page suivante Page précédente Table des matières