Internet der Dinge Open-Source Real-Time-OS für das IoT

Kaum ein neues Embedded System kommt ohne Netzwerkverbindung aus, egal, ob es sich um eine drahtlose oder drahtgebundene Kommunikation handelt,diese durch Anwendungen genutzt wird oder einen Remote Access für Konfiguration und Service darstellt. Ein RTOS für das IoT kann sich als hilfreich erweisen.

Ein Embedded System, welches derartige Anforderungen erfüllen muss, ist mit vernünftigem Entwicklungsaufwand nicht ohne Betriebssystem umsetzbar. Die Suche nach einem für die betreffende Aufgabenstellung geeigneten Betriebssystem umfasst, viele und sehr unterschiedliche Aspekte. In [1] sind verschiedene Aspekte einer solchen Suche zusammengestellt. Es wird die Vielschichtigkeit dieser Aufgabe gezeigt, aus einem recht unübersichtlichen Angebot existierender Betriebssystem das für die Aufgabe optimale auszuwählen.

Befragt man Wikipedia nach den aktuell existierenden Realtime-Betriebssystemen (RTOS), dann findet man im September 2018 weit über hundert verschiedene RTOS. Wenn man noch zwischen proprietären und Open-Source-Realtime-Betriebssystemen (OS-RTOS) unterscheidet und von jeder Gruppe noch die aktiven separiert, zeigt sich, dass die OS-RTOS in der Überzahl sind und von denen auch der größere Teil aktiv ist.

Betrachtet man die Langlebigkeit von Investitionsgütern, dann erscheint schon aus strategischen Gründen der Einsatz eines OS-RTOS zwingend. Einer ersatzlosen Abkündigung eines etablierten, proprietären RTOS kann auf diese Weise der Schrecken genommen werden. In einer gewissen Klasse von Embedded-Systemen bis hin zu Supercomputern gibt es mit Linux ein ausgezeichnetes Beispiel für ein solches Open-Source-Betriebssystem. Als Erfolgsfaktoren werden in [2] unter anderem Codequalität, verteiltes Entwicklungsmodell und Lizenz sowie die Unterstützung durch das GNU-Projekt benannt. Die Skalierbarkeit auf heute mehr als 30 Prozessor-Architekturen und der Test in einem maximal heterogenen Umfeld führen indirekt auch zur hohen Stabilität von Linux und damit wiederum zu dessen hoher Akzeptanz.

Damit ist Linux heute ein mächtiges Betriebssystem, das aber auch gewisser Ressourcen bedarf und für Systeme mit kleinem Footprint, geringen Ressourcen und möglichst für Batteriebetrieb angepasstem Stromverbrauch weniger geeignet ist. In [3] werden die Top-IoT-Betriebssysteme einer Betrachtung unterzogen. Das sind FreeRTOS, Contiki, RIOT, Zephyr, Mbed, TinyOS, MyNewt und LiteOS. Eine Bewertung findet anhand von Github Trends (Watch, Star, Fork) und Contributions statt und zeigt keine eindeutigen Ergebnisse.

Ich habe hier aus Github aktuell (2018-09-24) Daten für Code-Frequency, Commits und Contributions für Contiki, RIOT und Zephyr zusammengetragen und in Bild 1 bis Bild 3 vergleichend zusammengestellt.

Wenn die Abbildungen etwas zeigen, dann kann deutlich eine größere Aktivität der Community beim Zephyr OS gegenüber den anderen beiden RTOS verzeichnet werden. Natürlich ist das Zephyr OS auch ein junges RTOS, was nicht in allen Bereichen bereits ausgereift sein kann.

Das Zephyr-Projekt

