Showcase: Grafik auf i.MX8MP

Die Inbetriebnahme der Grafikausgabepipeline auf dem i.MX8M Plus (kurz i.MX8MP) ist ein aktuelles Beispiel dafür, wie Open Source und Upstream-Treiber für GPUs und Displayeinheiten Aufwand und Risiko im Projekt reduzieren können.

Historischer Hintergrund der Grafiktreiber

Die Grafik-Möglichkeiten auf eingebetteten Systemen haben sich über die letzten Jahre stark verändert. Wir werfen zuerst einen Blick auf die Historie der Grafikhardware und der zugehörigen Software.

Anfangs hatten eingebettete Systeme, wenn überhaupt, nur sehr eingeschränkte Möglichkeiten der Grafikausgabe. Meist konnten sie nur simple LC-Displays ansteuern und die gesamte Arbeit des Bildaufbaus musste von der CPU geleistet werden, da es keinerlei Hardwarebeschleunigung gab. Einerseits war dies sehr praktisch, da die CPU sehr flexibel ist und die Treiber für die simplen Hardwareeinheiten zu schreiben keinen großen Aufwand bedeutete: Treiber mussten nichts anderes tun als ein mit Bilddaten gefülltes Stückchen Speicher mit dem richtigen Timing auf den Datenbus des Displays zu legen. Andererseits setzte die begrenzte Rechenpower der CPU der Grafik sehr klare Grenzen. Der eigentliche Zweck des Geräts darf nicht beeinträchtigt werden, und der ist selten nur die Anzeige schöner Grafik.

Vor etwa 15 Jahren, als Moore's Gesetz noch in voller Geschwindigkeit in Kraft war, wurde es schließlich möglich komplette Grafikbeschleuniger (GPUs) in die passenden Größen-, Stromaufnahme- und Kostengrenzen der Welt der eingebetteten Systeme zu schrumpfen. Da die GPUs nun die Hauptlast der Generierung der Bilddaten für die Anzeige übernahmen, wurde es möglich viel ansprechendere grafische Oberflächen zu bauen, während gleichzeitig auf der CPU wieder Zeit für andere Aufgaben frei wurde.

Dies hatte allerdings auch seinen Preis: die Komplexität der Treibersoftware für diese GPUs übersteigt die der bisherigen simplen CPU-Algorithmen bei weitem. Außerdem herrscht im GPU-Geschäft ein starker Konkurrenzdruck, mehrere Firmen versuchen hier GPUs für den Einsatz in eingebetteten Systemen zu verkaufen. Dies führte dazu, dass die meisten Firmen in diesem Geschäft sich entschlossen ihre Treibersoftware closed-source anzubieten. Das soll vermeiden, dass versehentlich wesentliche Details ihrer Hardware, welche sie von der Konkurrenz abheben sollen, nach außen dringen.

Probleme mit closed-source Treibern

Eingebettete Systeme haben einige besondere Anforderungen, da sie meist für einen sehr speziellen Anwendungsfall gebaut werden, den sie mit maximaler Kosteneffizienz erfüllen müssen. Dadurch bleibt meist wenig Spielraum, um Ineffizienz in der Verarbeitungspipeline der Geräte mit roher Rechenpower zu kompensieren, d.h. die Software muss stark auf den Anwendungsfall hin optimiert werden. Außerdem sind viele dieser Geräte für eine lange Anwendungszeit im Feld ausgelegt. Da immer mehr dieser Geräte auch mit dem Internet verbunden sind, ist ein einfaches Update der Software zur Behebung von funktionalen oder sicherheitsrelevanten Problemen von entscheidender Bedeutung.

Diese Anforderungen sind sehr schwer zu erfüllen, wenn sich closed-source Komponenten im System befinden, über welche man keine Kontrolle hat. Auch wenn der Hersteller der GPU in der Lage und willens ist notwendige Änderungen an der Treibersoftware auszuführen, so kann dies doch eine sehr lange Zeit in Anspruch nehmen. Dies kann dazu führen, dass das Gerät nicht zum angepeilten Zeitpunkt im Markt platziert werden kann und dadurch die Verkaufsaussichten reduziert werden. Auch kann diese Abhängigkeit zur Folge haben, dass notwendige Updates an anderen Systemkomponenten (z.B. Linux-Kernel, Basissystembibliotheken) deutlich erschwert werden, da diese sich auf die closed-source Komponenten auswirken.

