===== Qu'est ce que le Noyau =====



===== Numérotation du Noyau =====

{{noyau.png|}}

=====Pourquoi compiler son noyau =====



===== Etapes pour compiler son noyau =====
==== Trouver l'archive ====

Choisissez la dernière version stable du noyau sur [[http://kernel.org|sur kernel.org]]. Ne prenez pas les pré-patch ni les snapshots, nous ne les traiterons pas ici. Les pré-patch du noyau sont des patch à appliquer aux sources d'un noyau pour l'uprgrader vers la version en cours de développement. Les snapshot quant à eux, sont les images des noyaux des développeurs.


L'archive téléchargée se présente sous la forme :

%%linux-x.x.xx.x.tar.bz2%%

Copiez cette archive dans un répertoire de travail.


==== Extraire l'archive ====

Il vous faut ensuite extraire cette archive :

  # tar xzvf linux*.tar.bz2

Ou bien :

  # tar xjvf linux*.tar.gz

Vous avez alors un répertoire linux* qui apparaît, vous devez vous rendre dedans pour la suite.

==== Trouver des patchs ====
==== Appliquer des patchs ====






==== Configurer le noyau ====
=== Utiliser l'ancienne configuration===

Pour vous faciliter les choses, vous pouvez vous baser sur la configuration actuelle de votre noyau afin de compiler le nouveau. Je suppose que votre noyau actuel est celui de votre distribution, le fichier de configuration a été copié dans le répertoire /boot, il s'appelle :

%%config-*-x.x.xx.x%%

Copiez ce fichier dans le répertoire des sources sous le nom :

%%.config%%

Ce qui écrasera le fichier de configuration générique déjà présent.

  $ cp /boot/config-*-x.x.xx.x .config
  $ make oldconfig

%%make oldconfig%% ne sert à rien si vous recompilez un noyau avec la même version que le fichier de config. ̈Par contre si les versions sont différentes, cette commande permet d'ajouter les éventuelles nouvelles options dans le fichier %%.config%%. Les valeurs par défaut sont souvent les bonnes.

=== Lancer l'interface de configuration ===

Il existe plusieurs méthodes pour configurer le noyau. L'ancienne consistait à éditer le fichier de conf et à modifier à la main. Nous avons maintenant des interfaces bien plus pratiques : menuconfig et xconfig. La différence? Menuconfig peut être lancé dans un terminal sans l'aide de X, il est aussi moins esthétique. Xconfig, lui, utilise les librairies graphiques gtk ou qt celon votre sytème.

Voici comment le lancer :

  $ make menuconfig

Commencez par vous balader dans les options de configuration si vous n'êtes pas encore familier de ce genre d'exercice. Si vous avez utilisé le fichier de config 'origine de votre distro, vous observerez que beaucoup de cases dont vous n'avez pas besoin sont cochées pour assurer la portabilité du noyau sur des machines différentes.

Des explications sont disponibles pour chaque module, à l'intérieur de menuconfig ou sous forme de références vers la section doc des sources du noyau, n'hésitez pas à les lire!

=== En module ou en dur? ===

On choisis dans menuconfig si l'on doit compiler les différentes parties du noyau en ou non et si on les inclus en module (M) ou en dur (*). Qu'est-ce que cela signifie?

Le noyau est composé d'un programme central, le noyau dur installé dans le répertoire /boot et de programmes périphériques, les modules que le noyau dur charge selon ses besoins. Les modules sont copiés dans /lib/modules.

Pour éviter les conflits, votre noyau d'origine use très largement des modules. C'est un possibilité puissante du noyau linux.

Vous devriez compiler en dur tous les modules dont vous êtes sûrs d'avoir besoin, ceux qui correspondent à votre matériel, ainsi que tout ce qui concerne vos système de fichier. Ceci à l'exception des drivers de carte graphique, puisque si vous les compilez en dur, il vous sera impossible par la suite d'en utiliser d'autres.

=== Des options utiles ===

(noyau 2.6.18 => à mettre à jour pour le 2.6.22)

D'une manière générale, posez-vous la question lorsque vous voyez le
commentaire "if unsure say "no"" de savoir quel est exactement le module en
question et si il vous est nécessaire. Par exemple, le support de ma puce
µguru est commenté de la sorte, je l'ai bien sûr activé quand même!

== Code maturity level options ==

Ici, vous pouvez cocher ou décocher le choix de modules supplémentaire du
noyau classé comme EXPERIMENTAL et alpha. Vous n'avez sans doute pas besoin
de tels module, le mieux est de regarder ce que le noyau de votre
distribution a activé comme module expérimental et si vous en avez ou non
besoin. Le cas échéant, il est plus prudent de décocher cette option.

=== General setup ===

Pas grand chose à manipuler ici. Lisez les commentaire sur les différentes
option et réfléchissez bien avant de modifier quoi que ce soit ici.

=== Loadable module support ===

Il est essentiel ici que "enable module support" soit activer. Cette option
va permettre d'utiliser des fichiers externes au noyau pour charger les
modules. Sans cela, il vous faudra compiler tous les modules en dur et vous
n'aurez plus la possibilité de rajouter des modules après coup (donc, oubliez
le rajout de drivers pour votre carte graphique, pas exemple)

Module unloading et automatique kernel module loading permettent
respectivement à l'utilisateur et au noyau de déchager et de chager des
module: à cocher!

=== Block layer ===

== Support for Large Block Devices et Support for Large Single Files ==

Si vous avez des disques de plus de 2 teraOctets, cochez ces options... Sinon, c'est "safely" de toute façon.

=== Processor type and features ===

Ici, choisissez votre processeur. Tous les autre types de processeurs
cochés par défaut peuvent être décochés

== Subarchitecture Type ==

Certainement, vous choisirez pc-compatible

== Processor family ==

Choisissez votre type de processeur. Généralement, les distro choississent i386 ou i486 pour la compatibilité, vous pouvez ici affiner ce paramètre en mettant votre type précis.

== Generic x86 support ==

à cocher pour les athlons et les PIII

== Preemption Model ==

Choisissez ici "Preemptible Kernel (Low-Latency Desktop)" pour un laptop.

== Local APIC support on uniprocessors ==

Mieux vaut le désactiver même si votre processeur le gère. Si vous avez des messages d'erreur de ce type:

%%spurious 8259A interrupt: IRQ7%%

Ils sont dus à ce module.

== High Memory Support ==

Si vous avez entre un et quatre gigas de mémoire ram, cochez 4 GB

== Timer frequency ==

Passez ici à 1000 Hz pour un laptop. Comme pour l'option preemption model, les distro choisissent par défaut l'option qui conviendra au plus grand nombre. Sauf si vous montez un serveur, passer à 1000 ameliorera vos perf.

== Firmware Drivers ==

Si vous n'avez pas un "DELL" (c'est une marque d'ordinateurs réputée), vous pouvez décocher les deux dernières options.

=== Power management options (ACPI, APM) ===

Activez "Legacy Power Management API" cela permettra à votre bureau d'etteindre l'ecran qund le système est inactif
"Software Suspend" permet la mise en veille.

== ACPI (Advanced Configuration and Power Interface) Support ==

Affinez ici les modules par rapport à votre matériel.

== CPU Frequency scaling ==

Ici, c'est la section spéciale bidouilleurs de l'extrême. Les overclockers y trouveront leur bonheur!

== Bus options (PCI, PCMCIA, EISA, MCA, ISA) ==

Vous pouvez ici activer ou désactiver le support du PCI-express, de l'ISA (ancienne norme avant l'apparition du PCI), etc
**PCI hotplug** vous permet de changer des cartes "à chaud" normalement, vous ne devez pas en avoir besoin!

