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