Welche Alternativen gibt es?

Das Pengutronix Grafikteam hat langjährige Erfahrung bei der Erstellung von Open-source-Treibern für diese Hardwareeinheiten.

Für uns begann diese Geschichte, als einige unserer Kunden das Risiko einer Closed-source-Komponente im Herzen ihres Produkts nicht dulden wollten. So begannen wir gemeinsam eine Open-Source-Alternative zu den bestehenden Lösungen der GPU-Hersteller zu schaffen. Die i.MX-Produktlinie von NXP ist in der Medizintechnik und in der Industrie sehr beliebt, da sie sehr viele der dort geforderten Features abdecken kann. Beginnend mit dem i.MX6 integrieren diese SoCs GPUs vom Hersteller VeriSilicon (ehemals Vivante). Einige Freiwillige in der Free-Software-Bewegung hatten bereits begonnen diese GPUs per Reverse-Engineering zu dokumentieren. Diese Bewegung ist unter dem Namen Etnaviv bekannt. Pengutronix hat sich diesen Aktivitäten angeschlossen und dabei geholfen eine hochqualitative Alternative zum Herstellertreiber zu entwickeln.

Inzwischen ist der Etnaviv-Treiber in einer ganzen Reihe von eingebetteten Systemen zu finden. Von Medizingeräten, über In-flight-Entertainment-Systeme, bis hin zu Bedieneinheiten in Industriemaschinen und Fahrzeugen. Alle Teile des Etnaviv-Treibers sind als Open Source verfügbar, was jedem ermöglicht diesen zu verbessern oder anzupassen. Das eliminiert das Risiko einer Abhängigkeit von einem einzelnen Hersteller. Natürlich ist Pengutronix als starker Partner mit sehr viel Erfahrung in diesem Bereich immer daran interessiert Anwendern bei Anpassung und Fehlerbehebung behilflich zu sein.

Der Etnaviv-Treiber ist in die vorhandenen Frameworks, wie DRM im Linux-Kernel und Mesa auf der Userspace-Seite, eingebunden. Damit ist der Treiber sehr nah am generischen Linux-Desktop-Grafikstack, wodurch die damit ausgestatteten eingebettete Systeme weniger speziell werden und sich meist sehr ähnlich zu einem Desktop-Linux-System verhalten.

i.MX8MP GPU Inbetriebnahme mit upstream Treibern

Vor kurzem erhielt das Pengutronix Grafikteam den Auftrag die GPU auf dem NXP i.MX8M Plus , welcher sich aktuell im Vorserien-Stadium befindet, in Betrieb zu nehmen. Dieses SoC ist sehr interessant für viele Industriegerätehersteller, da die i.MX8M-Linie den technischen Nachfolger der sehr beliebten i.MX6 Linie darstellt. Ein sehr großer Teil der Software für diese ältere Linie, welche über die letzten 10 Jahre geschrieben und verbessert wurde, kann für den i.MX8M wiederverwendet werden. Dadurch reduziert sich der Aufwand für die Basisinbetriebnahme des Systems signifikant. Zudem bietet der i.MX8MP einige sehr interessante Features wie CAN FD und TSN Ethernet.

Die GPU auf diesem SoC ist eine leicht abgewandelte Variante des GC7000L, welche auf dem bereits schon unterstützten i.MX8MQ SoC zu finden ist. Während einige kleine Anpassungen nötig waren um den Open-Source-Treiberstack auf dieser speziellen GPU in Betrieb zu nehmen, belief sich der Aufwand unseres Grafikteams für diese Anpassungen auf weniger als eine Woche. An dieser Stelle zahlt sich die große Erfahrung des Teams in diesem Bereich aus.

Zögern Sie nicht uns anzusprechen, wenn Sie Unterstützung bei einem neuen oder bestehenden Projekt mit Grafik Ein- oder Ausgabe benötigen!

Zurück zur Messeseite

Weiterführende Links