=== Device Drivers ===

C'est là que nous avons certainement le plus de nettoyage à faire.

== Parallel port support ==

Le support des vieilles imprimantes sur port parallèle. À vous de voire si vous voulez le garder.

== Block devices ==

**Loopback device support**: activez si vous voulez pouvoir monter des images (.iso par exemple)

**Packet writing on CD/DVD media** :Le packet-writing consiste à utiliser un CDRW comme une clé USB ou une disquette. Cela permet d'y écrire sans utiliser cdrecord/cdrdao mais directement en plaçant les fichiers à graver dans le répertoire de montage du CD. (explication issue de lea-linux.org) Pratique, non?

== ATA/ATAPI/MFM/RLL support ==

Enlevez scsi émulation, qui est obsolète et le support pci-ide qui ne concerne que les carte d'extention pci pour disques ide (sauf si, bien sûr, vous avez ce genre de cartes) "support for sata" également ne doit pas être coché car obsolète. Le support SATA se trouve plus loin dans l'emulation SCSI

== SCSI device support ==

Attention, vous avez besoin du support SCSI pour les disques SATA! Dans tous les cas, ce n'est pas une bonne idée de décocher ce support.
Ici, si vous n'avez pas de périphériques scsi, vous pouvez presque tout décocher. Sauf " legacy /proc/scsi/ support "

== SCSI low-level drivers ==

C'est ici que vous allez configurer le support SATA. En fait, vous pouvez presque tout décocher si vous n'avez pas de disques SCSI et si vous en avez, vous ne devez garder que ce qui correspond à vos chip.

**Serial ATA (SATA) support**: C'est ici pour activer le SATA!

**AHCI SATA support** : pour les disque Maxtor qui supportent le ahci
Multiple devices driver support (RAID and LVM) :Si votre config est en RAID ou en LVM
Fusion MPT device support: Sauf si vous utilisez du SCSI et que vous y trouvez quelque chose qui vous intéresse, vous pouvez tout décocher

**IEEE 1394 (FireWire) support**: Activez le support du firewire si vous disposez de cela sur votre carte mère mais si vous n'avez pas de matériel qui l'utilise (camescope numérique, etc) vous pouvez tout aussi bien le désactiver.

**I2O support**:si vous n'avez pas ce genre de cartes, à desactiver

