Zephyr - Entwicklung

Zephyr ist ein neues und sehr spannendes Open-Source-Echtzeit-Betriebssystem. Gerade dort wo Linux aufgrund seines Umfanges nicht in Frage kommt ist Zephyr eine gute Alternative.
Im Seminar wird mit der Betriebssystemarchitektur von Zephyr begonnen und bis zur Entwicklung eigener Projekte alle relevanten Themen besprochen.
Vorausgesetzt werden gute Kenntnisse in der Programmiersprache C sowie sicherer Umgang in der Linux-Shell.
Die Kursdauer beträgt 4 Tage.

Im Verlauf des Kurses werden diverse kleinere Programme, welche die Funktionsweise der jeweiligen Mechanismen demonstrieren erstellt bzw. unter Verwendung von Übungsvorlagen vervollständigt.
Großer Wert wird darauf gelegt, nicht nur die Funktionalitäten zu besprechen, sondern auch Hintergrundinformationen aus Sicht des Kernels zu liefern. Dadurch wird ein tieferes Verständnis des Betriebssystemes erlangt.
Dem Teilnehmer wird dadurch ermöglicht die Theorie in die Praxis im eigenen Projekt umzusetzen.
Übungen werden allesamt auf einem Embedded-Board durchgeführt. Dazu wird das Open-Source-Board Olimex-GD32-E407 verwendet. Beispielsweise werden Sensoren angebunden und deren Daten über das Netz verschickt.

Agenda

Zephyr als Echtzeit-Betriebssystem

Architektur, Lizenzierung
Threading, Kernel- und Userspace
Cryptographie, Security
Scheduling-Modell (kooperativ und preemptiv), Deadline-Threads
Interrupt-System mit very-high-prio Threads
Timerhandling, mit und ohne Timertick
Memory-Management, Stack und Heap, Speicheranalyse
Slap-Allocator
Zephyr-Community, Entwicklungsprozess

Entwicklungswerkzeuge

Installation (debian-Pakete, venv, sdk, west)
Verzeichnisstruktur
Layering von Architektur-, Board- und Projekt-spezifischen Dateien
Device-Tree-Overlays und Kernel-Konfigurationen
Erstellwerkzeuge (west, cmake)
Debugging mit JTAG (openocd, gdb)
Generierung und Auswertung von Core-Dumps
Tracing mit CTF (Stack-Overflows)

Implementierung

Posix-Libraries für Threads und IPC
Multithreading
Memory-Allokation im Userspace
Individuelle Shell-Kommandos und Logging anlegen
Verwendung von GPIOs (Button und LED als Beispiel)
Anbindung von Sensoren mit I2C und SPI
GPS- und GNSS-Modem verwenden
Testszenarien definieren und Testprogramme schreiben (CPU-, Interrupt-Last, ...)
Messung von Latenzen
Netzwerk (managed und unmanaged, DHCP, TCP/IP), Sockets
Kommunikation mit FIFOs
ZBUS (Zephyr-Bus) als M-zu-N-Kommunikation
Entwicklung von Treibern