Effiziente ARM-Container-Builds auf x86-Systemen
Herausforderung
Für eine schnellere Entwicklung wollen wir ARM-basierte Container für AXCF2152 oder AXCF1152 auf x86-Hardware erstellen. Zu diesem Zweck wird eine virtuelle Maschine basierend auf Debian oder Ubuntu verwendet, die auf unserem normalen PC läuft.
Wir brauchen einen Emulator
Um ARM-Binärcode auf einem x86-System auszuführen, benötigen wir einen Emulator, der dies ermöglicht.
QEMU ist einer der wenigen Hypervisoren, die ARM-Binärcode emulieren und für x86 kompilieren können. Alles, was wir tun müssen, ist, QEMU auf unserem Host-System zu installieren und den Emulator zu aktivieren.
QEMU für Ubuntu oder Debian installieren:
apt-get update && apt-get install -y --no-install-recommends qemu-user-static binfmt-support update-binfmts --enable qemu-arm update-binfmts --display qemu-arm
Beispiel für die Verwendung
Um QEMU nun zu verwenden, benötigen wir eine Erweiterung im Container, nämlich das Binary /usr/bin/qemu-arm-static. Es gibt mehrere Möglichkeiten, es im Container zu verwenden.
Wenn die Erweiterung nur vorübergehend benötigt wird und lokal existiert, kann sie einfach an den Container übergeben werden. Dazu wird das notwendige Binary in den Container gemountet.
docker run -it --restart always \ -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static \ arm32v7/debian /bin/sh
Dies startet den Container und springt in eine Shell im Container. Jetzt können alle notwendigen Änderungen vorgenommen werden. Die Änderungen können danach mit einem Commit in die Images übertragen werden.
docker commit ...
Für einen Container-Build muss das Binary im Container vorhanden sein. Es gibt zwei Wege, dies zu tun.
- Das Binary ist bereits verfügbar – es gibt vorgefertigte Images auf Docker Hub dafür. https://hub.docker.com/u/multiarch/
- Das Binary wird dem Container-Image hinzugefügt.
Beispiel Dockerfile:
FROM debian:armhf COPY qemu-arm-static /usr/bin/qemu-arm-static RUN .....
Die Zeile COPY muss direkt als zweiter Befehl nach FROM erscheinen. Das Ganze funktioniert mit allen Build-Tools.
Ein Container für alle
Wenn Sie die QEMU-Erweiterung auf einem AXCF3152 installieren, können Sie denselben Container für beide Systeme (x86 und ARM) verwenden. Bezüglich der Performance sollte dies ausführlich getestet werden.
Industrietechnik
- Dezimal- vs. Binärsystem: Stellenwert, Effizienz und Umrechnung
- Binäre Addition erklärt: Regeln, Beispiele und Rolle in Digitalrechnern
- Negative Zahlen im Binärsystem: Vorzeichen-Betrag, Komplement und Zweierkomplement
- Binäre Subtraktion mit Zweierkomplement
- Binärer Überlauf: Wie Vorzeichenbits die binäre Addition beeinflussen
- Wesentliche Boolesche Vereinfachungsregeln für das Logikschaltungsdesign
- Arm führt Custom Instruction Support für Cortex-M Kerne ein – Mehr Flexibilität
- Robuste PCBs für extreme Bedingungen: Design, Vorteile und Anwendungen
- PCB-Fertigung im 5G-Zeitalter: Trends & Herausforderungen
- Deployments mit Multi-Stage-Container-Builds optimieren