Embedded Linux Development: IoT & Edge (Artikel 234)
Einstieg in die Embedded-Linux-Entwicklung. Erfahren Sie den Umgang mit minimalen Kerneln, die Steuerung von Hardware-Schnittstellen und den Einsatz von Alpine als Basis für industrielle Appliances.
# Embedded Linux: Das Betriebssystem für die Hardware-Front
TL;DR / Management Summary Embedded Linux ist der unsichtbare Motor unserer Welt – von der Kaffeemaschine bis zum Industriesteuergerät. Im Gegensatz zum Standard-Server (Artikel 191) liegt hier der Fokus auf Echtzeitfähigkeit, minimale Bootzeit und dem direkten Zugriff auf Hardware-Register (GPIO, I2C, SPI). Wir nutzen Alpine Linux als idealen Kompromiss zwischen der Komplexität von Yocto und der Starrheit von Debian, um robuste Edge-Gateways zu bauen.
# 1. Einführung & Architektur
Die Nähe zur Hardware.
Ein Embedded-System verzichtet oft auf alles, was ein Mensch zur Interaktion braucht (Tastatur, Monitor) und konzentriert sich auf Sensoren und Aktoren.
# Der Embedded Stack (Mermaid)
graph TD
A[Hardware: SOC / FPGA] --- B[Bootloader: U-Boot / Barebox]
B --- C[Kernel: Custom / RT-Patch]
C --- D[Root Filesystem: initramfs / SquashFS]
D --- E[Application: BusyBox / Go / C]
subgraph "I/O Interface"
E --> F[GPIO: Digital In/Out]
E --> G[I2C: Sensors]
E --> H[UART: Debug / Serial]
end
# 2. Hardware-Zugriff unter Linux
Die Welt der Device-Files.
Unter Linux ist alles eine Datei – auch die Hardware.
# GPIO Steuerung (Der neue Weg: libgpiod)
Vermeiden Sie das manuelle Schreiben in /sys/class/gpio/ (veraltet). Nutzen Sie gpiod:
# Wert eines Pins lesen
gpioget 0 17
# Wert setzen
gpioset 0 18=1
# I2C Sensorik
apk add i2c-tools
# Scannen des Busses nach Geräten
i2cdetect -y 1
# 3. Der schlanke Kernel
Nur das Nötigste kompilieren.
Für Embedded-Geräte bauen wir oft eigene Kernels.
- Deaktivieren: Sound-Treiber, Grafik-Stacks, ungenutzte Dateisysteme (CIFS, HFS).
- Aktivieren: Watchdog-Timer, Hardware-spezifische I/O-Module.
Tipp: Nutzen Sie den RT-Patch (PREEMPT_RT), wenn Ihr System auf Hardware-Events in garantierten Millisekunden reagieren muss (z.B. Motorsteuerung).
# 4. Day-2 Operations: Watchdogs & Safety
Selbstheilung bei Fehlern.
Ein Embedded-System ist oft schwer erreichbar. Wenn es sich aufhängt, muss es sich selbst neustarten.
# Der Hardware Watchdog
Ein kleiner Timer im Chip. Die Software muss ihn regelmäßig “füttern” (ping). Bleibt der Ping aus, löst die Hardware einen Reset aus.
# Alpine Watchdog Service
apk add watchdog
rc-update add watchdog default
# 5. Troubleshooting & “War Stories”
Wenn der Chip schweigt.
# Story 1: “Der SD-Karten Tod”
Symptom: Ein IoT-Gateway läuft 6 Monate perfekt und bootet dann plötzlich nicht mehr. Die SD-Karte ist schreibgeschützt oder korrupt.
Ursache: Zu viele Schreibvorgänge (Logs, Datenbanken) haben die Speicherzellen der billigen SD-Karte zerstört.
Lösung: Nutzen Sie den Diskless Mode von Alpine (Artikel 193). Das OS läuft im RAM, Logs gehen nach /dev/null oder auf einen Remote-Server. Schreiben Sie nur bei absoluter Notwendigkeit auf die Disk.
# Story 2: “Das hängende Update (A/B Partitioning)”
Symptom: Ein Remote-Update bricht bei 50% ab. Der Server ist nun “gebrickt” (unbootbar). Ursache: Inplace-Updates auf Embedded-Systemen sind hochgefährlich. Lösung: Nutzen Sie ein A/B System. Der neue Stand wird auf eine inaktive Partition geschrieben. Nur wenn der Schreibvorgang und der Health-Check erfolgreich sind, schwenkt der Bootloader beim nächsten Start auf die neue Partition um.
# 6. Fazit & Empfehlung
- Wartung: Embedded-Systeme sollten unveränderlich (immutable) sein.
- Hardware: Nutzen Sie hochwertige “Industrial Grade” SD-Karten oder eMMC-Speicher.
- Wahl: Alpine Linux ist die beste Basis für schnelle Prototypen, die später in ein professionelles Build-System (Yocto) überführt werden können.
# Anhang: Cheatsheet
| Aufgabe | Tool / Pfad |
|---|---|
| GPIO-Tools | libgpiod |
| I2C-Tools | i2c-tools |
| Seriell-Konsole | minicom -D /dev/ttyS0 |
| Kernel Logs | dmesg -w |
| Watchdog Config | /etc/watchdog.conf |
| Device Tree | /boot/dtbs/ |
| Speicher-Check | df -h (Achtung RAM-Disk!) |
| Prozessor-Takt | cpufreq-info |