GNU/Linux >> Linux Esercitazione >  >> Linux

Come installare il compilatore incrociato Raspberry Pi sulla mia macchina host Linux?

Creazione per immagini Raspbian Debian Buster più recenti e ARMv6

La risposta di @Stenyg funziona solo per le immagini Raspbian precedenti. Il Raspbian recentemente rilasciato basato su Debian Buster richiede una toolchain aggiornata:

In Debian Buster il compilatore gcc e glibc sono stati aggiornati alla versione 8.3. La toolchain in git://github.com/raspberrypi/tools.git è ancora basato sulla versione precedente di gcc 6. Ciò significa che l'utilizzo di git://github.com/raspberrypi/tools.git porterà a molti errori di compilazione.

Questo tutorial è basato sulla risposta di @Stenyg. Oltre a molte altre soluzioni in Internet, questo tutorial supporta anche i vecchi Rasperry Pi (A, B, B+, Zero ) basato sulla CPU ARMv6.Vedi anche:GCC 8 Cross Compiler restituisce l'eseguibile ARMv7 invece di ARMv6

Imposta la toolchain

Non esiste un repository git ufficiale contenente una toolchain aggiornata (vedi https://github.com/raspberrypi/tools/issues/102).

Ho creato un nuovo repository github che include la costruzione e toolchain precompilati per ARMv6 basati su GCC8 e successivi:

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

Come accennato nel readme del progetto, questi sono i passaggi per ottenere la toolchain. Puoi anche costruirlo tu stesso (vedi il README per ulteriori dettagli).

  1. Scarica la toolchain:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. Estrailo. Nota:la toolchain deve trovarsi in /opt/cross-pi-gcc poiché non è indipendente dalla posizione.
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
  1. Hai fatto! La toolchain è ora in /opt/cross-pi-gcc

  2. Facoltativo, aggiungi la toolchain al tuo percorso, aggiungendo:

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

alla fine del file denominato ~/.bashrc

Ora puoi disconnetterti e riconnetterti (ovvero riavviare la sessione del terminale) o eseguire . ~/.bashrc nel tuo terminale per ritirare il PATH aggiunta nella sessione corrente del terminale.

Ottieni le librerie dal Raspberry PI

Per eseguire la compilazione incrociata per il tuo Raspberry Pi, che potrebbe avere alcune librerie personalizzate installate, devi caricare queste librerie sul tuo host.

Crea una cartella $HOME/raspberrypi .Nel tuo raspberrypi folder, crea una cartella chiamata rootfs .

Ora devi copiare l'intero /lib e /usr directory in questa cartella appena creata. Di solito porto l'immagine rpi e la copio tramite rsync:

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

dove 192.168.1.PI è sostituito dall'IP del tuo Raspberry Pi.

Usa CMake per compilare il tuo progetto

Per dire a CMake di prendere la tua toolchain, devi avere un file toolchain che inizializzi le impostazioni del compilatore.

Ottieni questo file di toolchain da qui:https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake

Ora dovresti essere in grado di compilare il tuo cmake programmi semplicemente aggiungendo questo flag aggiuntivo:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake e impostando le variabili d'ambiente corrette:

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 esempio di hello world è mostrato qui:https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh


Cercherò di scriverlo come tutorial per te in modo che sia facile da seguire.

NOTA:questo tutorial funziona solo per le immagini raspbian meno recenti. Per il nuovo Raspbian basato su Debian Buster, vedere la seguente procedura in questo thread:https://stackoverflow.com/a/58559140/869402

Prerequisiti

Prima di iniziare devi assicurarti che quanto segue sia installato:

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

Incrociamo la compilazione di una torta!

Inizia creando una cartella nella tua home directory chiamata raspberrypi .

Entra in questa cartella e apri l'INTERA cartella degli strumenti che hai menzionato sopra:

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

Volevi usare il seguente dei 3, gcc-linaro-arm-linux-gnueabihf-raspbian , se non ho letto male.

Vai nella tua home directory e aggiungi:

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

alla fine del file denominato ~/.bashrc

Ora puoi disconnetterti e riconnetterti (ovvero riavviare la sessione del terminale) o eseguire . ~/.bashrc nel tuo terminale per ritirare il PATH aggiunta nella sessione corrente del terminale.

Ora verifica di poter accedere al compilatore arm-linux-gnueabihf-gcc -v . Dovresti ottenere qualcosa del genere:

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
 )

Ma ehi! L'ho fatto e le librerie continuano a non funzionare!

Non abbiamo ancora finito! Finora, abbiamo fatto solo le basi.

Nel tuo raspberrypi folder, crea una cartella chiamata rootfs .

Ora devi copiare l'intero /lib e /usr directory in questa cartella appena creata. Di solito porto l'immagine rpi e la copio tramite rsync:

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

dove 192.168.1.PI è sostituito dall'IP del tuo Raspberry Pi.

Ora dobbiamo scrivere un cmake file di configurazione. Apri ~/home/raspberrypi/pi.cmake nel tuo editor preferito e inserisci quanto segue:

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)

Ora dovresti essere in grado di compilare il tuo cmake programmi semplicemente aggiungendo questo flag aggiuntivo:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake .

Usando un esempio di 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. Come installare i driver NVIDIA su RHEL 8 Workstation

  2. Come installare GCC il compilatore C su Ubuntu 20.04 LTS Focal Fossa Linux

  3. Come installare e utilizzare il comando Ping in Linux

  4. Come installare Git su Rocky Linux 8

  5. Come trovare il percorso di installazione di git su Mac o Linux?

Linux:come installare X11 sul proprio sistema Linux Buildroot?

Come installare il caricatore IonCube su Ubuntu Linux

Come installare la piattaforma collaborativa per prendere appunti Etherpad su Linux

Come installare Rust Compiler e Toolchain su Rocky Linux 8

Come installare e utilizzare il compilatore GCC su sistema Linux

Come installare e configurare Git su distribuzioni Linux