GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie installiere ich den Raspberry Pi Cross Compiler auf meinem Linux-Host-Rechner?

Building für neuere Raspbian Debian Buster-Images und ARMv6

Die Antwort von @Stenyg funktioniert nur für ältere Raspbian-Images. Das kürzlich veröffentlichte Raspbian basierend auf Debian Buster erfordert eine aktualisierte Toolchain:

In Debian Buster wurden der gcc-Compiler und die glibc auf Version 8.3 aktualisiert. Die Toolchain in git://github.com/raspberrypi/tools.git basiert noch auf der älteren Version gcc 6. Das bedeutet, dass mit git://github.com/raspberrypi/tools.git wird zu vielen Kompilierfehlern führen.

Dieses Tutorial basiert auf der Antwort von @Stenyg. Neben vielen anderen Lösungen im Internet unterstützt dieses Tutorial auch ältere Rasperry Pi (A, B, B+, Zero ) basierend auf der ARMv6-CPU. Siehe auch:GCC 8 Cross Compiler gibt statt ARMv6 die ausführbare ARMv7-Datei aus

Toolchain einrichten

Es gibt kein offizielles Git-Repository mit einer aktualisierten Toolchain (siehe https://github.com/raspberrypi/tools/issues/102).

Ich habe ein neues Github-Repository erstellt, das Build- und vorkompilierte Toolchains für ARMv6 basierend auf GCC8 und neuer enthält:

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

Wie in der Readme des Projekts erwähnt, sind dies die Schritte, um die Toolchain zu erhalten. Sie können es auch selbst erstellen (siehe README für weitere Details).

  1. Laden Sie die Toolchain herunter:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. Extrahieren Sie es. Hinweis:Die Toolchain muss sich in /opt/cross-pi-gcc befinden da es nicht standortunabhängig ist.
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
  1. Du bist fertig! Die Toolchain befindet sich jetzt in /opt/cross-pi-gcc

  2. Fügen Sie optional die Toolchain zu Ihrem Pfad hinzu, indem Sie Folgendes hinzufügen:

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

bis zum Ende der Datei mit dem Namen ~/.bashrc

Jetzt können Sie sich entweder abmelden und wieder anmelden (d. h. Ihre Terminalsitzung neu starten) oder . ~/.bashrc ausführen in Ihrem Terminal, um den PATH abzurufen Hinzufügen in Ihrer aktuellen Terminalsitzung.

Holen Sie sich die Bibliotheken vom Raspberry PI

Um für Ihren eigenen Raspberry Pi zu kompilieren, auf dem möglicherweise einige benutzerdefinierte Bibliotheken installiert sind, müssen Sie diese Bibliotheken auf Ihren Host übertragen.

Erstellen Sie einen Ordner $HOME/raspberrypi .In Ihrem raspberrypi erstellen Sie einen Ordner mit dem Namen rootfs .

Jetzt müssen Sie den gesamten /lib kopieren und /usr Verzeichnis in diesen neu erstellten Ordner. Normalerweise hole ich das rpi-Image hoch und kopiere es über rsync:

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

wobei 192.168.1.PI wird durch die IP Ihres Raspberry Pi ersetzt.

Verwenden Sie CMake, um Ihr Projekt zu kompilieren

Um CMake anzuweisen, Ihre eigene Toolchain zu verwenden, benötigen Sie eine Toolchain-Datei, die die Compiler-Einstellungen initialisiert.

Holen Sie sich diese Toolchain-Datei hier:https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake

Jetzt sollten Sie in der Lage sein, Ihren cmake zu kompilieren Programme einfach durch Hinzufügen dieses zusätzlichen Flags:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake und Setzen der richtigen Umgebungsvariablen:

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 ..

Ein Beispiel für „Hello World“ wird hier gezeigt:https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh


Ich werde versuchen, dies als Tutorial für Sie zu schreiben, damit es leicht zu befolgen ist.

HINWEIS:Dieses Tutorial funktioniert nur für ältere Raspbian-Images. Für das neuere Raspbian basierend auf Debian Buster siehe die folgende Anleitung in diesem Thread:https://stackoverflow.com/a/58559140/869402

Voraussetzungen

Bevor Sie beginnen, müssen Sie sicherstellen, dass Folgendes installiert ist:

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

Lass uns einen Kuchen kompilieren!

Beginnen Sie damit, in Ihrem Home-Verzeichnis einen Ordner mit dem Namen raspberrypi zu erstellen .

Gehen Sie in diesen Ordner und ziehen Sie den GESAMTEN Tools-Ordner herunter, den Sie oben erwähnt haben:

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

Sie wollten die folgenden der 3 verwenden, gcc-linaro-arm-linux-gnueabihf-raspbian , wenn ich mich nicht verlesen habe.

Gehen Sie in Ihr Home-Verzeichnis und fügen Sie hinzu:

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

bis zum Ende der Datei mit dem Namen ~/.bashrc

Jetzt können Sie sich entweder abmelden und wieder anmelden (d. h. Ihre Terminalsitzung neu starten) oder . ~/.bashrc ausführen in Ihrem Terminal, um den PATH abzurufen Hinzufügen in Ihrer aktuellen Terminalsitzung.

Überprüfen Sie nun, ob Sie auf den Compiler arm-linux-gnueabihf-gcc -v zugreifen können . Sie sollten etwa Folgendes erhalten:

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
 )

Aber hey! Ich habe das getan und die Bibliotheken funktionieren immer noch nicht!

Wir sind noch nicht fertig! Bisher haben wir nur die Grundlagen behandelt.

In Ihrem raspberrypi erstellen Sie einen Ordner mit dem Namen rootfs .

Jetzt müssen Sie den gesamten /lib kopieren und /usr Verzeichnis in diesen neu erstellten Ordner. Normalerweise hole ich das rpi-Image hoch und kopiere es über rsync:

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

wobei 192.168.1.PI wird durch die IP Ihres Raspberry Pi ersetzt.

Jetzt müssen wir einen cmake schreiben Konfigurationsdatei. Öffnen Sie ~/home/raspberrypi/pi.cmake in Ihrem bevorzugten Editor und fügen Sie Folgendes ein:

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)

Jetzt sollten Sie in der Lage sein, Ihren cmake zu kompilieren Programme einfach durch Hinzufügen dieses zusätzlichen Flags:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake .

Verwenden eines Cmake-Hello-World-Beispiels:

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. So installieren Sie die NVIDIA-Treiber auf RHEL 8 Workstation

  2. So installieren Sie GCC, den C-Compiler, unter Ubuntu 20.04 LTS Focal Fossa Linux

  3. So installieren und verwenden Sie den Ping-Befehl unter Linux

  4. So installieren Sie Git unter Rocky Linux 8

  5. Wie finde ich den Installationspfad von Git in Mac oder Linux?

Linux – Wie installiere ich X11 auf dem eigenen Linux-Buildroot-System?

So installieren Sie den IonCube Loader unter Ubuntu Linux

So installieren Sie die kollaborative Notizplattform Etherpad unter Linux

So installieren Sie den Rust-Compiler und die Toolchain unter Rocky Linux 8

So installieren und verwenden Sie den GCC-Compiler auf einem Linux-System

So installieren und konfigurieren Sie Git auf Linux-Distributionen