GNU/Linux >> Tutoriels Linux >  >> Linux

Comment installer le compilateur croisé Raspberry Pi sur ma machine hôte Linux ?

Création pour les nouvelles images Raspbian Debian Buster et ARMv6

La réponse de @Stenyg ne fonctionne que pour les anciennes images Raspbian. Le Raspbian récemment publié basé sur Debian Buster nécessite une chaîne d'outils mise à jour :

Dans Debian Buster, le compilateur gcc et la glibc ont été mis à jour vers la version 8.3. La chaîne d'outils en git://github.com/raspberrypi/tools.git est toujours basé sur l'ancienne version de gcc 6. Cela signifie que l'utilisation de git://github.com/raspberrypi/tools.git entraînera de nombreuses erreurs de compilation.

Ce tutoriel est basé sur la réponse de @Stenyg. En plus de nombreuses autres solutions sur Internet, ce didacticiel prend également en charge les anciens Rasperry Pi (A, B, B+, Zero ) basé sur le processeur ARMv6.

Configurer la chaîne d'outils

Il n'y a pas de référentiel git officiel contenant une chaîne d'outils mise à jour (voir https://github.com/raspberrypi/tools/issues/102).

J'ai créé un nouveau référentiel github qui inclut la construction et des chaînes d'outils précompilées pour ARMv6 basées sur GCC8 et plus récent :

https://github.com/Pro/raspi-toolchain

Comme mentionné dans le fichier readme du projet, voici les étapes pour obtenir la chaîne d'outils. Vous pouvez également le construire vous-même (voir le README pour plus de détails).

  1. Téléchargez la chaîne d'outils :
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. Extractez-le. Remarque :La chaîne d'outils doit être en /opt/cross-pi-gcc puisqu'il n'est pas indépendant de l'emplacement.
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
  1. Vous avez terminé! La chaîne d'outils est maintenant en /opt/cross-pi-gcc

  2. Facultatif, ajoutez la chaîne d'outils à votre chemin, en ajoutant :

export PATH=$PATH:/opt/cross-pi-gcc/bin

à la fin du fichier nommé ~/.bashrc

Vous pouvez maintenant soit vous déconnecter et vous reconnecter (c'est-à-dire redémarrer votre session de terminal), soit exécuter . ~/.bashrc dans votre terminal pour récupérer le PATH ajout dans votre session de terminal actuelle.

Obtenir les bibliothèques du Raspberry PI

Pour effectuer une compilation croisée pour votre propre Raspberry Pi, qui peut avoir des bibliothèques personnalisées installées, vous devez obtenir ces bibliothèques sur votre hôte.

Créer un dossier $HOME/raspberrypi .Dans votre raspberrypi dossier, créez un dossier appelé rootfs .

Maintenant, vous devez copier l'intégralité du /lib et /usr répertoire dans ce dossier nouvellement créé. J'affiche généralement l'image rpi et la copie via rsync :

rsync -vR --progress -rl --delete-after --safe-links [email protected]:/{lib,usr,opt/vc/lib} $HOME/raspberrypi/rootfs

192.168.1.PI est remplacée par l'IP de votre Raspberry Pi.

Utilisez CMake pour compiler votre projet

Pour indiquer à CMake de prendre votre propre chaîne d'outils, vous devez disposer d'un fichier de chaîne d'outils qui initialise les paramètres du compilateur.

Obtenez ce fichier de chaîne d'outils à partir d'ici :https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake

Vous devriez maintenant pouvoir compiler votre cmake programmes simplement en ajoutant ce drapeau supplémentaire :-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake et en définissant les bonnes variables d'environnement :

export RASPBIAN_ROOTFS=$HOME/raspberry/rootfs
export PATH=/opt/cross-pi-gcc/bin:$PATH
export RASPBERRY_VERSION=1
cmake -DCMAKE_TOOLCHAIN_FILE=$HOME/raspberry/Toolchain-rpi.cmake ..

Un exemple de hello world est montré ici :https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh


Je vais essayer d'écrire ceci comme un tutoriel pour vous afin qu'il devienne facile à suivre.

REMARQUE :ce didacticiel ne fonctionne que pour les anciennes images raspbian. Pour le nouveau Raspbian basé sur Debian Buster, consultez le guide suivant dans ce fil :https://stackoverflow.com/a/58559140/869402

Pré-requis

Avant de commencer, vous devez vous assurer que les éléments suivants sont installés :

apt-get install git rsync cmake libc6-i386 lib32z1 lib32stdc++6

Croisons une compilation !

Commencez par créer un dossier dans votre répertoire personnel appelé raspberrypi .

Allez dans ce dossier et déroulez le dossier d'outils ENTIER que vous avez mentionné ci-dessus :

git clone git://github.com/raspberrypi/tools.git

Vous vouliez utiliser le suivant des 3, gcc-linaro-arm-linux-gnueabihf-raspbian , si je n'ai pas mal lu.

Allez dans votre répertoire personnel et ajoutez :

export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

à la fin du fichier nommé ~/.bashrc

Vous pouvez maintenant soit vous déconnecter et vous reconnecter (c'est-à-dire redémarrer votre session de terminal), soit exécuter . ~/.bashrc dans votre terminal pour récupérer le PATH ajout dans votre session de terminal actuelle.

Maintenant, vérifiez que vous pouvez accéder au compilateur arm-linux-gnueabihf-gcc -v . Vous devriez obtenir quelque chose comme ceci :

Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/tudhalyas/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../libexec/gcc/arm-linux-gnueabihf/4.7.2/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.b
 uild/src/gcc-linaro-4.7-2012.08/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-
 linux-gnu --target=arm-linux-gnueabihf --prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-l
 inux-gnueabihf-raspbian-linux/install --with-sysroot=/cbuild/slaves/oort61/crosstool-ng/builds/
 arm-linux-gnueabihf-raspbian-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fo
 rtran --disable-multilib --with-arch=armv6 --with-tune=arm1176jz-s --with-fpu=vfp --with-float=
 hard --with-pkgversion='crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08' --with-bugurl=
 https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgom
 p --enable-libssp --with-gmp=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-rasp
 bian-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/cbuild/slaves/oort61/crosstool-
 ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-mpc
 =/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-
 gnueabihf/build/static --with-ppl=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf
 -raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/cbuild/slaves/oort61/cros
 stool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --wi
 th-libelf=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/a
 rm-linux-gnueabihf/build/static --with-host-libstdcxx='-L/cbuild/slaves/oort61/crosstool-ng/bui
 lds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --ena
 ble-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-plugin --enable-gol
 d --with-local-prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-li
 nux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08
 )

Mais bon ! Je l'ai fait et les bibliothèques ne fonctionnent toujours pas !

Nous n'avons pas encore fini ! Jusqu'à présent, nous n'avons fait que les bases.

Dans votre raspberrypi dossier, créez un dossier appelé rootfs .

Maintenant, vous devez copier l'intégralité du /lib et /usr répertoire dans ce dossier nouvellement créé. J'affiche généralement l'image rpi et la copie via rsync :

rsync -rl --delete-after --safe-links [email protected]:/{lib,usr} $HOME/raspberrypi/rootfs

192.168.1.PI est remplacée par l'IP de votre Raspberry Pi.

Maintenant, nous devons écrire un cmake fichier de configuration. Ouvrez ~/home/raspberrypi/pi.cmake dans votre éditeur préféré et insérez ce qui suit :

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/raspberrypi/rootfs)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Vous devriez maintenant pouvoir compiler votre cmake programmes simplement en ajoutant ce drapeau supplémentaire :-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake .

Utilisation d'un exemple cmake hello world :

git clone https://github.com/jameskbride/cmake-hello-world.git 
cd cmake-hello-world
mkdir build
cd build
cmake -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake ../
make
scp CMakeHelloWorld [email protected]:/home/pi/
ssh [email protected] ./CMakeHelloWorld

Linux
  1. Comment installer les pilotes NVIDIA sur RHEL 8 Workstation

  2. Comment installer GCC le compilateur C sur Ubuntu 20.04 LTS Focal Fossa Linux

  3. Comment installer et utiliser la commande Ping sous Linux

  4. Comment installer Git sur Rocky Linux 8

  5. Comment trouver le chemin d'installation de git sous Mac ou Linux ?

Linux - Comment installer X11 sur le propre système Linux Buildroot ?

Comment installer le chargeur IonCube sur Ubuntu Linux

Comment installer la plateforme de prise de notes collaborative Etherpad sous Linux

Comment installer le compilateur Rust et la chaîne d'outils sur Rocky Linux 8

Comment installer et utiliser le compilateur GCC sur le système Linux

Comment installer et configurer Git sur les distributions Linux