Linux : Compiler un noyau x86_64 avec un environnement x86

Cela fait un long moment que je n’ai rien posté, je reviens donc avec une petite astuce qui, je l’espère, pourra vous être utile.

Il y a peu j’ai récupéré mon fixe qui détient une Gentoo depuis quelques années, elle n’a pas été mise à jour depuis Janvier 2009. Je m’engage donc dans la mise à jour de certains paquets sans vraiment chercher à comprendre. Quelques jours plus tard, je reboote la machine et c’est le drame : udev n’est pas supporté par mon vieux kernel (2.6.25).

Solution de secours, je sors mon arme ultime : une Backtrack 4. C’est en tentant de faire mon chroot que je remarque l’échec final : les deux systèmes n’ont pas la même architecture.

Pas de problème, je vais compiler le noyau sans chroot … Mais heu … Comment compiler un noyau x86_64 sur un environnement x86 ? La Cross-Compilation nous vient de suite à l’esprit. Cependant, devoir recompiler binutils, gcc et autres avec les toolchains amd64 ne me donne pas envie … C’est alors que je découvre le mode multilib de GCC : on peut spécifier de compiler en 32 ou 64 bits avec le flag -m (-m32 ou -m64).

A cela nous combinons l’inverse de l’astuce qui se trouve ici et on obtient ceci :

$ apt-get install gcc-multilib
$ mkdir ~/bin
$ (echo '#!/bin/sh'; echo 'exec gcc -m64 "$@"';) > ~/bin/x86_64-linux-gnu-gcc
$ chmod +x ~/bin/x86_64-linux-gnu-gcc
$ for i in ar ld nm objcopy strip; do ln -s `which $i` ~/bin/x86_64-linux-gnu-$i
$ done

Et maintenant, vous pouvez compiler tranquillement votre noyau x86_64 :
UPDATE : Pensez à ajouter ~/bin à votre variable $PATH !

usr/src/linux $ make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- menuconfig
usr/src/linux $ make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu-

Une fois le travail effectué, vous pouvez bouger x86/boot/bzImage vers /boot. Enjoy it !

VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
Leave a comment

2 Comments.

  1. Quand je dis que GCC c’est un monstre. Personnellement je n’avais jamais eu l’esprit tordu de compiler un noyau amd64 sur un x86. Merci pour se billet ça peut s’avérer utile pour d’autres applications.

Leave a Reply


[ Ctrl + Enter ]