Raspberry Pi Imager

Wer ein Betriebssystem für einen Raspberry Pi auf eine SD-Karte oder einen anderen Datenträger schreiben möchte, kann hierfür den offiziellen Raspberry Pi Imager nutzen. Die Anwendung übernimmt dabei nicht nur das Schreiben des Images, sondern vereinfacht auch die Auswahl und Vorkonfiguration des gewünschten Systems.

Der Raspberry Pi Imager

Nach dem Start wird im ersten Schritt das verwendete Raspberry Pi-Modell ausgewählt. Anschließend kann das gewünschte Betriebssystem festgelegt werden. Neben den unterschiedlichen Varianten von Raspberry Pi OS stehen dort auch eine Reihe weiterer Systeme zur Verfügung. Alternativ kann über die Option Use Custom ein bereits heruntergeladenes Image ausgewählt werden.

Im letzten Schritt muss der Zieldatenträger, beispielsweise eine SD-Karte oder ein USB-Datenträger, ausgewählt werden. Vor dem eigentlichen Schreiben bietet der Imager bei unterstützten Betriebssystemen zusätzliche Möglichkeiten zur Konfiguration.

So können unter anderem Hostname, Benutzername und Passwort, Zeitzone und Tastaturlayout sowie die WLAN-Verbindung bereits vor dem ersten Start festgelegt werden. Daneben können SSH und Raspberry Pi Connect aktiviert werden. Für SSH kann neben der Anmeldung mittels Passwort auch direkt ein öffentlicher SSH-Schlüssel hinterlegt werden.

Das geschriebene Image wird verifiziert

Damit eignet sich der Imager, insbesondere für sogenannte Headless-Installationen. Ein Raspberry Pi kann damit vorbereitet werden, ohne ihn für die Ersteinrichtung zunächst an Bildschirm und Tastatur anschließen zu müssen. Nach dem Schreiben der SD-Karte reicht es im Idealfall aus, diese einzulegen und den Raspberry Pi zu starten. Anschließend ist das System bereits über das Netzwerk erreichbar.

Der Raspberry Pi Imager steht für macOS, Linux und Windows zur Verfügung. Der Raspberry Pi Imager ist freie Software unter der Apache License.

Raspberry Pi Kameramodule überprüfen

Für den Raspberry Pi existieren eine Reihe von offiziellen Kameramodulen. Softwareseitig existieren mit den rpicam-apps, eine Reihe von Werkzeugen um diese zu testen. Dazu müssen diese im ersten Schritt installiert werden:

apt install rpicam-apps

Anschließend kann auf den Desktop-Varianten von Raspberry OS rpicam-hello gestartet werden. Dieses öffnet eine Vorschau, so das die Kamera überprüft und ihr Bild in Augenschein genommen werden kann. Daneben existieren weitere Tools, welche ebenfalls aus diesem Paket stammen. So kann mittels:

rpicam-jpeg --output test.jpg

ein Bild mit der Kamera aufgenommen und als Bilddatei gespeichert werden. Auch die Aufzeichnung von Video ist möglich, z.B. über rpicam-vid.

Probleme mit der Stromversorgung des Raspberry Pi 5

Für eine Installation nutzte ich einen Raspberry Pi 5. Neben einigen Problemen mit der thermischen Belastbarkeit zeigte sich noch ein anderes interessantes Verhalten, welches mit der Stromversorgung zusammenhing. Versorgt würde der Raspberry Pi über ein USB-Kabel, welches an einem Industrienetzteil angeschlossen war.

Besagte Installation

Am Rechner selbst waren einige USB-Geräte angeschlossen, welche sporadisch ausfielen und wieder neu starteten. Normalerweise würde der Raspberry Pi die Spannung per Power Delivery mit dem Netzteil aushandeln. Schlägt dies fehl, kann es zu beschreibendem Verhalten kommen, da der Strom für die USB-Geräte auf 600 mA limitiert wird. Um dieses Problem bei einem ausreichend dimensionierten Netzteil zu umgehen, kann der Parameter usb_max_current_enable gesetzt werden. Dazu muss im ersten Schritt die entsprechende Konfiguration bearbeitet werden:

nano /boot/firmware/config

Dort wird nun der Parameter (im Bereich all) auf den Wert 1 gesetzt:

usb_max_current_enable=1

