crosstool-NG
Le projet crosstool-NG permet de mettre en place facilement une chaîne de compilation croisée sur un PC de développement (PC hôte). Une chaîne de compilation croisée permet de compiler du code source développé en C, C++, Fortran et/ou Java, à partir d’une machine hôte (majoritairement x86 ou x86_64) à destination d’une machine cible d’architecture différente (typiquement une carte électronique embarquée d'architecture Alpha, ARM, MIPS, PowerPC, Sparc...). La majeure partie des projets sur l'embarqué utilise ce procédé car la machine hôte est beaucoup plus puissante que la machine cible. Le temps de compilation et de développement s’en trouve considérablement réduit.
-
Au delà du compilateur croisé obtenu par défaut (compilateur C: GCC), la chaîne de compilation croisée obtenue offre tous les outils nécessaires au développeur : addr2line, ar, objcopy, readelf, etc...
-
Avant de lancer la conception de la chaîne proprement dite, toutes les options comme par exemple l'obtention du langage C++, Fortran ou Java dans la chaîne, sont paramétrables par un menu intuitif du même type que celui du noyau Linux (menu de type ncurses).
crosstool-NG entre dans le cadre de la conception d'un système embarqué. Il est très répandu dans la conception de systèmes d'exploitation GNU/Linux embarqués. Quand bien même la carte embarquée (cible) est de même architecture que le PC de développement (hôte), il convient d'installer une chaîne de compilation croisée car celle-ci est le garant de la pérennité des bibliothèques utilisées pour la compilation et souvent un levier d'accélération notable. En effet, elle permet de mettre à "l'abri" les bibliothèques et exécutables des mises à jours du système d'exploitation du PC hôte.
Il est possible de vérifier que l'exécutable obtenu est bien pour l'architecture cible en utilisant la commande Unix :
file <nom_d_exécutable>
.
Par exemple, après cross-compilation pour architecture ARM du code source binaire du nom helloworld
, la commande file helloworld
nous renvoie :
helloworld: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
Entre deux binaires compilés à partir de sources identiques, avec des options identiques, l'un sur le système cible et l'autre par crosstool-NG, il n'y a aucune différence de fonctionnement.
Le Laboratoire de Physique de la Matière Condensée utilise une carte électronique embarquée pour piloter à distance un oscilloscope numérique sur une expérience scientifique de type RMN (Résonance Magnétique Nucléaire). Le chargeur de démarrage, le noyau Linux et l'ensemble du système de fichiers de la carte électronique ont été complètement ré-installés et personnalisés pour l'expérience scientifique. Le module Linux GPIB a été cross-compilé avec succès grâce à crosstool-NG. Le module GPIB fonctionne parfaitement sur la carte électronique embarquée.
- Fonctionne nativement sur plate-formes GNU/Linux (peut fonctionner sous Mac et Windows avec Cygwin),
- Toutes les architectures cibles ne sont pas couvertes,
- Connexion réseau indispensable afin de télécharger les différents composants (pensez à paramétrer le proxy dans les variables d'environnement de votre PC) lors du lancement de la conception de la chaîne de compilation croisée,
- PC hôte assez récent pour limiter le temps de conception de la chaîne (il faut compter 40 à 60 minutes avec une machine bien équipée !).
Commentaires
Proposition d'ajout
Fiche intéressante, j'y retrouve ce que je connais de cet outil.
On pourrait ajouter dans logiciels connexes :
* LLVM Dans certains cas on peut l'utiliser pour faire du développement croisé.
* NETBSD : C'est un OS, mais il contient tous les outils nécessaires pour construire un cross compilateur capable de construire un OS et les outils utilisateurs. http://www.netbsd.org/docs/guide/en/chap-build.html