Welches Linux-Treibersubsystem / welche Linux-Treiber-API wird für ein einfaches Bildschirm- / Überwachungsgerät verwendet?

9

Ich entwickle ein eingebettetes System mit einem Touchscreen. Der Touchscreen fungiert sowohl als Eingabe als auch als Ausgabe, wobei eine "virtuelle" Tastatur die grafische Ausgabe überlagert.

Ich habe einen funktionierenden Gerätetreiber, der Eingaben vom Berührungssensor liest und korrekt in Tastendrücke übersetzt, die mithilfe dieses Handbuchs auf kernel.org erstellt wurden . Ich möchte diesen Treiber erweitern, um auch die Bildausgabe auf dem Bildschirm zu verarbeiten.

Ich möchte sowohl getty als auch X mit möglichst wenig Duplikaten unterstützen. Ich verwende eine minimale Debian-Variante mit von Kirschen ausgewählten Paketen, wie z. B. minimal X. Beachten Sie, dass ich nicht beabsichtige, diesen Treiber in die Repository-Pipeline aufzunehmen, obwohl ich ihn möglicherweise in einem öffentlichen GitHub-Repository ablegen würde.

Die Ausgabe von Bildschirmbildern erfolgt derzeit über eine umständliche Problemumgehung: Eine Startoption, um das Rendern auf der eingebetteten Grafikhardware der CPU zu erzwingen, obwohl diese nicht mit einem Display verbunden ist, und ein Dämon, der diesen Puffer kontinuierlich auf dem Bildschirm abkratzt, ändern eine Handvoll Vorab-Bilder definierte Pixel, um die Tastatur visuell zu erstellen, und schiebt sie auf den realen Bildschirm.

Dies dient als Proof of Concept und beweist, dass ich die Sprache, die das Bildschirmgerät erwartet, richtig verstehe, aber offensichtlich nicht optimal ist.

kernel.org hat auch eine Anleitung für "DRM" -Gerätetreiber, aber das scheint ein schwerwiegender Overkill für das zu sein, wozu meine Hardware in der Lage ist:

Die Linux-DRM-Schicht enthält Code, der die Anforderungen komplexer Grafikgeräte erfüllen soll und normalerweise programmierbare Pipelines enthält, die sich gut für die Beschleunigung von 3D-Grafiken eignen.

Keine meiner Hardware hat etwas, das der 3D-Beschleunigung ähnelt, daher komme ich zu dem Schluss, dass dies wahrscheinlich nicht das ist, was ich will.

Welches Subsystem / welche API soll ich verwenden? Ich denke, eine fehlende Terminologie hält meine Suche zurück, aber weitere Informationen darüber, wie dies erreicht werden kann, wären willkommen.

Hardwaredetails (wahrscheinlich irrelevant): Die CPU und der Bildschirm kommunizieren über ein 8080-ähnliches Parallelprotokoll, das die CPU nativ nicht unterstützt. Daher emuliere ich es mit GPIOs (durch Manipulieren von Registern über mmap).

Das Senden eines vollständigen Bildschirmbilds dauert ca. 20 ms, das Abrufen einer vollständigen Kopie aus dem eingebetteten Grafikpuffer jedoch ca. 180 ms. Daher ist das Überspringen dieses Schritts das wichtigste Ziel. Die Bildschirmhardware enthält genügend SGRAM- Speicher, um Daten im gesamten Frame zu speichern, und unterstützt das Schreiben eines rechteckigen Unterbereichs. Daher wäre ein Hook wünschenswert, um nur den Teil des Bildschirms zu aktualisieren, der sich geändert hat.

Auf dem Bildschirm wird nicht speziell auf den Zeitpunkt eingehender Daten eingegangen. Der Eingang des Berührungssensors wird von einem speziell entwickelten IC verwaltet, der über I²C mit der CPU kommuniziert , was von der CPU unterstützt wird. Der vorliegende Treiber verwendet die linux/input-polldev.hSchnittstelle. Die CPU ist ein Broadcom BCM2835 , der Bildschirm ist ein TFT mit einem eingebetteten Himax HX8357- Controller, der Touchscreen- Sensordecoder ist ein ST STMPE610 und zwischen dem HX8357 und dem BCM2835 befindet sich ein Spannungspegelschieber (Nexperia 74LVCH245A ). Weitere Details erhalten Sie auf Anfrage.

memtha
quelle
Ich bin mir ziemlich sicher, dass Sie das NIH-Syndrom haben und ein Rad neu erfunden haben - normalerweise verwendet der Touchscreen das HID-Protokoll, das mehr als weniger unterstützt wird. Beachten Sie, dass der Touchscreen nur ein Eingabegerät ist.
0andriy
@ 0andriy Das Rad neu zu erfinden ist irgendwie mein Ding, aber es gab keine (echten) Treiber für dieses spezielle Gerät, als ich anfing. Mir ist kein standardisiertes Protokoll für Geräte mit menschlicher Schnittstelle bekannt, aber wenn es eines gibt, bin ich mir ziemlich sicher, dass das Touch-Overlay, das ich hier verwende, es nicht verwendet. Ich bin nicht der Meinung, dass ein "Touchscreen nur ein Eingabegerät ist", da meiner definitiv Bilder ausgibt.
Memtha
Sie haben einfach nicht zwei Hardwareblöcke in einem Paket erkannt. Touchscreen ist, unabhängig von seinem Namen, nur ein Eingabegerät. Die Ausgabe wird beispielsweise als Panel- oder TFT-Anzeige bezeichnet.
0andriy
merriam-webster.com/dictionary/touchscreen Ja, es gibt zwei verschiedene Hardwareteile: ein berührungsempfindliches Overlay und einen TFT-Bildschirm. Diese beiden Komponenten bilden zusammen den Touchscreen. Sie können mir nicht sagen, dass ich den Touchscreen falsch definiere, indem Sie mir sagen, dass ich den Namen ignorieren soll.
Memtha

Antworten: