Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch...

29
Seite 1 - © Pengutronix - http://www.pengutronix.de – 12. März 2017 Offene Grafik für eingebettete Systeme Michael Tretter [email protected] 12. März 2017 Chemnitzer Linux-Tage 2017

Transcript of Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch...

Page 1: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 1 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Offene Grafik für eingebettete Systeme

Michael Tretter

[email protected]

12. März 2017

Chemnitzer Linux-Tage 2017

Page 2: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 2 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Inhalt

● Wofür brauche ich Grafik bei eingebetteten Systemen?

● Wieso möchte ich Open Source Treiber dafür verwenden?

● Woher bekomme ich Open Source Treiber?

● Wie kann ich damit etwas sinnvolles bauen?

Page 3: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 3 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Was ist ein eingebettetes System?

„Der Ausdruck eingebettetes System (auch englisch embedded system) bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. [...]

Eingebettete Systeme verrichten – weitestgehend unsichtbar für den Benutzer – den Dienst in einer Vielzahl von Anwendungsbereichen und Geräten, beispielsweise in Geräten der Medizintechnik, Waschmaschinen, Flugzeugen, Kraftfahrzeugen, Kühlschränken, Fernsehern, DVD-Playern, Set-Top-Boxen, Routern, Mobiltelefonen oder allgemein in Geräten der Unterhaltungselektronik. […]“

