Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Процессорные модули » SK-iMX6S/D-SODIMM
Независимый вывод изображения на два монитора
elsid
Добавлено 31.08.2015 17:14
0
Сообщение: 1
elsid
5

Пункты: 929
Регистрация: 28.05.2015
Здравствуйте.
Озадачился я таким вопросом: как выводить независимые изображения на разные мониторы. Имеется вывод на vga через LCD и на VGA через переходник LVDS-RGB.

По умолчанию, в тех сборках, что поставляются с платой, если включены два монитора, то они дублируются. Чтобы выводить изображения независимо, нужно добавить в строку, которую отдаёт U-boot ядру следующее:
ldb=sep1
Либо ldb=sep0, от этого, насколько я понял, зависит то, какой фрембуфер будет главным, то есть с меньшим номером (fb0).
При такой строке система загружается с одним работающим монитором, второй, который на fb3 по умолчанию остаётся blank=1, то есть пустой.
Выполняем echo 0 > /sys/class/graphics/fb2/blank и получаем изображение уже на двух монитора, и изображения разные. На основном приглашение командной строки, на втором - Tux.
Проблема в том, что изображение портится на обоих мониторах, и часть изображения с первого монитора попадает на второе. На фото видно
https://www.dropbox.com/s/p6yz80fuow692ez/IMG_20150831_155026.jpg?dl=0

Есть ли у кого-то идеи, почему такое происходит?
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 31.08.2015 17:35 Редактировалось 31.08.2015 17:36 Сообщение: 2
Pavel Ivanchenko
Admin
4.39

Пункты: 91348
Регистрация: 24.03.2009
Пол: Мужчина
На iMX6S можно получать 2 канала.
На iMX6D/Q можно получать 4 канала.
Но в тонкостях настроек этого я не очень разобрался, настраивал скорее экспериментально.
Штатно, в настройках старого ядра для SK-iMX6Q включено 4 канала (HDMI, 2xLVDS, LCD), на SK-iMX6X-SODIMM включается 2 канала (см. переменные окружения uboot).
Судя по фотографии, включается Dual режим (для панелей с двумя LVDS интерфейсами), из собственного опыта - нужно еще крутить настройки IPU в боардфале ...
Причем, если правильно помню, имело значение даже какое разрешение на каком порту сидит ...
Полагаю, от версии ядра к ядру настройки так же надо пересматривать.
Спуститься к концу Подняться к началу
Персональная информация
elsid
Добавлено 31.08.2015 17:55 Редактировалось 31.08.2015 17:56 Сообщение: 3
elsid
5

Пункты: 929
Регистрация: 28.05.2015
Добавляю описание к фото:
Правый монитор - LVDS, по умолчанию изображение идёт на него ( в силу строки, передающейся из U-Boot). На нём была запущена одна из графичесих демок OpenVG, затем демка была остановлена, но изображение осталось (это уже особенности демки, значения не имеет). После этого выполнил
echo 0 > fb2/blank, запустился монитор, который сидит на LCD.
И как видно на фото, на этот монитор ушла часть изображения с LVDS монитора, в том числе и мерцающий курсор, который "пробил" чёрную дырку на остатке изображения от демки (видно на обоих мониторах, на LCD он съехал вниз).

И что подразумевается под старым ядром? 3.1.2?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 31.08.2015 21:11 Сообщение: 4
sasamy
4.70

Пункты: 76882
Регистрация: 14.08.2009
Цитата

И что подразумевается под старым ядром? 3.1.2?


да, это старое ядро (оно же 3.0.35) - на фтп есть виртуалка с 3.10.17

http://starterkit.ru/html/doc/Manual_imx6_VBM.pdf
Спуститься к концу Подняться к началу
Персональная информация
elsid
Добавлено 03.09.2015 16:23 Сообщение: 5
elsid
5

Пункты: 929
Регистрация: 28.05.2015
Цитата

на фтп есть виртуалка с 3.10.17


Попробовал собрать из этого нового buildroot - больше проблемы нет. Изображения друг на друга не накладываются.

Строка настройки выдеоустройств:
video=mxcfb0:dev=ldb,1024x768M@60,if=RGB24 video=mxcfb1:dev=lcd,1024x768M@60,if=RGB24 ldb=dul1 consoleblank=0
По идее dul1 - означает дублирование изображения на мониторах, если я не ошибаюсь, но в моём случае работает как мне надо - изображения на двух видеовыводах независимое.
При запуске работает только fb0, который на LVDS. Выполняю echo 0 > fb2/blank, и включается второй монитор, который на LCD. Не пойму, как его запускать сразу на старте системы, но так тоже пойдёт.
Дальше можно запускать различные графические демки на разных дисплеях. В качестве устройства отрисовки для OpenGL берём fbGetDisplayByIndex(N), где N - номер нужного фреймбуфера. Для fb0 берём 0, для fb1 - 1, и так далее.
Сейчас точно не скажу, но возможно также перед запуском приложения нужно выполнить
export FB_FRAMEBUFFER_0=/dev/fb0
export FB_FRAMEBUFFER_1=/dev/fb1
export FB_FRAMEBUFFER_2=/dev/fb2
export FB_FRAMEBUFFER_3=/dev/fb3
как советует i.MX_6_Programming_Framebuffer_API.pdf.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 04.09.2015 19:50 Сообщение: 6
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
При запуске работает только fb0, который на LVDS. Выполняю echo 0 > fb2/blank, и включается второй монитор, который на LCD. Не пойму, как его запускать сразу на старте системы, но так тоже пойдёт.

не знаю, что у вас за ядро, но, например, в 3.0.35 в файле
drivers/video/mxc/mxc_ipuv3.c
есть функция mxcfb_probe
где есть подходящее для экспериментов ветвление:
Код
/* Unblank the primary fb only by default */
if (pdev->id == 0)
mxcfbi->cur_blank = mxcfbi->next_blank = FB_BLANK_UNBLANK;
else
mxcfbi->cur_blank = mxcfbi->next_blank = FB_BLANK_POWERDOWN;

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 07.09.2015 13:55 Сообщение: 7
sasamy
4.70

Пункты: 76882
Регистрация: 14.08.2009
Цитата

По идее dul1 - означает дублирование изображения на мониторах


ldb=dul1 задает режим работы для LVDS Bridge и влияет только на устройства вывода подключенные к LVDS

Цитата

Выполняю echo 0 > fb2/blank, и включается второй монитор, который на LCD. Не пойму, как его запускать сразу на старте системы, но так тоже пойдёт.


в сборке предусмотрен скрипт для тестирования экранов, можно закоментироавть строки для fb-test в скрипте и получится скрипт оживления второго экрана :)

buildroot-2014.08-sk/board/starterkit/imx6sk-min/S90fbtest

#!/bin/sh

# [ -x /usr/bin/fb-test ] || exit 0
[ -f /sys/class/graphics/fb2/blank ] || exit 0

case "$1" in
start)
echo "0" > /sys/class/graphics/fb2/blank
# /usr/bin/fb-test -f 2
;;
stop)
;;
restart|reload)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac

exit $?
Спуститься к концу Подняться к началу
Персональная информация
elsid
Добавлено 08.09.2015 14:00 Сообщение: 8
elsid
5

Пункты: 929
Регистрация: 28.05.2015
Эксперименты с ветвлением в mxc_ipuv3.c результата не дали. Может и я чего не понял.

Вариант с S90fbtest работает.

Спасибо за подсказки.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Процессорные модули » SK-iMX6S/D-SODIMM