Ceci est une ancienne révision du document !
Crosstool est un outil libre écrit par Dan Kegel et placé sous licence GPLv2. Il regroupe un ensemble de scripts permettant de construire une chaine de compilation croisée. Plus complexe à prendre en main qu'une chaine fournie sous forme de binaire telle que ELDK, crosstool apporte cependant plus de souplesse en s'adaptant aux cibles les plus spécifiques, en permettant au developpeur de choisir les versions du compilateur, des bibliothèques et du noyau avec lesquels la chaine sera construite. Crosstool ne fournit pas de chaine de compilation croisée contrairement à ELDK, il permet de la construire.
L'outil crosstool n'évolue plus. Pour générer des chaines de compilation croisée supportant des fonctionnalités rescentes voir l'outil Crosstool-NG.
Croostool est dsiponible sur le site Dan Kegel à l'adresse http://kegel.com/crosstool/crosstool-0.43.tar.gz
yoann@hermes:~$ cd /tmp/ yoann@hermes:/tmp$ wget http://kegel.com/crosstool/crosstool-0.43.tar.gz yoann@hermes:/tmp$ tar xf crosstool-0.43.tar.gz yoann@hermes:/tmp$ sudo mv crosstool-0.43 /opt/ yoann@hermes:/tmp$ cd /opt/crosstool-0.43/
Les scripts nécessaires à la génération de la chaine de compilation croisée sont directement présents dans le répertoire de l'application notamment le script all.sh. Parmis les fichiers on trouve:
Le répertoire dowload contiendra les paquets téléchargés par crosstool lors de la compilation de la chaine. Le répertoire patches contient les patchs applicables (le contenu de ce répertoire pourra être étendu si besoin).
Avant de pouvoir générer la chaine de compilation croisée il va falloir déterminer:
Un script de démonstration permet de générer une chaine de compilation croisée pour ARM: demo-arm.sh. L'affichage du script révèle:
Ici, on crée une copie du fichier de demo que l'on va légèrement modifier.
yoann@hermes:/opt/crosstool-0.43$ cp demo-arm.sh my-demo-arm.sh yoann@hermes:/opt/crosstool-0.43$ vi my-demo-arm.sh
Modifier la valeur de la variable RESULT_TOP pour générer la chaine de compilation croisée dans un répertoire du home utilisateur.
RESULT_TOP=$HOME/crosstool/arm-v1
On profite de la souplesse de Crosstool. On commente la dernière ligne générant une chaine avec gcc 4.1.0 et glibc 2.3.2tls et on introduit une ligne générant plutôt une chaine avec gcc 4.2.2 et glic 2.3.2.
#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest eval `cat my-arm.dat gcc-4.2.2-glibc-2.3.2.dat` sh all.sh --notest
Le script utilise à présent deux fichiers n'existant pas encore: gcc-4.2.2-glibc-2.3.2.dat et my-arm.dat. Nous allons les créer à partir des fichiers de configuration existants.
Le fichier de configuration gcc-4.2.2-glibc-2.3.2.dat n'existe pas encore, on le crée à partir d'un fichier existant:
yoann@hermes:/opt/crosstool-0.43$ cp gcc-4.1.1-glibc-2.3.2.dat gcc-4.2.2-glibc-2.3.2.dat yoann@hermes:/opt/crosstool-0.43$ vi gcc-4.2.2-glibc-2.3.2.dat
Modifier la valeur des variables GCC_DIR et LINUX_DIR.
BINUTILS_DIR=binutils-2.16.1 GCC_CORE_DIR=gcc-3.3.6 GCC_DIR=gcc-4.2.2 GLIBC_DIR=glibc-2.3.2 LINUX_DIR=linux-2.6.20 LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2 GDB_DIR=gdb-6.5
A présent notre fichier de configuration paramètre une chaine de compilation croisée utilisant gcc en version 4.2.2 et le noyau linux en version 2.6.20.
Linux embarqué, Pierre Ficheux et Eric Bénard.
http://www.kegel.com/crosstool/