Wikipedia (https://de.wikipedia.org/wiki/Eingebettetes_System)

Page 4: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 4 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Beispiele 1: Automobil-Entertainment

By Catecardvd - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=32985304

Page 5: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 5 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Beispiel 2: Interaktive Informationstafeln

By LG 전자 - 세계 명화가 LG 스마트 TV 속으로 , CC BY 2.0, https://commons.wikimedia.org/w/index.php?curid=17450806

Page 6: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 6 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Beispiel 3: Eigenbau-Videoplayer

Page 7: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 7 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

System on a Chip (SoC)?

Page 8: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 8 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Besonderheiten bei eingebetteter Grafik

● Einzelne Anwendung auf dem Display

● Grafik nur (unwichtiger) Teilaspekt des Produkts

● Möglicherweise hohe Stückzahl und lange Lebensdauer

● Möglicherweise Echtzeit-Anforderungen

● Eingeschränkte Hardware-Ressourcen

● GPU und Display Controller getrennt

● Unterschiedliche Hersteller für Board, SoC und GPU

Page 9: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 9 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Grafik-Hardware: IP-Cores

● Broadcom VideoCore IV (BCM2835, Raspberry Pi)

● ARM Mali (Samsung Exynos, Galaxy S6)

● Qualcomm Adreno (Snapdragon, Google Pixel)

● Imagination Technologies PowerVR (Renesas R-Car, iPhone)

● Vivante Vega (Freescale i.MX, Samsung Galaxy Tab 4)

Page 10: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 10 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Übliches Paket vom Chip-Hersteller

● Hardware-Lieferant liefert Board und Board Support Package

● Linux-Userland mit Binärtreibern

● Gepatchter Linux-Kernel

● Üblicherweise als Yocto, Debian, buildroot, ...

Board/SoCBoard/SoC

Linux-KernelLinux-Kernel

UserlandUserland

Kernel-TreiberKernel-Treiber

AnwendungAnwendung

BinärtreiberBinärtreiber

GrafikGrafikIP-CoreIP-Core

Page 11: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 11 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Probleme mit Binärtreibern

● Debugging und Tracing von Problemen ist schwer bis unmöglich

● Anpassung und Optimierung für Anwendungsfall unmöglich

● Software bei Produktveröffentlichung schon veraltet

● Wartungsprobleme wegen Abhängigkeit von Kernelversion und Treiber

● Selbstständige Softwareupdates ohne Herstellersupport unmöglich

● Ende des Supports der Hardware führt zu Stillstand bei der Software

Page 12: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 12 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Projekte für quell-offene Treiber

● Mali Lima→

● Adreno Freedreno→

● Vivante etnaviv→

● vc4 (veröffentlicht von Broadcom)

● PowerVR ???→

Page 13: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 13 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Hintergrund: etnaviv

● Open Source Treiber für Vivante GPU

● Mehrere Jahre Reverse-Engineering- und Entwicklungszeit

● Upstream: Mesa (>= 17.0.0), Kernel (>= 4.9) und libdrm (>= 2.4.71)

● Unterstützt Qt, X und Wayland

Page 14: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 14 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

UserlandUserland

HardwareHardware

KernelKernel

Linux Grafikstack

GC 3000GC 3000 IPU/DisplayIPU/Display

imx-drmimx-drmetnavivetnaviv

mesamesa

AnwendungAnwendung

libdrmlibdrm

Page 15: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 15 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Mesa

● Open Source Implementierung von OpenGL, EGL, OpenVG, ...

● Beinhaltet verschiedene Hardware- und Software-Treiber

● Auch auf Desktop-Systemen verwendet

Page 16: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 16 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

winsyswinsys

pipe driverpipe driver

state-trackerstate-tracker

etnaviv und Mesa

mesa-stmesa-st dri2dri2

etnavivetnaviv

winsyswinsysimx-drmimx-drm

winsyswinsysetnavivetnaviv

AnwendungAnwendung

KernelKernel

Page 17: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 17 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Verschnaufpause

● Was kann ich denn jetzt praktisch anfangen?

● Mach mal ein Beispiel, wie das benutzt wird!

Page 18: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 18 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Features

● Interaktive Benutzeroberfläche

● Video-Vorschau

● Vollbild-Wiedergabe

● OpenGL-Beschleunigung

Page 19: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 19 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

NXP/Freescale i.MX6

● ARM Cortex A9

● Vivante GC2000/GC3000

● Chips&Media Coda 960

● Image Processing Unit

● Kameraeingänge

● Nitrogen

● HummingBoard

● Wandboard

Page 20: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 20 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

i.MX6i.MX6

Systemarchitektur

H264H264VideoVideo

VideoVideoDecodingDecoding GUIGUI

Chips&MediaChips&MediaCoda 960Coda 960

VivanteVivanteGC 3000GC 3000

DriverDriver OpenGLOpenGLDriverDriver

DisplayDisplay

Page 21: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 21 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Benutzeroberfläche: QML

● Deklarative Sprache um Benutzeroberflächen zu spezifizieren und programmieren

● QML benutzt OpenGL

● 150 Zeilen QML für die Beispielanwendung

● 200 Zeilen C++ um die Video-Pipeline zu steuern

Page 22: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 22 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

QML BeispielcodeComponent { id: videoDelegate Item { id: cell width: GridView.view.cellWidth height: GridView.view.cellHeight z: video.width > width ? 1 : 0 VideoOutput { id: video source: gstsink state: "default" MouseArea { anchors.fill: parent onClicked: {self.toggleCurrent(video)} } states: [ State { name: "default" ParentChange {target: video; parent: cell x: 10; y: 10; width: cell.width – 20; height: cell.height - 20} }, State { name: "fullscreen" ParentChange {target: video; parent: self x: 0; y: 0; width: self.width; height: self.height} } ] transitions: Transition { ParentAnimation { NumberAnimation { properties: "x,y,width,height"; duration: self.anim } } } } GSTSink { id: gstsink } GSTPipeline { sink: gstsink; file: fileName; customPipeline: pipeline } }}

Page 23: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 23 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Video Pipeline: Gstreamer

● Framework zur Verarbeitung von Multimedia-Datenströmen

filesrcfilesrc <h264dec><h264dec> gst-video-itemgst-video-item

● Zero-copy von Gstreamer nach QML durch gst-video-item

● Pipeline kann automatisch von playbin erzeugt werden

● Beispielanwendung verwendet einfach den Dateinamen

Page 24: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 24 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Video Decoding: CODA

● i.MX6 verfügt über Chips&Media Coda 960 (VPU)

● Linux-Treiber im mainline Kernel (VIDEO_CODA)

● V4L2 mem2mem device /dev/videoX→

● Gstreamer-Element: v4l2videoXdec

● Coda benötigt Firmware Immer noch closed source→

Page 25: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 25 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Gesamtsystem

i.MX6i.MX6

H264H264VideoVideo

Chips&MediaChips&MediaCoda 960Coda 960

VivanteVivanteGC 3000GC 3000

V4L2V4L2CODACODA

mesamesaetnavivetnaviv

DisplayDisplay

Page 26: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 26 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Demo

Page 27: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 27 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Zusammenfassung

● Eingebettete Systeme mit Grafik

● Probleme für Wartung und Entwicklung durch Binärtreiber

● Projekte zur Entwicklung von Open Source SoC-Grafiktreibern

● etnaviv: Reverse-Engineered Treiber für Vivante GPUs

● Beispielsystem: Video-Wiedergabe mit QML und Gstreamer

Page 28: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 28 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Jobs bei Pengutronix

● Grafikentwickler gesucht

● http://www.pengutronix.de/jobs

Page 29: Offene Grafik für eingebettete Systeme · bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Eingebettete

Seite 29 - © Pengutronix - http://www.pengutronix.de – 12. März 2017

Danke für eure Aufmerksamkeit

● QML - https://www.qt.io/qt-quick

● mesa - http://www.mesa3d.org

● GStreamer - https://gstreamer.freedesktop.org

● Etnaviv - https://github.com/etnaviv/etna_viv