Showcase: Preempt RT und Time Sensitive Networking

Heutzutage verfügen selbst einfache und günstige Mikrocontroller über ausreichend Rechenleistung, um zeitkritische Aufgaben im industriellen Umfeld zu bearbeiten. Sind jedoch die Aktoren und Sensoren in einer größeren Anlage verteilt und sollen mittels Ethernet vernetzt werden, ist der tatsächliche Verarbeitungszeitpunkt eines Ereignisses nicht ohne weiteres vorhersehbar. Linux mit Preempt RT und ein Netzwerk mit Time Sensitive Networking (TSN) Funktionalitäten kann hier Abhilfe schaffen.


Showcase: Embedded off-the-shelf

Ein Firmware-Upgrade ist fällig. Eine neu implementierte Funktion muss ausgerollt, eine Sicherheitslücke gepatcht oder neue Hardware-Unterstützung hinzugefügt werden. Die Software ist zwar leistungsfähig, aber komplex. Pengutronix' Strategie, mit dieser Komplexität umzugehen, ist die Arbeit an einem versionskontrollierten Board Support Package (BSP) mit kontinuierlichen Updates und Tests auf dem neuesten Mainline-Linux-Kernel.


Showcase: Continuous Testing

In den Linux-Kernel wandern jedes Jahr etwa 70.000 Patche, viele davon sind Bugfixes. Das Gleiche gilt für die meisten anderen Open-Source-Projekte, die Teil eines modernen Linux-Systems sind. Um von der Arbeit in der Community profitieren zu können, bleibt als sinnvolle Strategie, ständig auf dem neusten Softwarestand aufzusetzen und das System aktuell zu halten. Natürlich können bei dieser Menge an Änderungen auch neue Fehler hinzukommen oder Inkompatibilitäten entstehen.


Showcase: Remote Working

Zur Projektarbeit mit unseren Kunden gehört die Arbeit mit Prototypen-Hardware. Da wir grundsätzlich parallel für mehrere Kunden an vielen verschieden Projekten arbeiten, bedeutet das eine Flut von Prototypen auf den Schreibtischen unserer Entwickler. Spätestens wenn im Team an einem Prototypen gearbeitet werden soll oder längere Zeit nicht aktiv an einem Projekt gearbeitet wird, muss die Hardware regelmäßig umgezogen und am neuen Arbeitsplatz verkabelt werden. Erschwerend kommt hinzu, dass die Entfernung zwischen unseren Entwickler-Schreibtischen durch die aktuelle Homeoffice-Situation, nicht wie gewohnt in Metern, sondern in Kilometern gemessen wird.


Yes we CAN... add new features

Have you ever experienced an otherwise fine product that is missing just the one feature you need for your application?


DSA in Barebox

The v2022.05.0 Release of barebox introduced initial support for the Distributed Switch Architecture (DSA) Framework. DSA is originally a subsystem from the Linux Kernel, which exposes the individual ports of a network switch IC as virtual network interfaces.


First Steps using the candleLight

So you went and got yourself one of our fancy rocket-penguin branded CandleLight dongles or, being the die hard hacker you are, went and soldered one up in your toaster oven labeled "not food safe". What's next then? How do you use this thing? Let's answer these question by grabbing a Raspberry Pi and exploring some of the possibilities.


Pengutronix at Embedded World 2020

Yesterday, Embedded World started, in normal times one of the largest trade shows for embedded development in Europe. While many exhibitors (and thus maybe also lots of visitors) have canceled their presence due to the coronavirus, we present our booth and our demo show cases as usual.


Pengutronix at FrOSCon 2018

This year, a team from Pengutronix attended FrOSCon in St. Augustin for the first time. We took the opportunity to shake hands, talk about our latest developments and meet hackers interested in working with embedded Linux.


Pengutronix TechWeek 2018: NIR for Etnaviv

Once in a year, mostly during springtime, no phone call is answered at Pengutronix, no customer Mail receives a reply, no BSP is built and no coffee machine gargles. But, no fear, this is not the end! It is just the time for something new! New ideas, focused development on new world domination plans and time to think outside the box. Yes, it's again the time for the Pengutronix TechWeek!