
====== Présentation: ======
 
Le but de ce document est d'expliquer comment recompiler et installer un kernel en utilisant éventuellement un patchset beyond ou emission pour ajouter le support de certaines fonctions.
Cette explication n'est valable que pour Archlinux car elle fait appel aux outils de compilation propre à cette distribution (abs).


===== Le kernel CK ou ck-sources ou CKO, qu'est-ce que c'est ? =====

Le patchset CK de Con Kolivas est la base de beyond et emission.

Voici comment Iphitus, l'auteur de Beyond décrit ce patchset [[http://iphitus.blogspot.com/2005/10/ck-why.html|sur son blog]].

----

'' " Pourquoi CK ? 

Mon patchset ArchCK (devenu depuis beyond) est une combinaison du travail de beaucoup d'autres: fbsplash de Spock, Suspend2 de Nigel, reiser4 de Hans et beaucoup d'autres projets.
A la base de ArchCK, il y a le travail d'un Australien, Con Kolivas dont j'ai repris le patchset CK.

Le but du patchset CK est d'améliorer l'interactivité et la réactivité ([[http://kerneltrap.org/node/5415|voir détails ici]])

Pour les améliorer, Con inclue plusieurs choses comme des patchs qui interviennent sur la gestion du swap et de la ram. L'autre point fort du patchset de Con est son planificateur de cpu: le planificateur en escalier (Staircase sheduler).
De telles améliorations sont difficiles à mesurer, je vais donc vous présenter que mes observations de son efficacité.

Avec un kernel standard (vanilla) et son planificateur, je peux mettre en pause et lire de la musique avec MPD ou un autre lecteur multimedia très facilement. Habituellement, tout cela ne coûte qu'un peu d'activité du disque dur comme quand je lance un gros programme ou que je passe de X à une console virtuelle.
Windows est parfait exemple de ce phénomène. A chaque accès au disque dur il résulte un certain ralentissement de windows.

Avec CK, je peux démarrer plusieurs programmes en même temps, et faire toutes sortes de choses sans aucun ralentissement. La différence est vraiment impressionnante. Vous pouvez compiler un kernel, faire une mise à jour de pacman, avec un minimum d'interruptions dans les autres programmes.

Go give it a shot, I am sure you will enjoy the benefits. " ''

----


===== Le kernel Beyond ou Beyond-sources, qu'est-ce que c'est ? =====

Beyond est né d'un rapprochement entre les patchs archck et nitro, c'est un dérivé du patchset CKO qui contient des fonctions supplémentaires. Le patchset CK de Con Kolivas est la base de beyond-sources. \\
Le site du patch beyond-sources se trouve à cette adresse http://iphitus.loudas.com/beyond.html

===== Le kernel E-Mission, qu'est-ce que c'est ? =====

E-Mission Sources est basé sur Lockless Pagecache, GenPatches, et CK.\\
Le but de ce patchset est d'offrir les dernières fonctionnalités, diminuer la latence et améliorer l'interactivité. L'autre objectif de E-Mission Sources est la stabilité. Chaque version est longuement testée.\\
Le site du patch beyond-sources se trouve à cette adresse http://evolution-mission.org/viewforum.php?f=8

----

Dans un premier temps, les sources du kernel 2.6.X sont téléchargées (pas celles du 2.6.X.y). Ensuite la dernière version du patchset beyond est téléchargée((si on choisi d'installer un de ces patchs)).
__**Les patchs beyond et emission ajoutent en général toutes les nouveautés du dernier kernel 2.6.X.y**__


===== Prérequis nécessaires: =====

  * utilisation d'abs (savoir lancer un makepkg sur un PKGBUILD)
  * modification du bootloader (savoir adapter lilo.conf ou menu.lst à un nouveau kernel)

====== Remarques avant de commencer: ======

  * Toutes les opérations doivent être réalisées en user (pas en root)
  * mkinitcpio ne doit être installé que si vous n'êtes pas en mesure de compiler en dur les drivers nécessaires
  * Pour le démarrage graphique animé avec gensplash, il faut installer le paquet 'initscripts-gensplash'


====== Note sur l'utilisation de mkinitcpio: ======

En recompilant un kernel, on peut choisir entre compiler les drivers en dur dans le noyau (dans l'image /boot/vmlinuz) ou sous la forme de modules (stockés dans le répertoire /lib/modules/2.6.16...).

Lors du démarrage, linux a besoin des drivers pour accéder à votre disque dur (ide/scsi/usb) mais aussi des drivers de votre système de fichiers (ext3, xfs, reiserfs, jfs etc...)

Deux choix se présentent alors:
  - Vous compilez ces drivers en dur (dans /boot/vmlinuz): c'est la solution la plus performante et la plus simple
  - Vous compilez ces drivers en modules (dans /lib/modules): il faut alors utiliser initramfs pour charger ces modules avant le démarrage

Ce PKGBUILD vous demandera lors de la compilation si vous souhaitez ou non utiliser initcpio.

Répondez 'oui' si vous trouvez une bonne raison :p

Si vous utilisez gensplash, vous pouvez créer une image initramfs ultérieurement avec la commande: 

splash_geninitramfs -v -g /boot/fbsplash-theme-1024x768 -r 1024x768 theme

====== Installation du kernel ======




===== Téléchargement des sources =====


Installer le PKGBUILD nécessaire à la compilation du kernel:
<code>pacman -S kernel-sources</code>
Le paquetage se trouve sur le dépôts [archlinuxfr] i686 et x86_64.

<code>[archlinuxfr]
Server = http://repo.archlinux.fr/i686</code>

<code>[archlinuxfr]
Server = http://repo.archlinux.fr/x86_64</code>

Puis, se placer dans le répertoire /var/abs/local/kernel-sources:
<code>$ cd /var/abs/local/kernel-sources</code>


__''note: vous devez avoir les droits d'écriture sur le dossier: ajoutez si besoin votre utilisateur au groupe "abs"''__


<code>$ makepkg
==> Entering fakeroot environment
==> Making package: kernel26fr-beyond-PERSO 2.6.16-1 (Wed May 24 10:45:20 CEST 2006)
==> Checking Runtime Dependencies...
==> Checking Buildtime Dependencies...
==> Retrieving Sources...
==>     Found logo_linux_clut224.ppm in build dir
==>     Found config in build dir
==> WARNING: MD5sums are missing or incomplete.  Cannot verify source integrity.
==> Extracting Sources...
==> Removing existing pkg/ directory...
==> Starting build()...

    Quel patch voulez-vous utiliser pour le kernel 2.6.19 ?
     1) emission   2) beyond   3) vanilla (sans aucun patch)
     4) ck   5) cks 

==>  Entrez le numero du patch choisi
==>  ----------------------------------------------
==> 
==> Patchs utilisés:
    patch-2.6.19-beyond1pre2
</code>

===== Extraction des sources =====

Lors de la première compilation, le programme télécharge automatiquement les sources du kernel et le patch choisi, puis les décompressera dans le répertoire src/.

A la prochaine compilation, il ne sera plus nécessaire((sauf si vous testez un autre patch)) d'extraire les sources (gain de temps), la compilation continuera directement.
<code>
==>  Le kernel a déjà été extrait, voulez-vous le ré-extraire ?: o/n [n]
    (obligatoire si vous utilisez un autre patch)
==>  ----------------------------------------------
==> 
</code>



===== Configuration du kernel =====


Le kernel peut être modifié pour être optimisé. La configuration par défaut fonctionnera sur toutes les machines, mais l'utilisation d'une configuration personnalisée permet d'alléger le kernel et donc de le rendre plus rapide.
Si c'est votre première compilation, choisissez 'config' pour obtenir les mêmes réglages que le kernel officiel Arch. 

Vous pourrez trouver [[:tipsntricks#exemples_de_fichiers_config_pour_le_kernel_linux]] d'autres utilisateurs.

Si vous possédez un fichier de configuration optimisé pour votre kernel, il vous sera proposé dans la liste si son nom commence par 'conf'.
A chaque compilation, le fichier de configuration est sauvé sous la forme config-version-patch-aa-mm-jj-hh. Vous pourrez donc retrouver votre ancienne configuration à  la prochaine compilation en choisissant 0.
<code>
Si vous voulez utiliser votre config perso renommez le fichier en 'conf*'
-------------------------------------------------------------------------
Tapez le numéro du fichier de configuration à utiliser
-------------------------------------------------------------------------
  0:  config-2.6.19-vanilla-06-12-03-12h
  1:  config-2.6.19-vanilla-06-12-03-11h
  2:  config-2.6.19-vanilla-06-12-03-00h
  3:  config-patch-2.6.19-beyond1pre2-06-12-02-19h
  4:  config-patch-2.6.19-beyond1pre1-06-12-01-20h
  5:  config-patch-2.6.19-beyond1pre1-06-12-01-15h
  6:  config
(Tapez 0 pour utiliser le fichier le plus récent: (config-2.6.19-vanilla-06-12-03-12h
==> 0
</code>

===== Nom du kernel =====

Choisissez ensuite le nom à donner à votre kernel:
<code>==>  Entrez un nom précédé d'un tiret pour personnaliser votre kernel.
Il aura la forme "2.6.16-beyond-PERSO": [-PERSO]
==>  ----------------------------------------------
==> -PERSO
==> Le kernel s'appelera: 2.6.16-beyond-PERSO
</code>

Changez le nom, vous pourrez ainsi installer plusieurs kernels en parallèle sur votre système.

===== Support d'initcpio =====

Choisissez ensuite d'utiliser ou non une image initcpio (non recommandé).
<code>
Voulez-vous générer une image mkinitcpio (inutile si vous compilez le nécessaire en dur) ? o/n [n]
==> n
</code>

===== Démarrage graphique animé (gensplash) ou logo=====

Si vous avez choisi un patch comme emission, beyond ou ck, il est possible d'utiliser un démarrage graphique animé avec votre nouveau kernel:\\
- Répondez "o" à la question suivante, si vous possédez déjà une image gensplash (n'oubliez pas dans ce cas de l'ajouter à la configuration du bootloader)
- Répondez "n" à la question suivante, si vous souhaiter paramétrer gensplash pour la première fois, ou si ne voulez pas du tout de gensplash.
<code>
==>  Grâce au patch beyond ce kernel supporte le démarrage graphique (gensplash).
Souhaitez-vous réutiliser une image gensplash existante du type /boot/kernel26-emission-PERSO.img ? o/n [o]
==>  ----------------------------------------------
==> 
</code>

Si vous avez répondu "non" à la question précédente, vous avez à présent le choix d'utiliser gensplash ou non
<code>==>  Voulez-vous modifier/ajouter gensplash pour ce kernel ?
(Nécessite le paquetage initscripts-gensplash) : o/n [n]
==>  ----------------------------------------------
==>o </code>
\\
//__Note:__ En répondant "non", vous aurez la possibilité d'activer l'affichage d'un simple logo au démarrage//



Cette partie va permettre de configurer le kernel pour le support de gensplash et de créer une image contenant le thème gensplash que vous pourrez réutiliser lors de vos prochaines recompilations.

==== Choix du thème ====
Choisissez ici le thème gensplash (présent dans /etc/splash). darch est fournit de base avec gensplashutils. (voir [[http://wiki.archlinux.org/index.php/Gensplash#Getting_gensplash_themes|ici]] pour plus de thèmes)

<code>
==>  Entrez le nom du thème gensplash présent 
dans /etc/splash/ sur la machine de destination: [darch]
==>  ----------------------------------------------
==> Archlinux
</code>

==== Choix de la résolution ====
Choisisser une résolution compatible avec le thème et correspondant à votre écran.
Par défaut, le programme propose la résolution lue dans votre fichier de configuration.
<code>==>  Entrez la résolution du thème à utiliser: [1024x768]
==>  ----------------------------------------------
==> 1600x1200
</code>






==== Driver video pour le framebuffer====
L'affichage d'image lors du démarrage se fait grâce à un pilote video. Vous avez ici le choix entre VESA Standard habituellement le plus compatible ou VESA TNG((actuellement vesatng n'est disponible que pour le patch emission)) qui est plus performant.

<code>
==>  Par défaut, le kernel utilisera le driver VESA STANDARD (plus stable)
VESA TNG permet en revanche de changer la fréquence et la profondeur
d'affichage de la console et permet une résolution plus élevée.
Préférez-vous utiliser VESA TNG ? o/n[n]
==>  ----------------------------------------------
==> o
</code>

=== Choix du mode VGA ===
Choisissez le mode vga à utiliser
  * Avec VESA TNG
<code>
==>  Choisissez le mode vga (bits@Hz): [32@70]
==>  ----------------------------------------------
==> 32@70
</code>

  * Avec VESA STANDARD
<code>         +---------------------------------------------------+
              | 640x480 800x600 1024x768 1280x1024 1600x1200
         -----+----------------------------------------------
          256 |     769     771      773     775	796
          32K |     784     787      790     793	797
          64K |     785     788      791     794	798
          16M |     786     789      792     795	799
         +---------------------------------------------------+

==>  Facultatif: Choisissez un des modes vga ci-dessus: [788]
==>  ----------------------------------------------
==> 799
</code>

=== Choix de l'éditeur de configuration ===

Le programme propose ensuite plusieurs éditeurs de configuration du kernel.
Si vous ne savez pas encore ou ne voulez pas modifier la configuration, choisissez l'option '0'.
Les choix 1, 2 et 3 vous permettront de choisir visuellement les options de compilation de votre kernel.
<code>    --------------------------------------------------------------------
        Choix de l'éditeur de configuration
    --------------------------------------------------------------------
    0: ne pas modifier (compiler directement config-06-05-22-08h)
    1: xconfig    2: gconfig    3: menuconfig   4: gvim   5: gvim --nofork

==>  Avec quel éditeur voulez-vous modifier la configuration du kernel ?
==>  ----------------------------------------------
==> 
</code>
__exemple avec xconfig :__

{{:howto:kernel:qconf.png|configuration du kernel avec xconfig}}

[[http://wiki.archlinux.fr/tipsntricks|Exemples de fichiers config pour le kernel linux]]

===== Compilation du kernel =====

Si vous avez déjà compilé une première fois le kernel, il n'est plus nécessaire de recompiler à l'identique ces mêmes modules. Tout le monde devrait répondre oui ici.

Répondez "n" pour fera un make clean avant de continuer.

<code>
Voulez-vous réutiliser les modules compilés précédemment (plus rapide) ? o/n [o]: 
---------------------------------------------
==> o
</code>

Dernière étape avant le début de la compilation:
<code>
Appuyez sur une touche pour commencer ou CTRL+C pour abandonner
---------------------------------------------
</code>

...la compilation du kernel et des modules s'effectue.
En cas  d'erreur critique, la compilation s'arrêterait d'elle même.
<code>
==> Removing info/doc files...
==> Compressing man pages...
==> Stripping debugging symbols from libraries...
==> Stripping symbols from binaries...
==> Generating .PKGINFO file...
==> Copying install script...
==> Generating .FILELIST file...
==> Compressing package...
==> Finished making: kernel26fr-beyond-PERSO  (Wed May 24 11:30:03 CEST 2006)
</code>



===== Installation du nouveau kernel =====


Bravo ! le paquetage a été créé. Passez maintenant en root pour l'installer:
<code>
$ su
Password: 
# pacman -U kernel26fr-beyond-PERSO-2.6.16-1.pkg.tar.gz
loading package data... done.
checking for file conflicts... done.
installing kernel26fr-beyond-PERSO... done.
>>> Generating initrd for gensplash.   Please wait...
o Creating directory structure..
o Copying /sbin/splash_helper..
o Copying themes..
  - Archlinux
Warning: config file for theme 'Archlinux', resolution 1600x1200 does not exist!
o Creating initramfs image..
 ----------------------------------------
|  Utilisation de votre nouveau KERNEL:  |
 ----------------------------------------

* AVEC LILO dans /etc/lilo.conf:
    image=/boot/vmlinuz26beyond-PERSO
    append="video=vesa:ywrap,mtrr,1600x1200-32@70 splash=silent,theme:Archlinux console=tty1"
    initrd=/boot/fbsplash-Archlinux-1600x1200
>> exécutez la commande '# lilo' avant de redémarrer.

* AVEC GRUB dans /boot/grub/menu.lst:
    kernel (hd0,0)/vmlinuz26beyond-PERSO root=/dev/hda3 video=vesafb:ywrap,mtrr,1600x1200-32@70 splash=silent,theme:Archlinux console=tty1
    initrd (hd0,0)/fbsplash-Archlinux-1600x1200
</code>


**Lisez bien le message au moment de l'installation. Il contient les lignes exactes à copier dans la configuration de votre bootloader !**
Note: actuellement, les installations sur une autre partition que hd0,0 ne sont pas reconnues. Changez donc (hd0,0) en ce qui convient à votre installation.

==== Modification du bootloader (grub ou lilo) ====
Le paquetage est maintenant installé. 
Dans votre répertoire /boot se trouve l'image du kernel suivante: '''vmlinuz26beyond-PERSO'''. C'est vers ce fichier que devra pointer votre bootloader.

exemple de configuration de grub:  '''fichier /boot/grub/menu.lst'''
<code>
title  Arch Linux  [linux 2.6 beyond splash]
root   (hd0,2)
kernel (hd0,0)/vmlinuz26beyond-PERSO1 hdb=ide-cd root=/dev/hda3 video=vesafb:ywrap,mtrr,1600x1200-32@70 splash=silent,theme:Archlinux console=tty1
initrd (hd0,0)/fbsplash-Archlinux-1600x1200
</code>

Remarque: quelle que soit la version du kernel et du patch que vous utiliserez à l'avenir, le kernel vmlinuz2616beyond-PERSO gardera le même nom. 

Vous n'aurez donc plus à  modifier le bootloader.

Pour distinguer vos différents kernels (si vous testez plusieurs configurations), il suffit de modifier le nom du kernel quand il vous est demandé (par exemple -TEST).

----------------
Evolution à  apporter au document:
  * détailler la configuration du kernel