Nach einem Neustart sollte das Verhalten verschwinden, solange die neue Limitierung (etwa 1,6 Ampere) nicht überschritten wird.

Kiosk-System auf dem Raspberry Pi einrichten

Wer auf einem Raspberry Pi ein Kiosk-System einrichten möchte, kann hierfür mit dem Raspberry OS Lite beginnen. Dort sollte über einen Aufruf von raspi-config der Autologin aktiviert werden (System Options -> S6 Auto Login).

Im nächsten Schritt wird der Wayland Compositor Sway installiert:

apt install sway xwayland

Nach der Installation wird im lokalen Nutzer, welcher für den Kiosk-Modus benutzt werden soll, eine Konfiguration-Datei angelegt:

mkdir -p ~/.config/sway/
nano ~/.config/sway/config

Diese wird mit folgender Konfiguration befüllt:

# Sway kiosk configuration for Raspberry Pi + Raspberry Pi Touch Display 2

# Configure sway
default_border none
default_floating_border none

# Set and transform output
output DSI-2 transform 90

# Execute application
exec_always sh -c '/home/seeseekey/testapp'

Die Konfiguration sorgt dafür das Sway rahmenlos arbeitet und der Bildschirm des Raspberry Touch 2 Display um 90 Grad gedreht wird. Im letzten Schritt wird in der Konfiguration eine Applikation gestartet.

Für Debugzwecke können daneben bei Bedarf noch folgende Zeilen hinzugefügt werden:

# Debug (write outputs and tree into file)
exec_always sh -c 'sleep 4 && swaymsg -t get_outputs > /tmp/outputs.json'
exec_always sh -c 'sleep 4 && swaymsg -t get_tree > /tmp/tree.json'

Zwar ist mit dieser Konfiguration das Display gedreht, aber die Eingaben werden noch in der ursprünglichen Rotation übermittelt. Hierzu muss im ersten Schritt mittels libinput-tools das Gerät ermittelt werden:

apt install libinput-tools
libinput list-devices

Nachdem das Touchscreen-Gerät ermittelt wurde, kann der Name des Gerätes genutzt werden, um eine udev-Regel zu definieren:

nano /etc/udev/rules.d/99-touch-rotation.rules

Dort wird die Rotation ebenfalls um 90 Grad gedreht:

ATTRS{name}=="11-005d Goodix Capacitive TouchScreen", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"

Nachdem diese Konfiguration hinterlegt sind, wird eine lokale systemd-Unit erstellt:

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/sway.service

Diese wird mit folgendem Inhalt befüllt:

[Unit]
Description=Sway
After=graphical-session.target
Requires=graphical-session.target

[Service]
ExecStart=/usr/bin/sway
Restart=always
Environment=XDG_RUNTIME_DIR=/run/user/%U

[Install]
WantedBy=default.target

Anschließend kann die systemd-Unit aktiviert werden.

systemctl --user enable sway

Nun kann der Raspberry Pi neugestartet werden. Im Idealfall startet das System führt den Login durch und startet die Applikation. Sollte es hier Probleme geben, kann es an bestimmten Bibliotheken wie libxi6 liegen, welche noch nachinstalliert werden müssen.

Rust-Cross-Compiling unter macOS

Unter Rust ist das crosscompilen, also das Erstellen von Binaries für andere Architekturen relativ einfach. Im Falle des Raspberry Pi 5, muss als Erstes die passende Zielarchitektur installiert werden:

rustup target add aarch64-unknown-linux-gnu

Da Rusts Standardbibliothek std auf C-Bibliotheken wie libc aufbaut, muss gegen das Zielsystem gelinkt werden; in diesem Fall das Linux auf dem Raspberry Pi. Dafür wird die entsprechende Toolchain benötigt:

brew tap messense/macos-cross-toolchains
brew install aarch64-unknown-linux-gnu

Nun muss das bestehende Rust-Projekt noch modifiziert werden. Dazu muss eine Cargo-Konfiguration unter .cargo/config.toml erstellt werden:

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"

Anschließend kann das Release erzeugt werden:

cargo build --release --target aarch64-unknown-linux-gnu

Nach dem Buildprozess findet sich das Kompilat im Ordner target/aarch64-unknown-linux-gnu/release/ und kann auf dem Raspberry Pi ausgeführt werden.