Die Architektur der meisten Anwendungen gestaltet sich mehrstufig. Das eigentliche Programm ruft für zahlreiche Standardaufgaben, etwa die Arbeit mit Dateien oder die Informationsdarstellung in grafischen Fenstern, Funktionen in Standardbibliotheken auf. Damit das funktioniert, lädt der Programmlader neben der eigentlichen Software auch die benötigten Bibliotheken in den Speicher. Um Systemfunktionen zu nutzen, verwenden die Bibliotheksfunktionen System Calls. Von diesen drei Ebenen muss die Qemu-Lösung die zwei Ebenen Programm und Bibliotheken in x86-Maschinensprache behandeln, also den Code durch Emulation ausführen. Bei Box64 betrifft das nur das Programm selbst, denn die Box-Tools verwenden die nativen ARM-Versionen der Bibliotheken.
Eine Anleitung, mit der die Intel-Version von Steam via Box64 laufen soll [6], schlägt unter Ubuntu 24.04 fehl, sie funktioniert aber mit der Vorgängerversion 23.10. Allerdings hat Ubuntu 24.04 auch in der Intel-Variante Probleme mit Steam. Dort lässt sich die Software nur als Snap-Paket aus dem Snap Store installieren. Dennoch helfen die ersten Schritte der Steam-Installationsanleitung weiter, weil sich damit Box64 einrichten lässt. Unter Ubuntu 24.04 erfordert das nur eine Änderung an einer der Quellcodedateien von Box68. Listing 3 zeigt die notwendigen Befehle, Zeile 15 enthält die Korrektur des Quellcodes. Wenn Sie auf das Ausführen von 32-Bit-x86-Programmen verzichten möchten, spielen Sie Box64 direkt mit sudo apt install box64 aus den Standardrepos ein.
Listing 3
Box86 und Box64 installieren
$ sudo dpkg --add-architecture armhf $ sudo apt-get update && sudo apt-get upgrade $ sudo apt install gcc-arm-linux-gnueabihf -y $ sudo apt install cmake libc6:armhf -y $ git clone https://github.com/ptitSeb/box64 $ cd box64 $ mkdir build; cd build; cmake .. -D RPI5ARM64=1 -D CMAKE_BUILD_TYPE=RelWithDebInfo $ make -j4 $ sudo make install $ cd ~ $ git clone https://github.com/ptitSeb/box86 $ cd box86 $ sed -i.bak -e 's/ st->__st_ino/ st->st_ino/' src/libtools/myalign64.c $ mkdir build; cd build; cmake .. -D RPI4ARM64=1 -D CMAKE_BUILD_TYPE=RelWithDebInfo $ make -j4 $ sudo make install $ cd /usr/lib/binfmt.d/ $ f=qemu-i386.conf; sudo mv $f $f.disabled $ f=qemu-x86_64.conf; sudo mv $f $f.disabled $ sudo systemctl restart systemd-binfmt
Haben Sie bereits wie oben beschrieben Qemu-User-Static für den Start von x86- und x86_64-Binaries konfiguriert, benennen Sie die Dateien qemu-i386.conf und qemu-x86_64.conf im Verzeichnis /usr/lib/binfmt.d/ um, zum Beispiel in qemu-i386.conf.disabled (Listing 2, Zeilen 20 bis 22). Danach starten Sie den Binfmt-Dienst neu (letzte Zeile).
Einzelne x86- oder x86_64-Programme führen Sie danach durch das Voranstellen von box86 oder box64 aus. Wenn Sie dabei das falsche Tool verwenden, erkennt es den Irrtum und gibt die Anforderung an das richtige Hilfsprogramm weiter.
Es geht aber auch ganz ohne explizite Aufforderung zur x86-Emulation, denn der Binfmt-Dienst erkennt jetzt ausführbare Programmdateien aus der Intel-kompatiblen Welt und startet sie automatisch mit einem der Box-Programme. Listing 4 zeigt, wie drei Versionen des Tools Uname, das die Versionsnummer und einige Zusatzinformationen wie die Plattform ausgibt, direkt ausgeführt werden. Dabei ist uname die native Version, uname-x86 ein 32-Bit-Binary aus einem anderen x86-Linux-System und uname-x86_64 ein 64-Bit-x86_64-Ubuntu-Binary.
Listing 4
Autostart von Box86 und Box64
$ export BOX64_LOG=0 $ uname -a Linux ubu2404rp 6.8.0-1009-raspi #10-Ubuntu SMP PREEMPT_DYNAMIC Mon Jul 29 15:52:43 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux $ ./uname-x86 -a Box86 with Dynarec v0.3.7 66a91b85 built on Aug 17 2024 15:48:15 Linux ubu2404rp 6.8.0-1009-raspi #10-Ubuntu SMP PREEMPT_DYNAMIC Mon Jul 29 15:52:43 UTC 2024 x86_64 GNU/Linux $ ./uname-x86_64 -a Box64 with Dynarec v0.3.1 c4253b73 built on Aug 17 2024 06:20:54 Linux ubu2404rp 6.8.0-1009-raspi #10-Ubuntu SMP PREEMPT_DYNAMIC Mon Jul 29 15:52:43 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
Geschwindigkeitsrekorde dürfen Sie von den in emulierten Umgebungen ausgeführten x86-Programmen nicht erwarten: Emulation arbeitet generell langsamer als Virtualisierung. Als Mini-Benchmark haben wir in der Shell eine kleine Schleife gestartet und die Zeit gestoppt. Die x86_64-Version der Bash (Abbildung 8) brauchte mehr als dreimal so lang wie die native ARM-Version.

Abbildung 8: In der x86_64-Version der Bash (rechts) benötigt die Schleife dreimal so viel Zeit wie in der nativen Version.
Fazit
Die verschiedenen Möglichkeiten der x86-Emulation, die Ubuntu auf dem RasPi erlaubt, sind spannend, wenn Sie entsprechenden Bedarf haben. Wollen Sie aber nur einen stromsparenden, einfachen Desktop-Rechner zusammenstellen, um ein paar Texte zu schreiben, E-Mails zu bearbeiten und im Web zu surfen, dann werden Sie im laufenden Betrieb kaum Unterschiede zwischen Ubuntu auf dem RasPi 5 und einem normalen PC feststellen.
Das offizielle Raspberry Pi OS muss sich aus Rücksicht auf schwächere RasPi-Modelle auf einen abgespeckten Desktop beschränken, während Ubuntu 24.04 einen vollwertigen Gnome-Desktop mitbringt. Welche Leistung die kleine Platine des RasPi 5 liefert, ist schon beachtlich. Der Lüfter sprang während der tagelangen Tests für diesen Artikel nur gelegentlich an. (tle)
Infos
- Raspberry-Pi-Version von Ubuntu: https://ubuntu.com/download/raspberry-pi
- Raspberry Pi Imager: https://www.raspberrypi.com/software/
- M.2-NVMe-Adapter für RasPi 5: https://www.raspberrypi.com/products/m2-hat-plus/
- QEMU User Space Emulator: https://www.qemu.org/docs/master/user/main.html
- Box64: https://github.com/ptitSeb/box64
- Steam für den RasPi: https://www.xda-developers.com/install-steam-on-raspberry-pi/
- Thread im Raspberry-Pi-Forum: https://forums.raspberrypi.com/viewtopic.php?t=369760
- Bug 2064208: https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/2064208
- Alternatives Ubuntu-Image von Dave Jones: https://zoidberg.waveform.org.uk/images/ubuntu-24.04-preinstalled-desktop-arm64+raspi.img.xz





