Introduction à la compilation croisée
Développer pour des systèmes embarqués nécessite souvent l'utilisation d'une chaîne de compilation croisée (toolchain), permettant de générer des binaires exécutables sur une architecture cible (comme ARM) à partir d'une machine hôte plus puissante (généralement x86_64). L'outil crosstool-NG s'est imposé comme une solution flexible pour construire ces environnements sur mesure.
Préparation de l'environnement hôte
Pour compiler une toolchain complète, le système Ubuntu doit disposer de plusieurs outils de développement. Il est recommandé de désactiver l'interface graphique pour optimiser les ressources lors de la compilation.
# Passage en mode console uniquement pour économiser la RAM
sudo systemctl set-default multi-user.target
sudo reboot
# Installation des dépendances nécessaires
sudo apt update
sudo apt install -y build-essential gawk flex libncurses5-dev texinfo \
help2man bison byacc libtool-bin curl lzip python3-dev rsync
Installation de crosstool-NG
Plutôt que d'tuiliser une version pré-compilée, nous compilons l'utilitaire directement depuis les sources pour garantir la compatibilité.
# Création du répertoire de travail
mkdir -p ~/dev_tools/ct-ng-sources
cd ~/dev_tools/ct-ng-sources
# Extraction (en supposant que l'archive est téléchargée)
tar -xvf crosstool-ng-1.24.0.tar.xz
cd crosstool-ng-1.24.0/
# Compilation et installation dans un dossier spécifique
./configure --prefix=$HOME/.local/crosstool-ng
make
make install
# Mise à jour du PATH
echo 'export PATH="$PATH:$HOME/.local/crosstool-ng/bin"' >> ~/.bashrc
source ~/.bashrc
Configuration de la cible ARM
L'outil ct-ng fonctionne avec des échantillons (samples) servant de base de configuration. Pour une architecture spécifique telle qu'un processeur ARM920T (utilisé dans le S3C2440), nous partons d'un profil générique.
mkdir -p ~/build-arm-toolchain/output
cd ~/build-arm-toolchain
# Lister les configurations disponibles
ct-ng list-samples
# Sélection d'une base ARM générique
ct-ng arm-unknown-linux-gnueabi
# Ouverture de l'interface de configuration
ct-ng menuconfig
Dans l'interface menuconfig, les options suivantes doivent être vérifiées pour une cible de type S3C2440 :
- Path and misc options : Définir le "Prefix directory" vers
${HOME}/x-tools/${CT_TARGET}. - Target options :
- Architecture:
arm - Bitness:
32-bit - Instruction set:
arm - CPU:
arm920t - Floating point:
software
- Architecture:
- Toolchain options : Personnaliser l'identifiant de la toolchain si nécessiare.
Lancement de la construction
Le processus de construction télécharge automatiquement les sources de GCC, de la Glibc et des utilitaires Binutils. Cette étape peut durer plusieurs heures selon la puissance de la machine.
# Lancement du build
ct-ng build
# Une fois terminé, ajouter le binaire au PATH
export PATH="$PATH:$HOME/x-tools/arm-unknown-linux-gnueabi/bin"
Vérification de la toolchain
Une fois la compilation terminée, vérifiez que le compilateur est opérationnel en interrogeant sa version. Le préfixe du binaire correspondra au tuple configuré précédemment.
arm-unknown-linux-gnueabi-gcc -v
Si la configuration est correcte, la sortie affichera les détails du processeur cible (arm920t) et les options de compilation retenues (soft-float, version de GCC, etc.). En cas d'échec de téléchargement des paquets sources pendant le processus, il est possible de placer manuellement les archives .tar.gz dans le dossier .build/tarballs/ généré par crosstool-NG.