Embedded Tutorial (1): Kompilieren auf PC für Arm

von | 27.09.2022 | Wissen

Wer Code für Embedded Systeme entwickelt, wird früher oder später mit folgender Herausforderung konfrontiert: Man muss auf seinem x86-PC Code für das Embedded Device kompilieren, welches auf Arm läuft. Da beide Systeme nicht kompatibel sind, kann x86-kompilierter Code nicht auf Arm ausgeführt werden und umgekehrt. Daher benötigt man ein Cross-Compiling Setup.

Wir möchten Ihnen heute eine Crosscompiling-Möglichkeit vorstellen, die auch bei Phytec eingesetzt wird: Die Verwendung eines Crosscompilers in einem Docker Container. Zu diesem Zweck realisieren wir in diesem Tutorial ein simples „Hello World“ Programm in C, das auf einem Armv7 System ausgeführt werden soll (zum Beispiel einem phyCORE Modul von Phytec oder auch einem Raspberry Pi).

How-To: Cross-Kompilieren auf PC für Arm

Schritt 1: Docker installieren

Die Installationsdateien für Docker finden Sie direkt auf der Docker Webseite: https://www.docker.com/get-started
Ich verwende Docker für Windows, das Tutorial kann aber natürlich auch mit Linux oder Mac verwendet werden.

Schritt 2: Die bash-shell öffnen

Wer, wie ich, mit Windows arbeitet, muss erst einen Bash-Layer installieren, zum Beispiel https://www.cygwin.com/

Schritt 3: Dockcross installieren

Nun wird die richtige Variante von Dockcross für das jeweilige Embedded Device gewählt. Hierfür muss das Betriebssystem des Zielgeräts bekannt sein, sowie auch die Art des Prozessors. In meinem Setup laufen beide Zielgeräte mit Linux. Die Prozessorarchitektur kann in der Kommandozeile mit dem Befehl „uname“ angezeigt werden: Mein phyCORE-i.MX 8M Mini läuft mit aarch64 (eine arm8-Variante) und mein Zero Pi 2W mit armv7l . Da Arm8 abwärtskompatibel ist, wähle ich nun also für die Dockcross-Installation das Image dockcross/linux-armv7.

Um Dockcross zu verwenden, muss ein Hilfsscript ausgeführt werden. Nach dem Download von Dockcross kann dieses Skript automatisch erstellt werden. Es muss mit chmod als ausführbarer Code markiert werden.

docker run --rm dockcross/linux-armv7 > ./dockcross
chmod +x ./dockcross

Schritt 4: „Hello World“ Programm erstellen

Für mein Tutorial schreibe ich ein einfaches Programm, dass ich als hello.c abspeichere:

Schritt 5: Cross-Kompilieren

Das Cross-Kompilieren kann mit folgendem Befehl gestartet werden:

./dockcross bash -c '$CC -static hello.c -o hello_arm'

Und das war es dann auch schon: hello_arm ist als „static binary“ für arm kompiliert. Das kann auch nochmal überprüft werden:

Schritt 6: Code ausführen

Via SCP kann nun das Image auf das Embedded Device kopiert werden:

scp hello_arm polis:/tmp

Zum Schluss ist der Code auf dem Embedded Device ausgeführbar:

Weitere Artikel lesen

Hier bloggen wir über alles, was für unsere Kunden, Mitarbeiter, Lieferanten und Co. interessant sein könnte. Sie wollen einen echten Einblick in die PHYTEC Welt? Hier sind Sie richtig.