Nous cherchons ici a construire une distribution GNU/Linux minimale pour une platerforme ARM9 (Versatile). Ce type de plateforme est bien connue, cela nous permettra de l'émuler facilement.
Une distribution GNU/Linux minimale s'articule autour:
Pour construire une distribution minimale s'exécutant sur une plateforme ARM il faudra mettre en place une chaine de compilation croisée x86→ARM9. C'est cette chaine qui va nous permettre de compiler le noyau et les programmes contenus dans le système de fichier racine. Ici la chaine pré-compilée ELDK sera utilisée.
Qemu nous permettra de tester la distribution par émulation de la plateforme matérielle.
L'installation de la cross-toolchain est détaillée dans le document eldk. Ici pour une architecture ARM9 la chaine à installer est la chaine armv5te
.
La compilation croisée du noyau nécessite que certaines variables soient positionnées. Pour ne pas avoir à les répéter lors de chaque appel des commandes de compilation, elles peuvent être définies au niveau de l'environnement de l'utilisateur. Pour cela on peut modifier le script de définition de l'environnement fournit par ELDK:
yoann@hermes:~/dev/tools/eldk-5.3/armv5te$ cp environment-setup-armv5te-linux-gnueabi environment-setup-armv5te-linux-gnueabi.backup yoann@hermes:~/dev/tools/eldk-5.3/armv5te$ echo 'export ARCH=arm' >> environment-setup-armv5te-linux-gnueabi yoann@hermes:~/dev/tools/eldk-5.3/armv5te$ echo 'export CROSS_COMPILE=arm-linux-gnueabi-' >> environment-setup-armv5te-linux-gnueabi
Exécuter le fichier précédemment modifié dans le shell courant:
yoann@hermes:~/dev/tools/eldk-5.3/armv5te$ source ./environment-setup-armv5te-linux-gnueabi
Vérifier que les variables sont bien définies dans l'environnement courant
yoann@hermes:~/dev/tools/eldk-5.3/armv5te$ printenv AS=arm-linux-gnueabi-as OECORE_TARGET_SYSROOT=/home/yoann/dev/tools/eldk-5.3/armv5te/sysroots/armv5te-linux-gnueabi LDFLAGS=-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed AR=arm-linux-gnueabi-ar ORBIT_SOCKETDIR=/tmp/orbit-yoann TARGET_PREFIX=arm-linux-gnueabi- ...
Les étapes de compilation du noyau sont disponible ici compiler-noyau. La spécificité dans le cas présent est que le noyau est compilé sur la machine hôte (x86) mais est destiné à s'exécuter sur une machine ARM9. Les options de compilations importantes pour le noyau ont été placées dans l'environnement. Ce sont les option $ARCH
et $CROSS_COMPILE
.
Télécharger et décompresser les sources. Les plateformes supportées par le noyau bénéficient de fichiers de configuration par défaut. C'est le cas de la Versatile basée sur le processeur ARM9. Nous allons utiliser ce fichier de configuration présent sous le répertoire ./arch/arm/configs
des sources. Une petite modification doit être apportée toutefois pour permettre au noyau d'exécuter du code EABI.
Initialiser le fichier de configuration du noyau à partir du fichier de configuration /arch/arm/versatile_defconfig:
yoann@hermes:/usr/local/src/kernels/linux-2.6.36.4$ make versatile_defconfig
Lancer l'assistant de configuration du noyau pour activer le support EABI.
yoann@hermes:/usr/local/src/kernels/linux-2.6.36.4$ make menuconfig
Dans le menu principal selectionner Kernel features -->
et activer l'option Use the ARM EABI to compile the kernel
.
Lancer la compilation
make V=1