Ein maßgeschneidertes Linux Betriebssystem für Embedded Hardware mit Yocto Project erstellen. Zwei praktische Beispiele.
Maßgeschneidertes Linux Betriebssystem für Embedded Hardware mit Yocto Project
Hauptsächlich entwickeln wir Software für industrielle Messtechnik.
Die große Herausforderung dabei: Im Zeitalter IIoT4.0 sind die Software-Applikationen meist komplex, erledigen Aufgaben und Algorithmen in parallel laufenden Threads, sind über Schnittstellen mit Sensoren, Cloud-Services und anderen Systemen vernetzt und kommunizieren über HMI’s (Display, Touch-Screen) mit den Anwendern der Geräte. Bei all diesen hohen Anforderungen müssen Software und Betriebssystem oft auf eine kleine Embedded System Hardware portiert und skaliert werden und dort performant laufen.
Wenn es in unseren Projekten darum geht, für ein Embedded System neben der Software zusätzlich ein funktionell maßgeschneidertes Betriebssystem bereitzustellen, dann kommt Yocto Project und Embedded Linux bei uns zum Einsatz.
Yocto Project ermöglicht es uns, ein für die Projektaufgabe maßgeschneidertes Linux-Betriebssystem für eine Hardwareplattform zu konfigurieren, auf dem On-Top dann die Software-Applikationen des Gerätes lauffähig sind.
Yocto Project unterstützt dabei auch Hardwareplattformen wie z.B. den Raspberry-Pi. Auch wenn der Einsatz derartiger Boards im industriellen Umfeld nicht ganz so typisch ist, nutzen wir sie gerne für Prototypen oder auch für Schulungszwecke, um Yocto und den Umgang mit Embedded Systemen zu lernen.
Und so sind bei uns zwei kleine OpenSource Projekte entstanden, welche den Umgang mit Yocto Project und dem Raspberry-Pi zeigen und eine ausführliche Wiki-Dokumentation enthalten, wie man Schritt für Schritt zum fertigen Zielsystem kommt.
Warum Yocto Project und was ist das überhaupt ?
Das Yocto-Projekt (YP) ist ein Open-Source-Kollaborationsprojekt, das Entwicklern hilft, maßgeschneiderte Linux-basierte Systeme unabhängig von der Hardware-Architektur zu erstellen.
Das Projekt bietet eine flexible Reihe von Tools und einen Raum, in dem Embedded-Entwickler weltweit Technologien, Software-Stacks, Konfigurationen und Best Practices austauschen können, um maßgeschneiderte Linux-Images für Embedded- und IOT-Geräte oder überall dort, wo ein angepasstes Linux-Betriebssystem benötigt wird, zu erstellen.
Yocto Project und das darin integrierte Build System bitbake sind somit ein flexibler Werkzeugkoffer, um für eine kundenspezifische Hardwareplattform ein maßgeschneidertes Linux-Betriebssystem zu konfigurieren und es über lange Zeit reproduzierbar zu erzeugen und zu pflegen.
Der große Vorteil: Hat man die Prinzipien und Regeln dieses Werkzeugkoffers einmal verstanden und verinnerlicht, kann man das System für alle Hardwareplattformen nutzen, deren Hersteller eine Yocto Unterstützung in Form verschiedener Layer oder ganzer BSP’s (Board Support Packages) bereitstellen. Die Yocto Project Unterstützung hat sich dabei im Umfeld von industriell nutzbaren Prozessorarchitekturen wie z.B. ARM i.MX6/i.MX8 o.ä. als Industriestandard durchgesetzt und ist auch auf anderen Plattformen wie dem Raspberry-Pi nutzbar.
Die über Yocto Project / bitbake erstellten Linux Betriebssystem-Varianten enthalten maßgeschneidert nur genau das, was in diesem Yocto Project Werkzeugkoffer konfiguriert ist. Man hat alles selbst unter Kontrolle.
Warum Embedded Linux ?
Linux ist seit vielen Jahren ein stabiles schlankes und flexibles Betriebssystem, welches durch seinen OpenSource Ansatz für beliebige Prozessorarchitekturen compiliert werden kann, solange die Prozessoren bestimmte Mindestanforderungen an grundlegender Funktionalität erfüllen.
Durch verfügbare Linux-Kernel-Erweiterungen (Preempt-RT, Xenomai) kann ein Linux System auch für Echtzeitanforderungen konfiguriert werden.
Linux verfügt über standardisierte Schnittstellen und Treiber. Ethernet, TCP/IP Stack, WLAN, Bluetooth, I2C Bus, SPI Bus, RS485, RS232, USB, USB-OTG, SSH, SSL, SFTP, OPC-UA, MQTT, Grafikschnittstellen wie LinuxFB, DirectFB, OpenGL, X11, Wayland, zusätzliche Frameworks wie das Qt-Framework (Qt/QML) oder Chromium (HTML5, CSS3), Multi-Threading, Multi-Core-Support, Realtime-Support (Preemt-RT und Xenomai) und vieles mehr. All dies ist mehr oder weniger von Haus aus mit Embedded Linux auf beliebiger Hardware und Prozessor-Architektur möglich und in der Funktionalität identisch.
Yocto Project Beispiel 1: Maßgeschneidertes Linux für Raspberry-Pi4 64 Bit mit Qt5
Ausgangssituation
Im Rahmen einer Projektstudie wurde bei uns eine Prototyp-Hardware benötigt.
Die erforderliche Hardware, ein SANTINO 7.0 BX PCT 7.0 inch Panel Mount HMI based on NXP i.MX6 processor war jedoch kurzfristig nicht lieferbar.
Weil alles schnell gehen musste, entschieden wir uns für eine alternative Lösung mit einem Raspberry-Pi4 Modul mit einem 7-Inch LCD-Touch-Display. Dieses Original 7-Inch PCAP Touch Screen Display von der Raspberry Pi Foundation ist eine fertig montierte und kalibrierte Baugruppe, das Raspberry-Pi4 Modul muss nur noch hinten aufgesteckt werden.
Ein paar Bilder unserer Prototyp-Hardware:
Aufgabenstellung
Auf der Raspberry-Pi4 Prototyp-Hardware sollte ein Embedded Linux basierend auf dem Yocto Release Kirkstone mit Qt5 laufen. Als HMI dient ein 7-Inch LCD Touch Display. Qt5 soll die Grafikausgaben ohne Fenstermanagement direkt nach linuxfb oder eglfs rendern.
Diese Systemkonfiguration soll später auf die finale Hardware, einem SANTINO 7.0 BX PCT 7.0 inch Panel Mount HMI based on NXP i.MX6 processor von der Firma seco (ehemals Garz+Fricke) übertragen werden.
Lösung
Für die Prototyp-Hardware haben wir einen Yocto Layer meta-difitec-raspi-qt5 erstellt, welcher die erforderliche Systemkonfiguration für eine Raspberry-Pi4 basierte Plattform konfiguriert.
Wie wir dies im Detail Schritt für Schritt gelöst haben, wurde in einem ausführlichen Wiki dokumentiert.
Dabei ist ein Beispiel-Projekt entstanden, welches wir unter MIT-Lizenz als OpenSource öffentlich zur weiteren Nutzung bereitstellen.
Das Projekt eignet sich sehr gut für einen praktischen Einstieg in die Yocto-Welt. Am Ende erhält man eine lauffähige Yocto basierte Linux-Distribution (Kernel Version 5.15) inklusive Qt5 Framework für den Raspberry-Pi4.
Wiki
Yocto Project Embedded Linux + Qt-Framework für Raspberry-Pi4 64 Bit |
Wir wünschen viel Erfolg und Spaß damit…
Yocto Project Beispiel 2: Maßgeschneidertes Linux für Raspberry-Pi Zero Wifi
Todo