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.

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.