mercredi 8 juin 2011
[Kernel 2.6.39.1/x86_64] Compiler un noyau pour x86_64 depuis un environnement x86
Par david techer, mercredi 8 juin 2011 à 12:05 :: Xen

Seul souci, cette machine dispose d'une Ubuntu 8.04 32 bits
La solution a été trouvée a partir de l'url suivante http://blog.kdecherf.com/2010/04/19/linux-compiler-un-noyau-x86_64-avec-un-environnement-x86/Il faut donc procéder aux étapes fournies dans la page en question. Il faudra ajouter objdump dans la boucle for (chose que l'auteur a oublié d'ajouter mais ça c'est pas grave)
Du coup, celà  donneraapt-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 objdump strip; do ln -s `which $i` ~/bin/x86_64-linux-gnu-$i; done export PATH=/root/bin:$PATH
Récupération de la branche stable/2.6.39.1
root@monroe:/opt# git clone git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen.git linux_xen_2.6.39.x-stable && cd linux_xen_2.6.39.x-stable && git checkout -b stable/2.6.39 .x origin/stable/2.6.39.x Initialized empty Git repository in /opt/linux_xen_2.6.39.x-stable/.git/ remote: Counting objects: 2084227, done. remote: Compressing objects: 100% (324815/324815), done. remote: Total 2084227 (delta 1743703), reused 2080470 (delta 1740014) Receiving objects: 100% (2084227/2084227), 509.02 MiB | 1716 KiB/s, done. Resolving deltas: 100% (1743703/1743703), done. Checking out files: 100% (36664/36664), done. Branch stable/2.6.39.x set up to track remote branch refs/remotes/origin/stable/2.6.39.x. Switched to a new branch "stable/2.6.39.x"On vérifie
root@monroe:/opt/linux_xen_2.6.39.x-stable# head -n4 Makefile VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 39 EXTRAVERSION = .1
Compilation
On se fait un petit fichier .config (make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- menuconfig
) bien comme il faut et ensuite
export TARGET=/opt/build_xen_2.6.39.x mkdir -pv $TARGET/boot export INSTALL_PATH=$TARGET/boot export INSTALL_MOD_PATH=$TARGET cp ../.config . grep -i configfs_fs .config echo "compilation" > /tmp/date.log date >> /tmp/date.log; make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- -j8 bzImage modules date >> /tmp/date.log echo "installation" >> /tmp/date.log date >> /tmp/date.log make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- -j8 modules_install install date >> /tmp/date.log
Divers avant déploiement
On supprime ensuite le superflux dans bootroot@monroe:/opt/linux_xen_2.6.39.x-stable# cd $TARGET/boot root@monroe:/opt/build_xen_2.6.39.x/boot# ls -al total 9660 drwxr-xr-x 2 root root 4096 2011-06-09 10:12 . drwxr-xr-x 4 root root 4096 2011-06-09 10:12 .. lrwxrwxrwx 1 root root 16 2011-06-09 10:12 config -> config-2.6.39.1+ -rw-r--r-- 1 root root 125181 2011-06-09 10:12 config-2.6.39.1+ lrwxrwxrwx 1 root root 20 2011-06-09 10:12 System.map -> System.map-2.6.39.1+ -rw-r--r-- 1 root root 3773722 2011-06-09 10:12 System.map-2.6.39.1+ lrwxrwxrwx 1 root root 17 2011-06-09 10:12 vmlinuz -> vmlinuz-2.6.39.1+ -rw-r--r-- 1 root root 5956432 2011-06-09 10:12 vmlinuz-2.6.39.1+ root@monroe:/opt/build_xen_2.6.39.x/boot# rm -vf config System.map vmlinuzOn pourra aussi faire du ménage dans
$TARGET/lib/modules/2.6.39.1+
Avant de déployer sur la machine-cible, si on dispose de pbzip2 pour la compression, il suffira de faire
root@monroe:/opt/build_xen_2.6.39.x# tar -cf ../xen_kernel.2.6.39.1+.tar.bz2 --use-compress-prog=pbzip2 .
Remarque: Personnellement depuis que j'ai découvert pbzip2, j'en suis assez fier car ca permet d'optimiser le temps de compression
Une fois l'arborescence déployée sur la machine-cible, il faudra penser à Â- générer un initrd () sur la machine cible
mkinitramfs -o /boot/initrd.img-2.6.39.1+ 2.6.39.1+
- Mettre à  jour son grub
update-grub2