Overscan unter Armbian auf einem Einplatinencomputer (H3-basiert)

2122
Camilo Martin

Ich arbeite Armbian mit einem Allwinner H3- basierten SBC ( NanoPi M1 ):

NanoPi M1

Wie Sie sehen können, hat es eine CVBS out und fair genug, nach einem wenig mit dem Bootloaders Bastelei script.bin (die in und aus einem kompilieren .ini-ähnlichen FEX - Format mit bin2fex und fex2bin ) und auch den Stift herauszufinden Um das Video an eine 3,5-mm-TRRS-Buchse anzuschließen, habe ich es mit einem dieser alten Fernsehgeräte sprechen lassen.

Ich wurde jedoch bald an einen der Nachteile dieser alten Fernsehgeräte erinnert: Overscan.

tv foto

Dies ist nicht einmal der Fernseher, auf dem dieses Gerät verwendet wird, daher kann ich nicht darauf vertrauen, dass es eine "Auto-Fit" -Option hat. Ich hätte lieber, dass der Framebuffer etwas Platz an schwarzen Rändern verschwendet. Ich greife über SSH darauf zu.

Ich habe mir angesehen, welche Boot-Optionen dies script.binzulässt, und es bietet keinen Overscan, sondern nur die Auflösung. Ich habe untersuchte auch xrandr, fbsetund die Dateien in /sys/devices/platform/disp/graphics/fb*, aber ich kann nicht scheinen, um herauszufinden, wie Abtastungs gelöst werden kann - schaffe ich es nur auf einer Seite des Bildschirms zu befestigen. Vielleicht muss ich der Desktop-Umgebung ( Xfce ) mitteilen, nicht den vollen Framebuffer zu verwenden? Ihre Dokumente scheinen knapp zu sein. Ich weiß nicht, was ich wirklich mache.

Bei der Suche nach Lösungen für andere Einplatinencomputer sind die Lösungen, die ich finde, für jedes Board spezifisch (wie das Raspberry Pi, das eine Lösung hat, die für sein Broadcom-Boot-Skript spezifisch ist). Bei der Suche nach universellen Linux-Lösungen finde ich die meisten Leute, die es von den spezifischen Grafikkartentreibern lösen.

Es ist einfach zu beschreiben: Ich möchte einfach nicht, dass der gesamte Bildschirm verwendet wird . Aber ich habe keine Ahnung, wo ich suchen muss.


Einfügen mitdmesg .

fbset sieht aus wie das:

mode "720x480" geometry 720 480 720 480 16 timings 0 0 0 0 0 0 0 rgba 5/11,6/5,5/0,0/24 endmode 

Ich habe versucht, die Zeiteinstellungen anzupassen (z. B. fbset -left N), aber selbst wenn die Änderung gemeldet wurde (durch erneutes Aufrufen fbset), hat sich nichts geändert - Änderungen, z -xres.

Das Anzeigemodul ist tv. modinfo tvgibt mir:

