Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
Qt embedded & framebuffer
Stlkr_19
Добавлено 10.03.2016 09:04
0
Сообщение: 1
Stlkr_19
0

Пункты: 433
Регистрация: 10.03.2016
Всем доброго времени!

Прошу помощи в настройке Qt-embedded для работы с фрэймбуфером.

Собрал простую программку в Qt - Label с текстом "Hello, world!". Запустил ее на фулскрине.
Проблемы:
1. Инвертирован цвет (в программе Qt задан черный – на экране пиксель светится, задан белый – пиксель погашен)
2. Перепутаны попарно пиксели (т.е. тетрады в байтах фреймбуфера)
При этом ядро выводит своего пингвина в верном цвете и пиксели не путает.

Железо:
9g45 + norflash + TFEL-дисплей (160х120 mono, шина 4 бита)

Софт:
linux-2.6.36-rc6
qt-4.8.6 (собран в систему при помощи Buildroot-2015.11.1)
Кросс-компилятор CodeSourcery 2014.05

Фреймбуфер в ядре настроен так (вывод fbset):
Mode “160x120-21”
#D: 0,414 MHz, H: 2,540 kHz, V: 20,991 Hz
geometry 160 120 160 120 4
timings 2415458 1 1 0 0 1 1
accel false
rgba 4/0, 4/0, 4/0
endmode
Спуститься к концу Подняться к началу
Персональная информация
Stlkr_19
Добавлено 11.03.2016 06:21 Сообщение: 2
Stlkr_19
0

Пункты: 433
Регистрация: 10.03.2016
Уточню:
pixel depth = 4bpp (встроенный в проц LCD-контроллер делает 16 оттенков при помощи "ШИМ").
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 11.03.2016 17:40 Сообщение: 3
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
rgba 4/0, 4/0, 4/0

мне кажется тут проблема

пингвин не показатель.. попробуйте утилитой fbi или чем-то подобным вывести контрольную картинку формата bmp с областями, залитыми цветом с определенным кодом (например в фотошопе можно указать номер цвета)
тогда будет понятно - правильно ли драйвер настроен в линуксе..

и не очень понятно, экран монохромный или с градациями серого?

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Stlkr_19
Добавлено 13.03.2016 07:41 Сообщение: 4
Stlkr_19
0

Пункты: 433
Регистрация: 10.03.2016
Экран монохромный.
Градации серого делает LCD-контроллер процессора по такой технологии: за 16 фреймов пиксель зажигается столько раз, сколько нужно для обеспечения заданного для пикселя оттенка - по сути ШИМ, в даташите называется dithering.

По поводу fbi -попробую и отпишусь.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.03.2016 10:52 Сообщение: 5
sasamy
4.71

Пункты: 83558
Регистрация: 14.08.2009
Цитата
Уточню:
pixel depth = 4bpp (встроенный в проц LCD-контроллер делает 16 оттенков при помощи "ШИМ").


при сборке Qt включили поддержку ? по умолчанию 4 bpp не включено

make menuconfig

Target packages
Graphic libraries and applications (graphic/text)
[*] Qt
[*] Gui Module (NEW)
Pixel depths
[*] 4 bpp, grayscale
Спуститься к концу Подняться к началу
Персональная информация
Stlkr_19
Добавлено 13.03.2016 11:40 Редактировалось 13.03.2016 11:43 Сообщение: 6
Stlkr_19
0

Пункты: 433
Регистрация: 10.03.2016
2Jury093
fbi - не нашел, где включается в билдруте...
Попробовал утилиту fbv - frame buffer viewer.
Пишет: unsupported video mode! You have got 4bpp :(

2sasamy
Да, в билдруте этот кыржик поставил. Qt собран для 4 bpp
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.03.2016 12:09 Редактировалось 13.03.2016 12:13 Сообщение: 7
sasamy
4.71

Пункты: 83558
Регистрация: 14.08.2009
У атмела в LCD контроллере была ошибка - где-то даже еррата была, там вроде перепутаны BGR - RGB в качестве одного из путей решения - менять соединительные проводники местами, может для монохромных дисплеев тоже что-то наподобное LSB - MSB перепутано - это же атмел :) - надо погуглить. И Юра правильно говорит - не факт что если пингвина видно то все ОК, как он понастоящему должен выглядеть - это вопрос :)
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.03.2016 12:45 Редактировалось 13.03.2016 13:06 Сообщение: 8
sasamy
4.71

Пункты: 83558
Регистрация: 14.08.2009
Вспомнил - это не ошибка а их чудесное представление о том как данные в памяти хранить

http://www.atmel.com/Images/doc6300.pdf

см. 6.1 TFT Hardware Connection

The AT91SAM9 LCD Controller is based on Blue-Green-Red (BGR) standard while most graphical layers use RGB color map.

Так что с 4 bpp тоже могут быть расхождения как интерпретируются атмелом данные в видео-памяти, типа "Atmel vs весь остальной мир"

Цитата

2. Перепутаны попарно пиксели (т.е. тетрады в байтах фреймбуфера)
Спуститься к концу Подняться к началу
Персональная информация
Stlkr_19
Добавлено 15.03.2016 07:55 Сообщение: 9
Stlkr_19
0

Пункты: 433
Регистрация: 10.03.2016
В-общем, проблему "решил"

В исходниках ядра в файле
arch/arm/mach-at91/board-sam9m10g45ek.c
поправил значение регистра LCD Control Register 2.

/*
#define AT91SAM9G45_DEFAULT_STN_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
| ATMEL_LCDC_DISTYPE_STNMONO \
| ATMEL_LCDC_CLKMOD_ALWAYSACTIVE \
| ATMEL_LCDC_IFWIDTH_4 \
| ATMEL_LCDC_INVVD_INVERTED \
| ATMEL_LCDC_SCANMOD_SINGLE)
*/
#define AT91SAM9G45_DEFAULT_STN_LCDCON2 (ATMEL_LCDC_MEMOR_WINCE \
| ATMEL_LCDC_DISTYPE_STNMONO \
| ATMEL_LCDC_CLKMOD_ACTIVEDISPLAY \
| ATMEL_LCDC_IFWIDTH_4 \
| ATMEL_LCDC_INVVD_NORMAL \
| ATMEL_LCDC_SCANMOD_SINGLE)

Теперь Qt пишет верно и все красиво.

Но в консоли, которая писала в tty0 (на дисплей) всё развалилось - и пингвин, и текст под пингвином (цвет инверсный, пиксели попарно перепутаны).
Консоль мне пока не нужна, поэтому пока так оставлю.

Но если кто-нибудь объяснит, как сделать чтоб и Qt и консоль работали правильно, я буду очень благодарен!
Спуститься к концу Подняться к началу
Персональная информация
Power
Добавлено 29.05.2019 14:45 Редактировалось 29.05.2019 14:52 Сообщение: 10
Power
0

Пункты: 682
Регистрация: 23.12.2018
Цитата
mode
geometry
timings
rgba
endmode
1) Можно подсказать в каком файле прописать в Linux
чтобы были доступны настройки хотя бы для одного разрешения экрана ?
2) Это подходит для разных платформ
или на других платформах может другой конфигурационный файл ?
3) Только после добавления этих настроек будет доступен fb0 ?
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux