Table des matières

Construction d'une distribution Linux minimale

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.

Installer ELDK

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.

Définition des variables d'environnement

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-
...

Compiler le noyau

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