filename: /lib/modules/3.4.112-sun8i/kernel/drivers/video/sunxi/disp2/tv/tv.ko alias: platform:tv license: GPL description: tv driver author: zengqi depends: intree: Y vermagic: 3.4.112-sun8i SMP preempt mod_unload modversions ARMv7 p2v8 
3
Ich denke nicht, dass eine kleinere virtuelle Größe (fb oder X) als die Bildschirmgröße funktioniert, und ich glaube auch nicht, dass xfvwm4 die Fensterplatzierung auf einen kleineren Bereich beschränken kann. Wenn Ihre Hardware dies unterstützt (welcher Treiber wird für den Composite-Modus verwendet? `Dmesg`?), Können Sie versuchen, mit den Anzeigezeiten („ fbset “) für ein TV-kompatibles Modell mit größeren Grenzen und geringerer Auflösung zu arbeiten. Es kann jedoch Hardwareeinschränkungen geben, welche Modelines funktionieren. Gibt es Links zur Hardwaredokumentation des TV-Ausgangsteils? dirkt vor 7 Jahren 0
Ich habe die Frage mit mehr Informationen bearbeitet (wenn das nicht so wäre, bitte sagen Sie) - auch, meinen Sie, dass dies nicht außerhalb des Moduls möglich ist, das die Anzeige steuert? (Ich dachte, 'X' könnte den Bildschirm oder so etwas schneiden). Camilo Martin vor 7 Jahren 0
Sowohl X als auch fb können einen * größeren * "virtuellen" Framebuffer verwenden und dann * Teile * davon auf den verschiedenen "Köpfen" (Displays) anzeigen, aber das Problem ist, dass Sie es andersherum brauchen: Einen kleineren virtuellen Puffer als das, was angezeigt wird, und ich glaube nicht, dass dies funktionieren wird, da der virtuelle Framebuffer normalerweise auf das Maximum aller Anzeige-Extents eingestellt ist. dirkt vor 7 Jahren 0
TV-Kernel-Quelle scheint [hier] zu sein (https://github.com/allwinner-zh/linux-3.4-sunxi/tree/master/drivers/video/sunxi/disp2/tv). Alle von `drv_tv.c`. `tv_ac200.c` und` de_tve.c` scheinen hartcodierte Timings zu verwenden (von einem kurzen Blick). Um das TV-Modell zu ändern, müssen Sie daher nicht unerwartet den Quellcode ändern (und versuchen, einige Hardware-Dokumente zu finden, bevor Sie das tun). Ich fürchte, ich kann mir keinen leichteren Weg vorstellen. dirkt vor 7 Jahren 0
Danke, dass Sie mich in diese Richtung gezeigt haben, ich würde nicht wissen, wo ich suchen muss. Ich verstehe jetzt, warum der Framebuffer auf den gesamten Bildschirm eingestellt werden sollte, aber X zeichnet auf den Framebuffer, oder? Ist dieser Prozess nicht konfigurierbar? (Ist es nicht so, wie Desktop Compositing wie Compiz funktioniert?) Camilo Martin vor 7 Jahren 0
Ja, X zeichnet den Framebuffer. Grundsätzlich steuert der Fenstermanager (xfvwm4 für Xfce) die Platzierung und Größenänderung von Fenstern und sollte die Möglichkeit einschränken können, dass Fenster sich nur in einem bestimmten Bereich befinden. Ich kenne jedoch keinen Fenstermanager, der für die Durchsetzung konfiguriert werden kann Das. Auch hier müssten Sie wahrscheinlich die Quelle ändern. dirkt vor 7 Jahren 0
@dirkt Ich werde immer wieder versuchen, Hardcoding-Werte im Grafiktreiber zu finden, aber dank Ihnen weiß ich jetzt, worauf ich zurückgreifen muss. Camilo Martin vor 7 Jahren 0

1 Antwort auf die Frage

2
Y.Miyake

Bitte probieren Sie diese Befehle:

devmem2 0x01E00130 w 0xF0050398 devmem2 0x01E00130 w 0x30050398 fbset -xres 670 -vxres 670 

Die xresolution ist auf 670 reduziert, aber für meinen Orange Pi Zero ist alles in Ordnung. Ändern Sie möglicherweise die korrekte Adresse von "TV ENCODER RE-SYNC PARAMETER REGISTER (Offset 0x130)" für Ihren SoC.

Ok, es ist schon einen Monat und ich wollte es unbedingt mal ausprobieren, aber ich muss nur sagen, dass ich es noch nicht getan habe. Ich schätze es sehr, dass Sie eine mögliche Lösung für dieses Problem hinzugefügt haben. In Anbetracht der zwei Upvotes glaube ich, dass jemand es ausprobiert hat, also sind es jetzt drei :) Wenn jemand kommentieren kann, dass es für sie funktioniert, bevor ich dazu komme, akzeptiere ich Ihre Antwort. Es liegt wirklich über dem, was ich alleine hätte finden können, ich wusste gar nicht, dass Sie dieses devmem2-Zeug aus dem Userland machen könnten. Camilo Martin vor 6 Jahren 0