45 Betriebssysteme für den Raspberry Pi

Seite: 6/7

Hardwarevirtualisierung für Docker-Container: HypriotOS und balenaOS

Docker ist eine offene Plattform, mit der Entwickler und Systemadministratoren auf leichtem Weg verteilte Anwendungen erstellen, ausliefern und ausführen können, indem sie mit Hilfe von Betriebssystemvirtualisierung in Containern isoliert werden. Das funktioniert auf Laptops, virtuellen Maschinen im Rechenzentrum, in der Cloud – oder, mit der richtigen Konfiguration, auch auf dem Raspberry Pi. Letzteres ist vor allem deshalb praktisch, da der Single Board Computer signifikant weniger Energie benötigt als andere Plattformen.

Eines der ersten Betriebssysteme, um Docker auf das Raspberry Pi zu bringen, was das Anfang 2015 erstmals gestartete HypriotOS. Dabei handelt es sich um ein schlankes Debian-Derivat, das speziell auf die Ansprüche der Open-Source-Software zurechtgeschnitten wurde, um Docker-Container zu betreiben.

Bildergalerie
Bildergalerie mit 47 Bildern

Die Community hinter HypriotOS, „Docker Pirates“, ist sehr aktiv und hält das Betriebssystem fleißig up-to-date. Das aktuellste Release trägt die Versionsnummer 1.12.0 (Stand 7. Januar 2020). Die potentielle Sicherheitslücke im Debian-Linux-Kernel, die im Frühjahr 2017 entdeckt wurde und potentielle Gefahren für einen Docker-Host bot, ist darin schon längst behoben. Projekt- und Entwicklercommunity sind aber weiterhin rege aktiv und entwickeln den Docker-Container fürs Raspberry Pi rege weiter.

Eine Alternative zu Hypriot auf dem Gebiet der Docker-Container stellt balenaOS dar, ein Nachfolger des etwas älteren Open-Source-Projektes ResinOS. Dieses Betriebssystem stützt sich statt auf Debian auf einen Yocto-Core, um eine breitere Plattform für Applikationen und Repositories zu bieten, und lässt sich entsprechend schärfer auf individuelle Bedürfnisse zuschneiden.

balenaOS wurde nach Angaben der Entwickler konzipiert, um einen möglichst minimalen Satz an erforderlichen Komponenten zur zuverlässigen Unterstützung des Betriebs der Docker-Engine in eingebetteten Szenarien zu enthalten. Der Netzwerkstack besteht aus Network Manager, DNSmasq und Modem Manager. Zudem besteht die Möglichkeit zu einer direkten Anbindung der gleichnamigen balena Cloud Services.

Während Hypriot vorrangig für den Einsatz auf den Raspberry-Pi-Modellen und Odroid-Boards ausgelegt ist, bietet balenaOS Unterstützung für insgesamt 15 verschiedene Mainline-Hardwareplattformen und zugehörige Varianten, darunter neben den bereits genannten etwa auch das BeagleBone, diverse Intel-Boards oder die NVIDIA-Plattformen Jetson TX1 und TX2. Für Raspberry-Pi-Modelle liegt BalenaOS in vier Ausführungen vor (Stand: 20. März 2020). Dabei ist der jeweilige Build von BalenaOS 2.48.0+rev1 auf die Raspberry Pi Varianten Raspberry Pi (v1 und Zero), Raspberry Pi 2, Raspberry Pi 3B/B+ und Raspberry Pi 4 angepasst.

Echtzeit auf dem Raspberry Pi mit dem Linux PREEMPT_RT-Patch

Der Raspberry Pi ist in zunehmendem Maß auch als Plattform für Embedded Systeme interessant. Anders als bei Media- oder Web-Servern kommt es bei zahlreichen Embedded-Anwendungen allerdings explizit auf vorhersehbare Timings mit niedrigen Latenzzeiten an – Anforderungen, die selbst ein leichtgewichtiges Raspbian-Derivat oder eine der geläufigen Linux-Varianten nur unzureichend erfüllen kann.

Die Echtzeitbetriebssysteme ChibiOS/RT und FreeRTOS unterstützen auch bestimmte ARM-Architekturen. Das eignet sie prinzipiell zum Betrieb auf einigen Raspberry Pi Modellen wie dem Raspberry Pi 2 und 2B. (Im Bild: YouTube-Screenhot einer ChibiOS/RT-Demo auf einem Raspberry Pi).
Die Echtzeitbetriebssysteme ChibiOS/RT und FreeRTOS unterstützen auch bestimmte ARM-Architekturen. Das eignet sie prinzipiell zum Betrieb auf einigen Raspberry Pi Modellen wie dem Raspberry Pi 2 und 2B. (Im Bild: YouTube-Screenhot einer ChibiOS/RT-Demo auf einem Raspberry Pi).
(Bild: Vergil Cola / YouTube / lightsurge2.blogspot.de)

