Zephyr-RTOS Übersicht und Status
ECC 1. Juni 2021, © Markus Kappeler
About me
● Markus Kappeler ● 25 years in business ● Soft- and Hardware development ● Founder of bytesatwork ● Sailing, Skiing Hiking and Mountain-Biking
Agenda
● Zephyr
● Was ist Zephyr ● Features ● Roadmap ● RTOS – Realtime ● Footprint ● Bootloader mcuboot
Zephyr Project
● Opensource Realtime Betriebsystem ● Lebendige Community ● Mehrere Architekturen ● Modular und Konfigurierbar ● Bereit für Produkt-Entwicklung
Zephyr Hardware Architekturen
Zephyr Projekt Mitglieder
Februar 2016 2021
Upstream commits last year Momentum 2016 2021 Entwickler 80 969 Commits 2806 52591 Boards 4 250+ Zephyr Board-Unterstützung
Siehe auch: https://docs.zephyrproject.org/latest/boards/index.html
Zephyr Ecosystem
Kernel / HAL Zephyr OS Zephyr “Community” • Scheduler • Kernel objects und services • Kernel und HAL Zephyr Project • low-level Architektur und BSP • OS Services wie IPC, Logging, file • Power Management und low level systems, crypto Interfaces zur Hardware Zephyr Project OS Services and Low level APIs • Plattform spezifische Treiber Zephyr OS • Generisches I/O API • SDK, Tools und Kernel / HAL Entwicklungsumgebung • File systems, Logging, Debugging und IPC • Zusätzliche Middleware OS Services • Cryptography Services • Device Management und Application Services Bootloader • Networking und Connectivity Application Services Zephyr Community • High Level APIs • Zugang zu standardisierten Daten • 3rd Party Module und Bibliotheken Modellen • Support für Zephyr in 3rd Party • High Level Netzwerk Protokoll Projekte: Jerryscript, Micropython, Iotivity
Architektur
● Cooperative und Pre-emptive Threading ● Speicher wird typischerweise statisch alloziert, auf Heap auch möglich ● Memory Protection: stack overflow Protection, Kernel object und Driver tracking, Thread isolation ● Integrierte Device Driver Schnittstelle ● Native und integrierter Netzwerk Stack ● BLE 5.2 controller und host, BLE Mesh ● USB 2.0 ● Tolerante Lizenz
Native IP stack
● Neu implementiert ● Dual Mode IPv4 / IPv6 ● Mehrere Interfaces ● Time Sensitive Network (TNS, PTP) ● BSD-socket basiertes API
● raw socket ● Compliance und Security-Tested
● > 500 automatisierte Tests
Zephyr Networking Features
High-Level Protokolle Unterstützte Schnittstellen Netzwerk Management • CoAP v1 • Ethernet ● Statische IP oder DHCP • Ethernet over USB ● hostname • MQTT Client v3.1.1 • WiFi ● net shell Commands • HTTP • IEEE 802.15.4 with 6Lo ● API mit Event-Callbacks • HTTP Server • Bluetooth LE with 6Lo • Native HTTP Client • CANbus • Websocket Client • PPP • SOCKS5 • LWM2M • Thread • OpenThread Project
Zephyr Bluetooth Features
● Bluetooth 5.2 compliant
● Low Energy & Bluetooth Classic
● Multiple HCI transports
● Qualified for LE and Mesh
● Aktive Community entwickelt an neuen Standards
● Mesh & GATT Referenz Stack in Bluetooth SIG
● Unterstützung von mehreren BLE HW
● Nordic mit ARM Cortex-M
● Vegaboard mit RISC-V
● Viele Optimierungen in den letzten Releases
● Latency, CPU und Power consumption
Zephyr USB Device Stack
● Implementationen für mehrere MCU (STM32, Kinetis, nRF, SAM, ..)
● USB 2.0 Unterstützung
● Full und High-speed
● Unterstützte Klassen
● CDC ACM, ECM und EEM
● RNDIS
● HID
● Mass storage
● Bluetooth
● Device Firmware Update (DFU)
● WebUSB
Zephyr ist unter Apache 2.0 Lizenz
● Man darf Software unter dieser Lizenz frei in jedem Umfeld verwenden, modifizieren und verteilen. ● Eine Kopie der Lizenz muss dem Paket beiliegen. ● Änderungen am Quellcode der unter der Apache- Lizenz stehenden Software müssen nicht zum Lizenzgeber zurückgeschickt werden. ● Eigene Software, die unter Apache-Lizenz stehende Software verwendet, muss nicht unter der Apache- Lizenz stehen.
Zephyr Roadmap
● LTS ist v1.14.
● > 2 jährig
● Aktuell v2.5
● Next v2.6 ist rc1
● v2.7 soll LTS2 werden
● 2 Jahre Support
Zephyr RTOS - Realtime
● Aussage über Interrupt – Contextswitch jitter ● Test mit GPIO und Oszilloskop
● GPIO Input Interrupt triggert GPIO Output ● Input via Frequenz-Generator ● Task wartet blockiert auf Semaphore ● GPIO Interrupt setzt Semaphore ● Task bekommt Semaphore und setzt GPIO Output
Zephyr RTOS - Realtime
Zephyr RTOS - Realtime
● Test mit einem 150MHz getakten Cortex-M4 ● Context Switch mit Semaphore: 5.3 uSec ● Input via message-queue in Task übergeben: 6.3 uSec
Zephyr RTOS - Realtime
● Verteilung bei 10000 Input-Events – small deviation
Linux RT-Patch
● Vergleich cyclictest mit iMX6 @998MHz mit RT-Patch
Zephyr Footprint
STM32f474 – 512KB flash and 128KB RAM
● C «hello world» ca. 12KB Flash
● C++ mit allen Features > 225KB
Zephyr Bootloader
● Zephyr unterstützt mcuboot
● Signierte Images (Public Key in ROM) ● Rückgängig machbare Updates (test, confirm) ● 2 Slots: aktiv ● Device-Management via
● mcumgr : go Cmd-Line Programm ● hawkbit: Update Server von Eclipse ● newtmgr: Apache mynewt ● Ziel ist Secure-Boot
Zephyr mcuboot
● Im Projekt einschalten CONFIG_BOOTLOADER_MCUBOOT=Y ● Flash Partitionen eintragen in devicetree
● Boot Partition für MCU-Boot ● Slot-0 für aktive Applikation ● Slot-1 für neue Version ● Scratch Partition für Swap
Zephyr mcuboot
● Build und Installation von mcu-boot
● west flash –hex-file mcubuild/zephyr/zephyr.hex ● Build, Signierung und Installation von Applikation
● west sign -t imgtool --no-bin -H orig.hex --key mykey.pem --version 1.0.0 ● west flash --hex-file orig.hex
Zephyr mcuboot
● Devicemanagement via smp: simple management protocol ● smp unterstützt Transports für:
● UART ● UDP ● BLE ● Signierung der Applikation via west Command
● west sign -t imgtool --no-hex -B next.bin --key mykey.pem --version 1.1.0 ● Installation in slot-1 via Host-Tool mcumgr
Zephyr Links
Doku:
● https://docs.zephyrproject.org/latest/
● https://www.zephyrproject.org/developer-resources/#how-to-contribute
● https://docs.zephyrproject.org/latest/contribute/index.html
● Github: https://github.com/zephyrproject-rtos/zephyr
● Mail Liste: https://lists.zephyrproject.org/g/main
● Slack: https://tinyurl.com/y5glwylp
Ein Mitglied der
Vielen Dank an - Kate Stewart von der Linux Foundation Ein Teil der Präsentation basiert auf ihren Slides [email protected] http://www.bytesatwork.io