Contexte et objectifs
Déployer des binaires personnalisés sur une architecture ARM nécessite un processus de cross-compilation. Cette procédure décrit l'installation d'une toolchain GCC ciblant le profil arm-linux-gnueabi, compatible avec les processeurs Cortex-A9 (ARMv7-A), depuis un environnement hôte x86 sous Ubuntu 10.04 LTS.
Vérification des environnements
Avant toute opération, il est recommandé d'identifier les architectures cibles pour éviter les erreurs d'incompatibilité binaire.
Système hôte (Développement) :
$ uname -a
Linux dev-box 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:13:04 UTC 2012 i686 GNU/Linux
$ lsb_release -a | grep Release
Release: 10.04
Système cible (Exécution) :
$ uname -a
Linux embedded-h1 2.6.34 #3 SMP Mon Oct 29 19:01:06 CST 2012 armv7l GNU/Linux
Installation de la toolchain Linaro
Les dépôts officiels d'Ubuntu 10.04 ne contiennent pas toujours les versions stables nécessaires aux architectures ARM modernes. Nous utilisons le PPA maintenu par Linaro pour accéder à GCC 4.4 spécifiquement configuré pour le ABI gnueabi.
sudo apt-get update
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:linaro-maintainers/toolchain
sudo apt-get update
sudo apt-get install gcc-4.4-arm-linux-gnueabi g++-4.4-arm-linux-gnueabi
Structuration du code source
Le programme de test est reformulé pour respecter les conventions ANSI C et faciliter la vérification de la chaîne de liaison. L'utilisation de prototypes explicites et de gestion propre des paramètres évite les warnings lors de la compilation croisée.
#include <stdio.h>
#include <stdlib.h>
int verifier_initiateur(void)
{
printf("Environnement ARM initialisé\\n");
return EXIT_SUCCESS;
}
int main(int compte_args, char *liste_args[])
{
/* Désactivation des unused parameters pour nettoyer les logs */
(void)compte_args;
(void)liste_args;
return verifier_initiateur();
}
Compilation et validation interne
Lancez le compilateur croisé en précisant l'architecture matérielle. L'indicateur -v permet de tracer le passage du préprocesseur au collecteur de liens (collect2), confirmant l'intégration des en-têtes /usr/arm-linux-gnueabi/include et des bibliothèques dynamiques appropriées.
arm-linux-gnueabi-gcc-4.4 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -O2 -v -o app_embarquee test_arm.c
Le résultat doit indiquer le modèle de thread posix et la version 4.4.6, garantissant la compatibilité avec le noyau Linux 2.6.x présent sur la boîte TV.
Déploiement et exécution
Transférez le fichier binaire généré vers le point de montage accessible de l'appareil cible. Appliquez les droits d'exécution avant le lancement.
$ scp app_embaruee root@192.168.1.100:/mnt/tool/
$ ssh root@192.168.1.100
# cd /mnt/tool/reverse-h1
# chmod +x app_embaruee
# ./app_embaruee
Environnement ARM initialisé
La résolution réussie du chargeur dynamique /lib/ld-linux.so.3 et l'affichage du message démontrent que la chaîne de compilation croisée est entièrement fonctionnelle pour cette infrastructure matériel/logiciel.