Für den Raspberry Pi sind zahlreiche Betriebssysteme vorhanden, die jedoch Echtzeitanforderungen in der Regel nur unzureichend erfüllen. Fortgeschrittene Linux-Anwender können dagegen mit Hilfe des PREEMPT_RT Patches des Linux-Mainline-Kernels auf dem Raspberry Pi echte, praktikable Echtzeiteigenschaften erreichen. Dies ist spätestens seit Version 4.4.8 des Linux-Mainline-Kernels auch auf dem Einplatinenrechner praktikabel. Dieser Lösungsansatz bietet sich speziell für das Raspberry Pi 3 mit dem BCM2709-SoC-Chipsatz von Broadcom an.

Bildergalerie
Bildergalerie mit 47 Bildern

Anders als bei den meisten hier beschriebenen Betriebssystemen handelt es sich hier um keine „Out-of-the-Box“-Lösung: Anwender müssen in der Lage sein, händisch einen Linux-Mainline-Kernel auf einem Raspberry Pi aufzusetzen und zu konfigurieren. Auf der Website des OSADL finden Sie eine detaillierte Anleitung und die Möglichkeit, sich für einige der aufwändigeren Schritte Skripte generieren zu lassen. Diese Beschreibung wird regelmäßig parallel zu aktuelleren Kernel-Versionen aktualisiert. Der aktuelleste Stand für Echtzeit-Linux ist die gepatchte Kernel-Version 5.6.10-rt5). Für den Raspbian-Kernel 4.19 liegt auch eine kürzlich aktualisierte Patch-Version vor (patch-4.19.120-rt52, Stand 6. Mai 2020)

Eine detaillierte Beschreibung, wie Sie auf einem Raspberry Pi mit dem Linux PREEMT_RT-Patch Echtzeiteigenschaften erreichen können, finden Sie im Fachbeitrag Echtzeit mit dem Raspberry Pi von Dr.-Ing. Claus Kühnel .

Umsetzungen von ChibiOS/RT, FreeRTOS und RTEMS

Ansonsten gab es bereits seit dem Erscheinen des Single Board Computers einige Bemühungen, Mikrokernel auf dem Raspberry Pi zu betreiben und mit zufriedenstellender Funktionalität einzusetzen – mit mehr oder weniger Erfolg. Zwei vielversprechende Portierungen sind die Umsetzungen der auf Open-Source-Kernel aufbauenden Echtzeitbetriebssysteme ChibiOS/RT und FreeRTOS.

ChibiOS/RT ist ein äußerst schnelles RTOS, das über eine GPL3-Lizenz vertrieben wird und für Embedded-Anwendungen auf Basis von 8-, 16- und 32-Bit-Mikrocontrollern konzipiert ist. Es bietet eine gute Leistung beim Context Switching und unterstützt Externe Komponenten (uIP, lwIP, FatFs) sowie C++ Applikationen.

Eine offizielle Unterstützung für das Raspberry Pi besteht nicht, eine Portierung muss eigenhändig kompiliert werden. Es bestehen aber erfolgreiche Ports des RTOS, die zumindest auf einem Raspberry Pi Model 2 erfolgreich und stabil laufen. Eine hier im Detail beschriebene Portierung auf das Raspberry Pi bietet Treiber für GPIO- und serielle Ports, GPT (General-Purpose Timer), I2C, SPI und PWM. Ein zweites, älteres Beispiel mit einigen Codeauszügen ist auch auf diesem Blog zu finden, zusammen mit einem Video einer hierauf aufgesetzten Demo.

Das über GPL-Lizenz kursierende FreeRTOS ist bereits länger erhältlich und eines der populärsten freien Echtzeitbetriebssysteme. Es bietet einen extrem schlanken Mikrokernel, der gerade einmal aus drei C files besteht und damit nur ein Minimum an Arbeitsspeicher benötigt. FreeRTOS wurde bereits auf 35 Mikrocontroller portiert und existiert auch in einer Variante, die ARMv7-Architekturen unterstützt. Damit eignet sich das Echtzeitbetriebssystem prinzipiell auch für den Einsatz auf einem Raspberry Pi 2 Model B.

Eine funktionale Demo besteht und kann seit Mitte 2016 von einem Github-Repository frei bezogen werden. Für den Einsatz in individuellen Anwendungen muss das System allerdings eigenhändig kompiliert werden. Die Portierung ist ein Community-Projekt, weshalb es für den aktiven Einsatz derzeit keinen Support seitens des Entwicklers gibt. Darüber hinaus wurde das Projekt seit dem 11. Dezember 2017 nicht mehr aktualisiert.

Auch das Echtzeitbetriebssystem RTEMS wurde vor einigen Jahren für die Benutzung auf dem Raspberry Pi portiert. Wie in den Fällen von ChiboOS/RT und FreeRTOS handelt es sich dabei um die Portierung eines OpenSource-Kerlnel durch einen einzelnen, unabhängigen Entwickler. Die Umsetzung scheint nicht ganz so gelungen zu sein, wie im Fall von ChibiOS oder FreeRTOS. Dafür wird das Projekt im Gegensatz zu den beiden letztgenannten vom Entwickler weiter verfolgt. Die jeweils aktuellen Daten stehen in einem Github-Repository bereit (Letzter Commit: 4. Januar 2020).

(ID:43374623)

Über den Autor