**ISDN support** :Si vous avez une carte idns (numeris), vous en avez certainement l'usage, sinon, décochez.

**Linux telephony support**:idem, si vous avez ce genre de carte, cochez cette option et paramétrez suivant votre matériel

**Input device support**: plein de truc ici comme le touchscreen (ecran tactile) les joysticks, etc

**Character devices**:encore énormément de choses ici:

**/dev/agpgart (AGP Support)**

**Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)** 

Choisissez les options qui conviennent à votre configuration: attention toutefois au driver ATI du noyau, s'il est compilé en dur, il interdira l'utilisation des drivers propriétaires d'ATI.

== Autres options du menu device ==

**Multimedia devices**:vous pouvez laisser coché comme module

**Video Capture Adapters**:vous y trouverez peut-être votre carte d'acquisition

**V4L USB devices**:ici vous pourrez trouver votre wecam

**Graphics support**:ici, vous pouvez garder frame buffer sous forme de module mais ne gardez que le module qui correspond à votre carte graphique.

**Sound**: ici, choisissez alsa et desactivez oss

**USB support**: ça se passe de commentaire

**MMC/SD Card support**:Mieux vaut l'activer, vous aurez peut être envie d'acheter un appareil photo et un lecteur de carte un de ces quatres...

== File systems ==

Activez tous les sistèmes de fichier linux, ext2, ext3, reseirfs, xfs

**DOS/FAT/NT Filesystems**: si vous avez besoin des systeme de fichier windows (au moins le vfat et dos), c'est ici. Le ntfs est supporté en écriture (option à cocher)

**Miscellaneous filesystems**: vous avez certainement beaucoup de choses à décocher ici!

**Network File Systems / CIFS support (advanced network filesystem for Samba, Window and other CIFS compliant servers)** : important si vous utilisez samba




==== Compiler le noyau ====

Vous serez heureux d'apprendre que vous venez de faire le plus dur. Nous allons passer au plus long : la compilation. pour compilez, tappez :

  $ make

Et allez vous préparer un café.

astuce : Si vous voulez continuer à vous servir de votre ordinateur pendant la compilation, attribuez au processus la priorité la plus basse :

  $ nice -n 19 make

Si vous possédez un processeur dualcœur ou biprocesseur (et que vous ne souhaitez pas trop utiliser votre PC pendant la compilation), il est plus intéressant de lancer la commande :

  $ make -j 2




==== Installer le noyau ====

À paritr de maintenant, vous devez passer en root.

**Installer les modules** :

  # make modules_install

**Copier le noyau central dans le répertoire /boot** :

  # cp vmlinuz /boot/vmlinuz-x.x.xx.x
  # cp System.map /boot/System.map-x.x.xx.x
  # cp .config /boot/config-x.x.xx.x

Exemple du contenu de /boot :
  boot.0300
  boot.0800
  boot_message.txt
  config -> config-2.6.23.12
  config-2.6.22.9
  config-2.6.23.12
  initrd.splash
  map
  README.initrd -> /usr/doc/mkinitrd-1.1.3/README.initrd
  splash.bmp
  System.map -> System.map-2.6.23.12
  System.map-2.6.22.9
  System.map-2.6.23.12
  vmlinuz -> vmlinuz-2.6.23.12
  vmlinuz-2.6.22.9
  vmlinuz-2.6.23.12

=== Créer une image initrd ===
=== Configurer le chargeur de démarrage ===
Il est utile de créer un lien symbolique vers le nouveau kernel et d'utiliser toujours ce lien symbolique dans Lilo ou Grub, et d'ajouter une entrée pour les vieux kernel.
  # cd /boot
  # ln -sf vmlinux-x.x.xx.x vmlinuz
  # ln -sf System.map-x.x.xx.x System.map
  # ln -sf config-x.x.xx.x config
== Lilo ==
Extrait d'un %%/etc/lilo.conf%%
  # nouveau kernel
  image = /boot/vmlinuz
    root = /dev/sda2
    label = Zenwalk
    initrd = /boot/initrd.splash
    read-only
  # ancien kernel y.y.yy.y
  image = /boot/vmlinuz-y.y.yy.y
    root = /dev/sda2
    label = Zenwalk-old1
    initrd = /boot/initrd.splash
    read-only
  # ancien kernel z.z.zz.z
  image = /boot/vmlinuz-z.z.zz.z
    root = /dev/sda2
    label = Zenwalk-old2
    initrd = /boot/initrd.splash
    read-only
Bien sûr ici **%%root =%%** est un exemple et est à adapter à votre configuration.
Ensuite il suffit de réinstaller Lilo :
  # lilo -v
== Grub ==

===== Configurer le noyau =====


**Note : Concernant le message d'erreur fréquent du kernel panic avec les noyaux 2.6, il est impératif de monter le système de fichier ext3 en YES c'est a dire directement dans le noyau et ne surtout pas utiliser en MODULE , faute de quoi vous ne rebooteriez pas avec votre nouveau noyau qui se trouve forcement sur une partition ext3. **

