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 3 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

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)
Tracing (Stack-Overflows)

Implementierung

Posix-Libraries für Threads und IPC
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
Testszenarien definieren und Testprogramme schreiben (CPU-, Interrupt-Last, ...)
Messung von Latenzen
Netzwerk verwenden (DHCP, TCP/IP), Sockets