2016-08-11 3 views
2

Ich habe wenig Hintergrund auf, wie diese Hardware tatsächlich funktioniert, aber jetzt bin ich verpflichtet, zu lernen, wie ein Linux-Framebuffer-Treiber für Android-Geräte zu schreiben.Ist ein Linux-Framebuffer-Treiber ein Grafikkartentreiber?

Ich bin verwirrt von Linux-Grafik-Stack. Von dem, was ich verstehe, interagiert der Compositing-Fenstermanager auf einem Desktop-Computer mit DRM, die dann Daten an bestimmte Grafikkartentreiber sendet. Auf der anderen Seite gibt es eine Art von Controller-Daten von GPU's Speichern durch DMA abgerufen und an den Monitor senden, wie sie in der Antwort here vorgeschlagen. Auch durch Diagramm bei page 29 von this Buch, ich dachte, dass ein Frame-Buffer-Treiber auf tatsächlichen Grafikgeräten ist, so muss es interagieren mit bestimmten Grafikkartentreiber, zum Beispiel, ein nVidia Treiber.

Aber wenn ich google schreibe einen Frame-Buffer-Treiber für ein Embedded-Gerät, zeigen die Ergebnisse, als ob der Fahrer direkt verantwortlich für die Kontaktierung mit der LCD, so dass es aussieht, ist es sogar unter einem Grafikkartentreiber.

Also ist ein Frame-Buffer-Treiber eigentlich ein Grafikkartentreiber?

Antwort

2

Ein Framebuffer-Treiber bietet eine Schnittstelle für

  1. Modesetting
  2. Speicherzugriff auf den Videopuffer
  3. Grund 2D-Beschleunigungsvorgänge (zB zum Blättern)

diese Schnittstelle bereitzustellen, Der Framebuffer-Treiber spricht im Allgemeinen direkt mit der Hardware.

Zum Beispiel verwendet der Framebuffer-Treiber vesafb die VESA-Standardschnittstelle, um mit der Videohardware zu kommunizieren. Dieser Standard ist jedoch begrenzt, so dass es nicht wirklich viel Hardwarebeschleunigung gibt und das Zeichnen langsam ist. Ein anderes Beispiel ist der intelfb Framebuffer-Treiber. Es spricht mit einer Intel-Hardware, die eine proprietäre Schnittstelle verwendet, die mehr Beschleunigungsmöglichkeiten zur Verfügung stellt, so dass es schneller ist.

Heutzutage werden KMS-Treiber stattdessen für die meisten Hardware verwendet. Sie stellen sowohl einen Framebuffer als auch Zugriff auf andere GPU-Funktionen, z. OpenGL, über DRM.

Ihre Verwirrung scheint von der Tatsache zu stammen, dass der Framebuffer-Treiber und der X11-GPU-Treiber in der Tat konkurrieren! Aus diesem Grunde, wenn Sie ein KMS-System haben, der Wechsel zwischen grafischen und Textkonsolen Augenblick ist jedoch mit einem nicht-KMS-System, es ist langsam, da sowohl der fb-Treiber und der X11-Treiber benötigen das Video erneut zu initialisieren Hardware auf dem Konsolenschalter.

Weitere Informationen finden Sie in der ausführlichen Vortrag Linux Graphics Demystified von Martin Fiedler: http://keyj.emphy.de/files/linuxgraphics_en.pdf

+0

Große, danke für die Antwort. Ein Framebuffer-Treiber ist also ein kleinerer GPU-Treiber, und selbst eine nVidia-Karte muss einige allgemeine Schnittstellen für diese Art von Treiber haben, obwohl das 3D-Beschleunigungsmaterial auf solchen Karten dunkel geheim ist. Und trifft dies auch auf ein eingebettetes Gerät mit einem LCD zu, d. H. Der Bildpuffertreiber steuert nicht den IC auf einem LCD, sondern eine GPU in SoC? –

+0

Es ist die Reverse Engineering 'nouveau' Treiber für nVidia-Karten, die KMS + fb, sondern auch 3D-Beschleunigung in einer begrenzten und oft instabilen Art und Weise zur Verfügung stellt.Wie erwähnt, gibt es nur wenige gemeinsame Schnittstellen, von denen VESA am bekanntesten ist. Auf einem Embedded-Gerät ist es möglich, keine dedizierte GPU zu haben, siehe https://github.com/notro/fbtft/wiki für ein Beispiel eines Treibers, der direkt mit dem LCD-Controller kommuniziert. – ypnos