====== Compiler son propre kernel ======


Ce tuto est basé sur [[http://forums.frugalware.org/index.php?t=msg&goto=6361&rid=0#msg_6361|celui de Crazy]] posté sur le forum officiel le dimanche 8 avril 2007.

===== Prérequis =====


Premièrement, vous n'avez pas besoin du paquet kernel-source car nous allons en créer un pour votre kernel personnalisé.

Ensuite vous aurez besoin d'une configuration valide pour le kernel que vous voulez compiler qui n'a pas besoin d'être la dernière version stable. 

Prenons les outils nécessaires :

  #  pacman -S pacman-tools

  #  repoman update

Créer un répertoire de travail comme:

  $  mkdir ~/kernel
  $  cd ~/kernel

===== Création du FrugalBuild =====


Ecrivez votre FrugalBuild dans ce répertoire

exemple pour un kernel stable :

  pkgver=2.6.20
  pkgrel=1
  _F_kernel_name="-multimedia"
  _F_kernel_patches=(http://people.redhat.com/mingo/realtime-preempt/older/patch-2.6.20-rt8)
  Finclude kernel

Ceci va compiler le kernel 2.6.20+rt-patch sans les patchs stable XX. Si vous savez si vos patchs fonctionnent avec les patchs 'stable .XX' alors ajoutez :

  _F_kernel_stable=X

Où X est le numéro de release STABLE. Par exemple :

  _F_kernel_stable=6

Ceci va compiler un kernel 2.6.20.6 + vos patchs

Lorsque vous compilé un kernel personnalisé, vous devriez le compiler pour votre CPU (que vous devez indiquer dans votre config). Puis ajoutez:

  _F_kernel_dontsedarch=1

au FrugalBuild.

===== Les patchs =====

Vous pouvez ajouter plus d'une URL de patchs ou de patchs à to _F_kernel_patches. Comme par exemple:

  _F_kernel_patches=(http://baz.org/foo.patch \
                          bar1.patch foo2.diff \
                        ftp://my.ftp.org/foo/my.patch)

**NOTE**: Les patchs sans URL doivent se trouver dans le répertoire de travail. (dans notre exemple ~/kernel ).


===== Création de la config du kernel =====

Maintenant vous en avez fini avec le FrugalBuild mais il vous reste à faire une config :-).

Si vous en avez déjà une, mettez cette config dans le répertoire ~/kernel, dans le cas contraire faites juste:

  touch ~/kernel/config

Maintenant lancez :

  makepkg -Hgdu

Ceci va télécharger le tarball du kernel + vos patches.

  cd src

et décompressez le tout (kernel, patches..etc)

  cd linux-*

et patchez avec vos_patches.

Si vous aviez déjà une config, faîtes:

  cp ../config .config && make oldconfig
  cp .config ~/kernel/config && cd ~/kernel && rm -rf src pkg

Si vous n'en aviez pas, faîtes:

  make defconfig && make menuconfig 

et créez votre config, sauvegardez la et :

  cp .config ~/kernel/config && cd ~/kernel && rm -rf src pkg

OK maintenant nous avons ce qu'il faut et nous pouvons compiler le kernel.

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

lancez

  makepkg -Hcu

et attendez que le kernel soit compilé :-).

===== Utiliser votre tout nouveau kernel personalisé =====


Une fois terminé, vous aurez 3 fichiers *.fpm dans le répertoire ~/kernel.

En tant que root (ou avec sudo) faites:

  pacman -U *.fpm

Une dernière chose avant de rebooter :-): vous devez ajouter une ligne pour votre kernel au fichier /boot/grub/menu.lst.

Comme :

  title My New Cool RT Kernel - 2.6.20-multimedia-fw1
  kernel (hd0,0)/boot/vmlinuz-2.6.20-multimedia-fw1 root=/dev/XXX ro vga=791

Sauvegardez le fichier et vous pourrez rebooter.

En cas de problèmes vous pourrez toujours rebootez sur l'ancien kernel et réparer les erreurs, ou demander sur le forum ou reporter un bug au mainteneur du kernel_patcheset.



===== Notes concernant les kernels rc ou git =====

Pour ce qui est des kernel rc ou git, vous pouvez les compiler également.

  *Si vous voulez compiler le dernier patchset rt ( qui est pour le 2.6.21-rc6 au moment de l'écriture de ce tuto) ajoutez ceci au FrugalBuild :

  _F_kernel_rc=X

Où X est le numéro RC. Exemple :

  _F_kernel_rc=6

Ceci va compiler le kernel 2.6.21-rc6 + vos patches.

**NOTE**: Le kernel est toujours appelé 2.6.20.

La cause est que nous utilisons vanilla .20 + le patch rcX ( ce qui vous évitera de télécharger environ 40 Mo à chaque fois que vous compilez ou recompilez ce kernel )

  *Si vous voulez le dernier kernel 'git' snaphot, alors ajoutez :

  _F_kernel_git=X

Où X est le numéro git snapshot. Exemple:

  _F_kernel_git=1

**NOTE**: Si vous compilez des kernels 'git', les 2 fonctions _F_kernel_rc=X et _F_kernel_git=X *need* doivent être présentes.

Dans cet exemple vous compilerez le kernel 2.6.21-rc6-git1

En espérant que cela vous aidera à compiler votre kernel perso.I

Retrouvez plus d'infos avec 'man kernel.sh' et la page des [[::frugalbuild_kernel|FrugalBuild pour kernel]].