Utiliser Rust avec Buildroot (binaires pré-compilés)
Rust est un langage de programmation moderne, compilé, orienté vers la sécurité, le contrôle des accès mémoire et les accès concurrents. Ces performances sont comparables au C++.
Les fonctionnalités de Rust en font un bon candidat pour l'écriture de programmes pour des systèmes embarqués.
Dans cet article, nous construirons un système pour QEMU ARM Vexpress en utilisant Buildroot, puis nous ajouterons le support pour Rust en installant la chaîne de compilation pré-compilée dans l'environement Buildroot. Enfin, nous écrirons un programme de test en Rust, qui sera compilé puis exécuté sur le système généré.
Construction de l'Image Système
Premièrement, récupérez le code source de Buildroot et initialisez la configuration:
# Clonage du dépôt de Buildroot git clone https://git.buildroot.net/buildroot cd buildroot # Configuration pour le système désiré make O=$HOME/build/demo-rust/qemu/arm qemu_arm_vexpress_defconfig
Ensuite, modifiez la configuration:
Allez dans le menu "Toolchain" et sélectionnez "glibc" à la place de "uclibc" en tant que bibliothèque C. Sélectionnez aussi le support du C++. Sauvegardez votre configuration et sortez, puis démarrez la construction:
Installation de la Chaîne de Compilation Rust Pré-compilée
Téléchargez les fichiers binaires du compilateur Rust pour la machine hôte (PC x86_64) et la bibliothèque standard compilée pour la cible "arm-unknown-linux-gnueabihf" (compatible avec la machine ARM Vexpress).
push dl wget https://static.rust-lang.org/dist/rust-1.7.0-x86_64-unknown-linux-gnu.tar.gz wget https://static.rust-lang.org/dist/rust-std-1.7.0-arm-unknown-linux-gnueabihf.tar.gz popd
Préparez l'installation:
# Extraction des fichiers binaires du compilateur mkdir -p $HOME/build/demo-rust/qemu/arm/build/host-rust-1.7.0 tar -xzf dl/rust-1.7.0-x86_64-unknown-linux-gnu.tar.gz \ -C $HOME/build/demo-rust/qemu/arm/build/host-rust-1.7.0 \ --strip-components=1 # Extraction de la version ARM de la bibliothèque standard mkdir -p $HOME/build/demo-rust/qemu/arm/build/host-rust-std-1.7.0 tar -xzf dl/rust-std-1.7.0-arm-unknown-linux-gnueabihf.tar.gz \ -C $HOME/build/demo-rust/qemu/arm/build/host-rust-std-1.7.0 \ --strip-components=1
Ensuite, installez le compilateur:
pushd $HOME/build/demo-rust/qemu/arm/build/host-rust-1.7.0 ./install.sh --prefix=$HOME/build/demo-rust/qemu/arm/host/usr \ --disable-ldconfig popd
Enfin, installez la bibliothèque standard:
Construction d'un Programme de Test
Il est temps de tester le compilateur. Créez un fichier source Rust pour le programme "Hello World":
mkdir -p $HOME/src/hello-rust cat <<EOF > $HOME/src/hello-rust/main.rs fn main() { println!("Hello World!"); } EOF
Pour construire le programme de test hello-rust
, exécutez:
export PATH=$PATH:$HOME/build/demo-rust/qemu/arm/host/usr/bin $HOME/build/demo-rust/qemu/arm/host/usr/bin/rustc \ --target=arm-unknown-linux-gnueabihf \ -C linker=arm-buildroot-linux-gnueabihf-gcc \ -o $HOME/build/demo-rust/qemu/arm/target/usr/bin/hello-rust \ $HOME/src/hello-rust/main.rs
Notez que le triplet utilisé avec l'option --target est le même que celui de la bibliothèque standard téléchargée, mais est différent de celui de l'éditeur de lien utilisé.
Exécution du Programme de Test sur le Système
Reconstruisez l'image système:
Maintenant, vous pouvez démarrer votre système avec QEMU:
qemu-system-arm \ -M vexpress-a9 \ -m 256 \ -kernel $HOME/build/demo-rust/qemu/arm/images/zImage \ -dtb $HOME/build/demo-rust/qemu/arm/images/vexpress-v2p-ca9.dtb \ -drive file=$HOME/build/demo-rust/qemu/arm/images/rootfs.ext2,if=sd,format=raw \ -append "console=ttyAMA0,115200 root=/dev/mmcblk0" \ -serial stdio \ -net nic,model=lan9118 \ -net user
Connectez-vous en tant que "root" (pas de mot de passe) et exécutez le programme de test:
Félicitations! Vous venez d'exécuter votre premier programme en Rust sur un système Linux embarqué (emulé). N'hésitez pas à adapter l'exemple pour exécuter le programme sur un véritable système ARM, tel que le Raspberry Pi.