Wie bereits erwähnt, gibt es für die Bereiche, die Linux nicht gut abdecken kann, eine starke Fragmentierung durch proprietäre und Open-Source-Angebote gleichermaßen. Das Zephyr-Projekt (https://www.zephyrproject.org/what-is-zephyr) ist ein von der Linux Foundation gehostetes Collaboration-Projekt, eine Open-Source-Zusammenarbeit, die führende Kräfte aus der Branche zusammenbringt, um mit dem Zephyr OS ein skalierbares Echtzeit-Betriebssystem (RTOS) für mehrere Architekturen ressourcenbeschränkter Geräte zu entwickeln.

Das Zephyr-Projekt erhebt den Anspruch, dass das Zephyr OS sich hervorragend für den Aufbau einfacher vernetzter Sensoren, Wearables, bis hin zu Modems und kleinen IoTWireless-Gateways eignet. Da das Zephyr OS modular ist und mehrere Architekturen unterstützt, können Entwickler auf einfache Weise eine optimale Lösung für ihre Anforderungen zusammenstellen.

 

Diese Eigenschaften machen deutlich, dass der Geist von Linux mit dem Zephyr-Projekt auf den Bereich dieser Klasse von Embedded-Systemen übertragen werden soll, der von Linux selbst aus den bereits genannten Gründen nicht erreicht werden kann. Der Zephyr-Kernel wurde aus dem kommerziellen VxWorks-Microkernel-Profile für VxWorks von Wind River abgeleitet. Microkernel-Profile ist ein small-footprint RTOS und hat sich über 20 Jahre von der DSP-RTOS-Technologie, bekannt als Virtuoso, entwickelt. Das RTOS wurde bereits in mehreren kommerziellen Anwendungen verwendet (Satelliten, militärische Kommunikation, Radar, Telekommunikation, Bildverarbeitung) [4].

Fibers und Tasks, als Objekte von Microkernel-Profile, können in einer verteilten Multi-Core- oder Multi-Prozessor-Umgebung auf realer Hardware oder dem QEMU-Emulator ausgeführt werden [5]. Das Zephyr OS liegt Anfang September in der Version v1.13.0 vor und unterliegt einer Apache-License v2.0 (www.apache.org/licenses).

Bei der Kombination mit GPL-lizenzierter Software ist der Lizenzkompatibilität besondere Beachtung zu schenken (http://www.apache.org/licenses/GPL-compatibility.html).

Unterstützte Controller und Entwicklungsumgebung

Das Zephyr OS unterstützt verschiedene Prozessor-Architekturen und eine Vielzahl von Boards. Unter https://docs.zephyrproject.org/boards/boards.html ist die aktuelle Liste der unterstützten Boards zu finden. Zu nennen sind x86-Boards (8), Arm-Boards (90), ARC-Boards (3), NIOS-II-Boards (2), Xtensa-Boards (2), RISCV32-Boards (4) und Arduino-Shields (2). Nicht alle Funktionen des jeweils betreffenden Boards werden aber heute schon unterstützt. Tabelle 1 zeigt einen beispielhaften Auszug für einige wenige Arm-Boards sowie die dort unterstützten Funktionen.

BoardSoCControllerUnterstützte Funktionen
Arduino ZeroATSAMD21G18AArm Cortex-M0+NVIC, FLASH, SYSTICK, WDT, GPIO, USART, SPI, USB
BBC Micro:BitNordic nRF51822Arm Cortex-M0NVIC, RTC, UART, GPIO, FLASH, RADIO
ST Nucleo L476RGSTM32L476RGArm Cortex-M4NVIC, UART, PINMUX, GPIO, I2C, PWM, SPI
Phytec reel boardNordic nRF52840Arm Cortex-M4FNVIC, RTC, UART, I2C, SPI, GPIO, FLASH, RADIO (BLE), MMA8652 polling: ADPS9960 polling: HDC1010 polling
FRDM-K64FKinetis K64Arm Cortex-M4FNVIC, SYSTICK, PINMUX, GPIO, I2C, SPI, WATCHDOG, ADC, PWM, ETHERNET, UART, FLASH, SENSOR

 

Tabelle 1: Unterstützte Arm-Boards sowie die dort unterstützten Funktionen.

Die Zephyr Entwicklungsumgebung ist unter Linux, Windows und macOS lauffähig und kann dem Getting Started Guide in [6] folgend auf dem jeweiligen Host installiert werden. Da ich auf einem Windows-PC arbeite, habe ich mich für die Installation von Ubuntu in einer virtuelle Maschine (Oracle Virtualbox 5.2) entschieden und dort Zephyr installiert. Auf der Zephyr-Downloadpage https://www.zephyrproject.org/developers/#downloads steht die aktuelle Version der Entwicklungsumgebung zum Download bereit. Zum Zeitpunkt der Erarbeitung dieses Manuskriptes war das Zephyr SDK 0.9.5 vom November 2018.

Nach der Installation liegt die Zephyr-Entwicklungsumgebung hier im Verzeichnis zephyrsdk, während das Zephyr-Source-Code-Repository aus GitHub im Verzeichnis zephyr abgelegt ist.