Accueil > AbulEdu > Compiler un kernel personnalisé

Compiler un kernel personnalisé

lundi 21 mai 2007, par Francois Audirac

Cet article est en cours d’écriture permanent et est publié pour être « visible » pour être commenté, relu, corrigé, amélioré...

Cet article fait suite à celui-ci sur le client léger IBM Netvista 8363 N2200. Il a pour objectif de créer une distribution spécifique à ce client léger et prête à être intégrée dans un réseau AbulEdu.

Jean-Christophe Duberga donne sur son site quelques pistes pour créer un kernel (noyau) spécifique à ce type de machine.

Il s’agit ici d’expliquer de manière détaillée comment personnaliser un système de manière à l’optimiser pour en faire un véritable client léger sur un réseau AbulEdu.

Les opérations à effectuer

  1. Repérer les caractéristiques du matériel désiré
  2. Préparer la machine qui compilera le kernel
  3. Récupérer les sources du noyau
  4. Comfigurer le noyau avec ses options
  5. Compiler le noyau
  6. Intégrer le noyau dans une distribution

Déroulement

1. Caractéristiques

Il s’agit de repérer à l’aide de commandes spécifiques les caractéristiques de la machine utilisant une distribution plus lourde.

(Remarque : ceci est donné à titre d’information puisque ceci ne pourrait être fait sur une machine ne possédant pas de distribution).

# cat /proc/cpuinfo

Ce qui donne pour le processeur :

processor : 0
vendor_id : CyrixInstead
cpu family : 5
model : 7
model name : Cyrix MediaGXtm MMXtm Enhanced
stepping : 4
cpu MHz : 233.867
cache size : 16 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu tsc msr cx8 cmov mmx cxmmx
bogomips : 466.94

Puis

cat /proc/cpuinfo

donne pour les composants internes :

PCI devices found:
Bus  0, device   0, function  0:
    Host bridge: Cyrix Corporation PCI Master (rev 0).
Bus  0, device  14, function  0:
    Ethernet controller: Silicon Integrated Systems [SiS] SiS900 10/100 Ethernet (rev 2).
        IRQ 10.
        Master Capable.  Latency=64.  Min Gnt=52.Max Lat=11.
        I/O at 0xc000 [0xc0ff].
        Non-prefetchable 32 bit memory at 0x44801000 [0x44801fff].
Bus  0, device  18, function  0:
    ISA bridge: Cyrix Corporation 5530 Legacy [Kahlua] (rev 0).
Bus  0, device  18, function  1:libncurses5-dev
    Bridge: Cyrix Corporation 5530 SMI [Kahlua] (rev 0).
        Non-prefetchable 32 bit memory at 0x40012000 [0x400120ff].
Bus  0, device  18, function  2:
    IDE interface: Cyrix Corporation 5530 IDE [Kahlua] (rev 0).
        I/O at 0xfc00 [0xfc0f].
Bus  0, device  18, function  3:
    Multimedia audio controller: Cyrix Corporation 5530 Audio [Kahlua] (rev 0).
        Non-prefetchable 32 bit memory at 0x40011000 [0x4001107f].
Bus  0, device  18, function  4:
    VGA compatible controller: Cyrix Corporation 5530 Video [Kahlua] (rev 0).
        Non-prefetchable 32 bit memory at 0x40800000 [0x40ffffff].
Bus  0, device  19, function  0:
    USB Controller: Compaq Computer Corporation ZFMicro Chipset USB (rev 6).
        IRQ 11.
        Master Capable.  Latency=64.  Max Lat=80.
        Non-prefetchable 32 bit memory at 0x44800000 [0x44800fff].

De là on peut déduire les modules nécessaires qui seront intégrés au kernel.

 support des processeurs MMX
 default linux IDE driver pour lire les cartes Compact Flash
 le module réseau SiS900 (en 10/100)
 le pilote video VESA (3MB de mémoire vidéo memm pour une résolution de 1024x768 en 16 bits (64K colors) ou en 1280x1024 en 256 couleurs.
 Le son est supporté par le pilote OSS pour le noyau 2.4 . ALSA 2.6. permet d’obtenir une sortie stéréo 16 bits 44.1Khz avec entrée et sortie audio avec microphone.

2. Préparer sa machine

Pour compiler un noyau, il est nécessaire d’installer des programmes utiles :
 make
 gcc
 ncurses

Sous Ubuntu, les paquets peuvent s’installer avec synaptic ou en ligne de commande :

sudo apt-get install make gcc libncurses5-dev

De plus selon le type de noyau installé, il est nécessaire d’installer des paquets supplémentaires compatibles avec ce noyau. Par exemple, la version 2.4.34-.4 se compile avec gcc 2.95 (ou gcc 3.3) (Consultez le README joint à l’archive).

On installera donc le paquet correspondant à la version :

sudo apt-get install gcc-2.95

Et on créera le lien pour permettre une compilation par défaut.

sudo ln -sf /usr/bin/gcc-2.95 /usr/bin/gcc

(Une astuce consiste à ajouter un paramètre ( dans le fichier Makefile un fois le noyau configuré en partie 4)

3. Récupérer les sources du noyau

Les sources peuvent être récupérées sur le site kernel.org en choisissant l’option « F » d’une version stable.

Une fois l’archive .tar.bz2 téléchargée, il faut la décompresser dans un dossier prévu.

Pour créer le noyau prévu, il est nécessaire d’appliquer un patch avant la compilation finale.

4. Configurer le noyau

Se rendre dans le dossier créé (linux-2.x.x) et appliquer le patch téléchargé :

patch -p1 < netvista-cmdline.patch

Remarque IMPORTANTE
Le patch actuel doit modifier une ligne dans un fichier, il est possible en cas d’erreur de faire cette correction à la main :

Dans le fichier linux-2.4.34-4/arch/i386/kernel/head.S, Il faut remplacer :

movl $512,%ecx
rep
stosl
movl SYMBOL_NAME(empty_zero_page)+NEW_CL_POINTER,%esi
andl %esi,%esi
jnz 2f	# New command line protocol
cmpw $(OLD_CL_MAGIC),OLD_CL_MAGIC_ADDR

par

movl $512,%ecx
rep
stosl
/* NetVista */
/* movl SYMBOL_NAME(empty_zero_page)+NEW_CL_POINTER,%esi */
movl $0x98000, %esi

andl %esi,%esi
jnz 2f	# New command line protocol
cmpw $(OLD_CL_MAGIC),OLD_CL_MAGIC_ADDR

Lancez la commande pour configurer le kernel :

make menuconfig

L’interface propose alors différentes options à choisir pour configurer au mieux son noyau.

Deux possibilités s’offrent à vous :
 utiliser une configuration pré-enregistrée
 paramétrer soi-même ses options une par une.

Pour la première option, vous pouvez utiliser celle disponible sur ce site que vous placerez dans le dossier linux-2.x.x. avant le lancement de menuconfig et que vous chargerez avec l’option « Load a Alternate Configuration File ».

Pour la seconde, il faut sélectionner chaque ligne et cocher avec la touche espace les options que vous souhaitez.

1.- Section "Code maturity level options" : cochez "Prompt for development and/or incomplete code/drivers"
2.- Section "Loadable module support" : décochez "Enable loadable module support".
3.- Section "Processor type and features" : cochez "586/K5/5x86/6x86/6x86MX", et activez  "MTRR support", et décochez le reste
4.- Section "General setup", sélectionnez "Networking support", "PCI support", "PCI device name database", "Support for hot-pluggable devices", "System V IPC", "Sysctl support", "ELF" comme "Kernel core (/proc/kcore) format", "Kernel support for a.out binaries", "Kernel support for ELF binaries", "Kernel support for MISC binaries" et "Power Management support".
5.- Section "Memory Technology Devices (MTD)" : décochez "Memory Technology Device (MTD) support"
6.- Section "Parallel port support" : décochez "Parallel port support"
7.- Section "Plug and Play configuration" : cochez "Plug and Play support"
8.- Section "Block devices" : décochez tout
9.- Section "Multi-device support (RAID and LVM)" :  décochez tout
10.- Section "Networking options", choisissez "Packet socket", "Unix domain sockets", "TCP/IP networking" et décochez le reste.
11.- Section "Telephony Support" : décochez tout
12.- Section "ATA/IDE/MFM/RLL support", cochez "ATA/IDE/MFM/RLL support".
Dans la sous-sestion "IDE, ATA and ATAPI Block devices" : cochez  "Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support", "Include IDE/ATA-2 DISK support", "Generic PCI IDE Chipset Support", "Sharing PCI IDE interrupts support", "Generic PCI bus-master DMA support" et "Use PCI DMA by default when available".
13.- Section "SCSI support" : cochez "SCSI support"  (CHECK needed for USB sticks ?)
14.- Section "Fusion MPT device support" : décochez tout
15.- Section "I2O device support" : décochez tout
16.- Section "Network device support" : cochez "Network device support" et dans la sous-section "Ethernet (10 or 100Mbit)", cochez  "SiS 900/7016 PCI Fast Ethernet Adapter support"
17.- Section "Amateur Radio support": décochez tout
18.- Section "IrDA (infrared) support" : décochez tout
19.- Section "ISDN subsystem" : décochez tout 
20.- Section "Old CD-ROM drivers (not SCSI, not IDE)" : décochez tout
21.- Section "Input core support" : sélectionner Keyboard support,    Mouse support, (1024) Horizontal screen resolution                                                            (768) Vertical screen resolution, Event Interface support.
22.- Section "Character devices" : sélectionner Virtual terminal, Support for console on virtual terminal, Unix98 PTY support
23.- Section "Multimedia devices" : tout décocher
24.- Section "File systems" : sélectionner "Ext3 journalling file system support", DOS FAT fs support,  DOS FAT fs support, Second extended fs support. Dans la sous-section "Network File System" : décocher tout. Dans la sous-section "Partition Types", décocher tout. Dans la sous-section "Native Language support", cocher "NLS UTF8" 
25.- Section "Console drivers" : cocher "VGA text Console", "Video mode selection support", dans la sous-section "Frame-buffer support", cocher  "Support for frame buffer devices (EXPERIMENTAL)" et "VESA VGA graphics console"
26.- Section "Sound"  : cocher "Sound card support", "OSS Sound Modules"
27.- Section "USB support" : Cocher "Support for USB", Preliminary USB device filesystem,  OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support, USB Human Interface Device (full HID) support, HID input layer support.
28.- Section "Bluetooth support" : décocher tout.
29.- Section "Kernel hacking"  : décocher tout (0 par défaut pour Kernel messages buffer length shift)
30.- Section "Cryptographic options"  : décocher tout
31.- Section "Library routines" : décocher tout

Quittez (Exit) et enregistrez votre configuration.

Votre noyau est à présent configuré. Notez que ces paramètres (du 21 au 31) ne sont pas fiables et n’ont pas été encore testés.

Quitter l’interface de configuration et enregistrer vos paramètres sous un nom choisi pour pouvoir le re-modifier la fois suivante, si besoin.

5. Compiler le noyau

lancez la commande :

make dep

Enfin lancez la commande qui compilera le noyau :

make vmlinux

Le résultat retournera le noyau, un fichier vmlinux

6. Intégrer le noyau dans une distribution

Il ne reste plus qu’à renommer le fichier vmlinux en kernel.2x00 que vous placerez à la racine de la carte CF sur une distribution existante comme celle qui nous intéresse ici : Linux-2200.

L’objectif de cet article est uniquement de créer le noyau. Les paramètres à modifier sont définis dans cette page.