Prochaine révision | Révision précédente |
dev:arm:distribution-linux-minimale [2013/01/04 12:53] – créée root | dev:arm:distribution-linux-minimale [2021/02/01 21:51] (Version actuelle) – modification externe 127.0.0.1 |
---|
====== Construction d'une distribution Linux minimale ====== | ====== Construction d'une distribution Linux minimale ====== |
| |
Nous cherchons ici a construire une distribution GNU/Linux minimale pour une platerforme ARM9. | 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: | 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 [[:dev:outils:eldk|ELDK]] sera utilisée. | 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 [[:dev:outils:eldk|ELDK]] sera utilisée. |
| |
[[:dev:outils:qemu|Qemu]] permettra de tester la distribution par émulation de la plateforme matérielle. | [[:dev:outils:qemu|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 [[:dev:outils:eldk]]. Ici pour une architecture ARM9 la chaine à installer est la chaine ''armv5te''. |
| |
===== Définition des variables d'environnement ===== | ===== Définition des variables d'environnement ===== |
La compilation croisée 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 créer un script bash: | 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: |
| |
| <code bash> |
| 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 |
| </code> |
| |
| Exécuter le fichier précédemment modifié dans le shell courant: |
| <code bash> |
| yoann@hermes:~/dev/tools/eldk-5.3/armv5te$ source ./environment-setup-armv5te-linux-gnueabi |
| </code> |
| |
| Vérifier que les variables sont bien définies dans l'environnement courant |
| <code bash> |
| 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- |
| ... |
| </code> |
| |
| ===== Compiler le noyau ===== |
| Les étapes de compilation du noyau sont disponible ici [[:linux:compilation:noyau|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: |
| |
| <code bash> |
| yoann@hermes:/usr/local/src/kernels/linux-2.6.36.4$ make versatile_defconfig |
| </code> |
| |
| Lancer l'assistant de configuration du noyau pour activer le support EABI. |
| <code bash> |
| yoann@hermes:/usr/local/src/kernels/linux-2.6.36.4$ make menuconfig |
| </code> |
| Dans le menu principal selectionner ''Kernel features %%-->%%'' et activer l'option ''Use the ARM EABI to compile the kernel''. |
| |
| Lancer la compilation |
| <code bash> |
| make V=1 |
| </code> |
| |