Оверскан под Armbian на одноплатном компьютере (на базе H3)

2134
Camilo Martin

Я бегу Armbian по принципу Allwinner H3 -На SBC ( NanoPi M1 ):

NanoPi M1

Как вы можете видеть, он имеет CVBS вне, и вполне справедливо, после того, как немного переделывая загрузчика script.bin (который компилирует в и из .ini-like формата FEX с bin2fex и fex2bin ), а также выяснить, булавку Заказ на видео на 3,5 мм TRRS-разъеме, я узнал об этом на одном из этих старых телевизоров.

Но мне вскоре напомнили об одном из недостатков этих старых телевизоров: сверхсканирование.

tv photo

Это даже не тот телевизор, на котором он будет использоваться, поэтому я не могу доверять тому, чтобы у него была какая-либо опция «автоподгонки». Я бы предпочел, чтобы фреймбуфер занимал место на черных границах. Я получаю к нему доступ через SSH.

Я смотрел на то, какие параметры загрузки script.binпозволяет, и он не предлагает overscan, просто устанавливая разрешение. Я также посмотрел на xrandr, fbsetи файлы /sys/devices/platform/disp/graphics/fb*, но я не могу показаться, чтобы выяснить, как оверскан может быть решена - я только успевай клип на экран в одну сторону. Может быть, я должен сказать окружению рабочего стола ( Xfce ) не использовать полный кадровый буфер? Их документы кажутся скудными. Я действительно не знаю, что я делаю.

Когда я смотрю на решения для других одноплатных компьютеров, я нахожу решения, специфичные для каждой платы (например, у Raspberry Pi есть решение, специфичное для его загрузочного скрипта Broadcom). Ища решения общего назначения для Linux, я нахожу, что большинство людей решают его с помощью конкретных драйверов видеокарт.

Это просто описать: я просто не хочу, чтобы весь экран использовался . Но я понятия не имею, где искать.


Вставить сdmesg .

fbset выглядит так:

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 

Я пытался настроить время (например, fbset -left N), но даже если он действительно сообщал об изменении ( fbsetповторным вызовом ), ничего не изменилось - изменение, например, -xresс другой стороны, привело к видимым результатам (отсечение экрана).

Модуль дисплея есть tv. modinfo tvдает мне:

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
Я не думаю, что попытка меньшего виртуального размера (fb или X), чем размер экрана, будет работать, и я также не думаю, что xfvwm4 может ограничить размещение окна меньшей областью. Если ваше оборудование поддерживает его (какой драйвер используется для композитного режима? `Dmesg`?"), Вы можете попытаться поэкспериментировать с настройками времени дисплея (`fbset`) для ТВ-совместимой модельной линии с большими границами и меньшим разрешением. Но могут быть аппаратные ограничения на то, какие моделины работают. Есть ли ссылки на аппаратную документацию части ТВ-выхода? dirkt 7 лет назад 0
Я отредактировал вопрос с дополнительной информацией (если это не так, пожалуйста, скажите) - также, вы имеете в виду, что это не может быть сделано за пределами модуля, который управляет дисплеем? (Я думал, что `X` может обрезать экран или что-то в этом роде). Camilo Martin 7 лет назад 0
И X, и FB могут использовать * больший * «виртуальный» кадровый буфер, а затем отображать * части * этого на различных «головках» (дисплеях), но проблема в том, что он вам нужен наоборот: меньший виртуальный буфер чем то, что отображается, и я не думаю, что это будет работать, потому что обычно виртуальный фрейм-буфер по умолчанию максимальный из всех экстентов дисплея. dirkt 7 лет назад 0
Источник ТВ-ядра, похоже, [здесь] (https://github.com/allwinner-zh/linux-3.4-sunxi/tree/master/drivers/video/sunxi/disp2/tv) Все из `drv_tv.c`, `tv_ac200.c` и` de_tve.c`, похоже, используют жестко закодированные тайминги (из быстрого просмотра). Таким образом, не случайно, что для смены модельного ряда телевизора вам, скорее всего, придется изменить исходный код (и попытаться найти некоторые документы по оборудованию, прежде чем вы это сделаете). Боюсь, я не могу придумать более легкий путь. dirkt 7 лет назад 0
Спасибо, что указали мне в этом направлении, я не знаю, где искать. Теперь я понимаю, почему фреймбуфер должен быть установлен на полный экран, но X рисует в фреймбуфере, верно? Разве этот процесс не настраивается? (Разве это не то, как работают настольные композиции, такие как Compiz?) Camilo Martin 7 лет назад 0
Да, X обращается к кадровому буферу. В принципе, оконный менеджер (xfvwm4 для Xfce) контролирует размещение и размеры окон и должен иметь возможность ограничить это, чтобы окна могли находиться только в определенной области, но я не знаю ни одного оконного менеджера, который можно настроить для принудительного применения тот. Опять же, вам, вероятно, придется изменить источник одного. dirkt 7 лет назад 0
@dirkt Я буду пытаться найти способы обойти значения жесткого кодирования в видеодрайвере, но благодаря вам теперь я знаю, к чему обратиться, это действительно ценится. Camilo Martin 7 лет назад 0

1 ответ на вопрос

2
Y.Miyake

Пожалуйста, попробуйте эти команды:

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

xresolution уменьшен до 670, но для моего Orange Pi Zero все в порядке. Возможно, измените правильный адрес «РЕГИСТРАЦИЯ ПАРАМЕТРОВ ПЕРЕДАЧИ СИНХРОНИЗАЦИИ ТЕЛЕВИЗОРА (Смещение 0x130)» для вашего SoC.

Хорошо, это был месяц, и я собирался попробовать это, но должен прокомментировать, что я действительно еще не сделал, я просто ценю, что вы добавили возможное решение этой проблемы. Учитывая 2 отзыва, я думаю, что кто-то попробовал это, так что теперь это три :), если кто-то может прокомментировать, подтверждая, что это работает для них, прежде чем я обойду это, я приму ваш ответ. Это действительно выше того, что я смог бы придумать сам, я даже не знал, что вы могли бы делать такие вещи `devmem2 'из пользовательского пространства. Camilo Martin 7 лет назад 0

Похожие вопросы