ЗАО «ЗЭО»

Техническая поддержка пользователей => ОС Linux, U-Boot => Тема начата: scad от 20 Августа, 2009, 14:20:02

Название: ТИОН-ПРО и DirectFB
Отправлено: scad от 20 Августа, 2009, 14:20:02
В последнем кратере от Cirrus включен пакет directFB, правда почему-то при сборке он не копирует библиотеки в КФС, но не страшно - скопировал руками. при запуске arm-linux-dfbinfo получаю следующее:
(*) DirectFB/Core: Single Application Core. (2006-10-16 09:23) [ DEBUG ]
(*) Direct/Thread: Running 'VT Switcher' (CRITICAL, 449)...
(*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (convergence integrated media GmbH)
(!) DirectFB/FBDev: No supported modes found in /etc/fb.modes and current mode not supported!
(!) DirectFB/FBDev: Current mode's pixelformat: rgba 5/11, 6/5, 5/0, 0/0 (16bit)
(!) DirectFB/Core/layers: Failed to initialize layer 0!
--> Initialization error!
(!) DirectFB/Core: Could not initialize 'layers' core!
--> Initialization error!
testdfb.c <42>:
(#) DirectFBError [DirectFBCreate (&dfb)]: Initialization error!
кто-нибудь пробовал directfb на тионе? или ТИОН все это не поддерживает?
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: asv от 20 Августа, 2009, 17:14:52
Нужно смотреть чего именно хочет и не получает directfb
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 21 Августа, 2009, 08:18:32
Скорее всего Direct FB хочет поставить свои настройки для видеорежима, а соотвествующий ioctl в драйвере ep93xx не реализован :( См. пост про смену разрешения...
fbset "vmode_name" дает ошибку
при вызове функции fb_set_var в драйвере ep93xxfb.c Invalid argument
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 26 Августа, 2009, 11:52:00
проблема решилась следующим образом - выбрал в драйвере ядра DEFAULT_MODE 11 и DEFAULT_OUT CRT_OUT вместо LCD_OUT. Теперь можно менять режимы командой fbset и заработал directfb 1.0.0 идущий с crater_ом. Жаль что все в 16битах...
PS Qt 4.5.2 с directfb запускается но появляются какие-то артефакты на экране в виде черных прямоугольников. прицеплю скоро картинку.
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 28 Августа, 2009, 10:12:52
Продолжаем битву с DirectFB. Тот который идет в linux-crater-1.0.3 (последний релиз сборки cirrus) не содержит gfx драйвера для процессоров циррус  ??? Взял патч из вот этой сборки: http://arm.cirrus.com/files/linux/heelrod/crater.tar.bz2 (http://arm.cirrus.com/files/linux/heelrod/crater.tar.bz2) положил в директорию packages/directfb и пересобрал все. Теперь аппаратное ускорение работает, но при инициализации directfb ругается на
unsupported video modeи
pixel clock errorИ картинка "блеклая" с неверными цветами и очень сильно моргает.

Напомню, что все это происходит на ТИОНЕ-ПРО с подключенным через VGA-адаптер 19" TFT мониторе. При этом в драйвере видео в ядре установлен vout CRT_OUT,потому что только если стоит CRT_OUT запускается DirectFB.

А при этом еще существует проблема с цветами - 16 бит есть, но полярность не та :(
asv писал:
Цитировать
> потому что картинка в opie какая-то блеклая была по сравнению со штатной

Не та полярность pixclk:
Для VGA сейчас: EDGE_FALLING, POL_LOW, POL_LOW, POL_LOW,
Вы ставили 6ой:  EDGE_RISING,    POL_LOW, POL_LOW, POL_LOW,
Так вот поставил EDGE_FALLING, POL_LOW, POL_LOW, POL_LOW ничего не изменилось. Меняешь вывод на LCD_OUT - все ок, но не работает DirectFB.

Понятно что дело в корректных настройках видео режимов - подскажите куда копать.
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 28 Августа, 2009, 16:14:57
Картинка выглядит как здесь: http://arm.cirrus.com/forum/pub/bad-photo-clip_149.jpg (http://arm.cirrus.com/forum/pub/bad-photo-clip_149.jpg)
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: asv от 30 Августа, 2009, 15:13:32
Почему-то при использовании vout=0 (CRT) полярность pixclk (по крайней мере) берётся не указанная в структуре.

То есть для VGA
video=ep93xxfb:vout=1,vmode=16 -- нормальное изображение
video=ep93xxfb:vout=0,vmode=16 -- неверная полярность

Это еще не переходя к 800x600.

Надо будет разобраться как такое происходит, скорее всего это же причина того, что в 800x600 в вашем случае такой мусор на экране.


PS. Но это будет не в ближайшее время.
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 02 Сентября, 2009, 16:05:52

Пытаюсь собрать DirectFB в linux-crater-1.0.3 и патч скопировал из http://arm.cirrus.com/files/linux/heelrod/crater.tar.bz2 (http://arm.cirrus.com/files/linux/heelrod/crater.tar.bz2) в packages/directfb, но собираться не хочет
make: *** Нет правила для сборки цели `linux_fusion', требуемой для `directfb'.  Останов.

Как быть? Может подскажете
Или может кто знает как собрать без кратера





Название: Re: ТИОН-ПРО и DirectFB
Отправлено: asv от 02 Сентября, 2009, 20:23:30
Если не хотите разрешать зависимотси, то проще сразу собирать в
heelrod/crater.tar.bz2
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 03 Сентября, 2009, 11:17:26
Спасибо! Собралось, однако при запуске получаю примера получаю
./sprite

     =======================|  DirectFB 1.0.0  |=======================
          (c) 2001-2007  The DirectFB Organization (directfb.org)
          (c) 2000-2004  Convergence (integrated media) GmbH
        ------------------------------------------------------------

(*) DirectFB/Core: Multi Application Core. (2009-09-03 04:46)
(*) Fusion/SHM: Using MADV_REMOVE (2.6.20.4 >= 2.6.19.2)
(!) Fusion/Init: Could not enter world '0'!
    --> Inappropriate ioctl for device
sprite.c <93>:
        (#) DirectFBError [DirectFBCreate (&dfb)]: Initialization error!


в модуле ядра ничего не менял, менял только аргументы загрузки ядра на vout=0,vmode=7
заметил еще что scad собирал без fusion
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 03 Сентября, 2009, 13:47:49
to Snar 1. Какой у Вас ТИОН и какой монитор?
2. Собирал без fusion потому что мне не нужно запускать несколько приложений directfb одновременно :)
3. У вас не запускается потому что не загружен модуль fusion.ko и не созданы файлы устройств для него.
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 03 Сентября, 2009, 14:27:43
у меня тион про2, использую TFT экран 5.7' + подключил монитор LCD 19'
без fusion у меня тоже запустился пример, вот только не знаю как будет работать мое приложение(qt4) в нем 2 окна
fusion.ko подгружал через insmod результат прежний


теперь вот такое
./sprite

     =======================|  DirectFB 1.0.0  |=======================
          (c) 2001-2007  The DirectFB Organization (directfb.org)
          (c) 2000-2004  Convergence (integrated media) GmbH
        ------------------------------------------------------------

(*) DirectFB/Core: Single Application Core. (2009-09-03 09:37)
(*) Direct/Thread: Running 'VT Switcher' (CRITICAL, 323)...
(*) Direct/Modules: suppress module 'tslib'
(*) Direct/Thread: Running 'Keyboard Input' (INPUT, 324)...
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(*) DirectFB/Graphics: cirruslogic edb93xx 0.1 (cirruslogic)
  ep93xxfb_check_var - unsupported video mode
  ep93xxfb_check_var - unsupported video mode
  ep93xxfb_check_var - pixel clock error 100000000
  ep93xxfb_check_var - pixel clock error 109998000
  ep93xxfb_check_var - unsupported video mode
  ep93xxfb_check_var - unsupported video mode
  ep93xxfb_check_var - pixel clock error 100000000
  ep93xxfb_check_var - pixel clock error 109998000
  ep93xxfb_check_var - pixel clock error 109998000
  ep93xxfb_check_var - pixel clock error 125643000
  ep93xxfb_check_var - pixel clock error 125643000
  ep93xxfb_check_var - memory error
  ep93xxfb_check_var - unsupported video mode
  ep93xxfb_check_var - unsupported video mode
  ep93xxfb_check_var - pixel clock error 107991000
  ep93xxfb_check_var - pixel clock error 125992000
  ep93xxfb_check_var - pixel clock error 134989000
  ep93xxfb_check_var - pixel clock error 134879000
  ep93xxfb_check_var - pixel clock error 155981000
  ep93xxfb_check_var - pixel clock error 171998000
  ep93xxfb_check_var - pixel clock error 197980000
(*) DirectFB/Core/WM: UniQuE 0.4 (Denis Oliver Kropp)
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 03 Сентября, 2009, 14:50:03
То есть заработало? ;)
qt должно нормально работать если второе окно из первого открываешь... А вот если это два разных приложения - тогда будут проблемы
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 03 Сентября, 2009, 15:13:17
заработало, картинка конечно....теперь бы все это заставить работать с TFT 5.7 а потом уж qt4 собрать с directfb
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 03 Сентября, 2009, 16:32:22
Почему-то при использовании vout=0 (CRT) полярность pixclk (по крайней мере) берётся не указанная в структуре.

То есть для VGA
video=ep93xxfb:vout=1,vmode=16 -- нормальное изображение
video=ep93xxfb:vout=0,vmode=16 -- неверная полярность

Это еще не переходя к 800x600.

Надо будет разобраться как такое происходит, скорее всего это же причина того, что в 800x600 в вашем случае такой мусор на экране.


PS. Но это будет не в ближайшее время.


Вроде разобрался в чем проблема. Смотрим видеодрайвер ядра 2.6.20.4 из сборки crater-1.0.0_svn741.
ep93xxfb.c:
static int ep93xxfb_set_par(struct fb_info *info)
...
999:  #ifdef CONFIG_EP93XX_SDC3
1000: attribs|=3 << VIDEO_ATTRIBS_SDSEL_SHIFT
1001: #endif
1002: attribs |= VIDEOATTRIBS_INVCLK

БИНГО !!!!
attribs |= VIDEOATTRIBS_INVCLK
получается EDGE_RISING ставится ВСЕГДА при вызове функции ep93xxfb_set_par(struct fb_info *info), а эта функция вызывается во ВСЕХ случаях, когда мы вызываем fbset. Когда модуль инициализируется, то вызывается функция
ep93xxfb_config(struct fb_info *info)
где происходит корректное задание видеорежима:
#ifdef CONFIG_EP93XX_SDC3
attribs|=3 << VIDEO_ATTRIBS_SDSEL_SHIFT
#endif
if(epinfo.clk_edge == EDGE_RISING)
      attribs |= VIDEOATTRIBS_INVCLK
...
В итоге патч следующий добавляем строчку if(epinfo.clk_edge == EDGE_RISING)
между 1001 и 1002 строками.
Получаем:
999:  #ifdef CONFIG_EP93XX_SDC3
1000: attribs|=3 << VIDEO_ATTRIBS_SDSEL_SHIFT
1001: #endif
1002: if(epinfo.clk_edge == EDGE_RISING)
1003: attribs |= VIDEOATTRIBS_INVCLK

З.Ы. Классический патч не шлю - руки не дошли сделать, потому что мой ep93xxfb.c отличается не только на эту строку от исходного ;), а сейчас завал на работе... :(
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 04 Сентября, 2009, 17:23:03
Браво  :). Уже отлично! QT4 не пробовал собирать с directfb? У меня не выходит -  все время The DirectFB screen driver functionality test failed!
 You might need to modify the include and library search paths by editing
 QT_CFLAGS_DIRECTFB and QT_LIBS_DIRECTFB in
qt-embedded-linux-opensource-src-4.5.2/mkspecs/qws/linux-arm-g++

Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 07 Сентября, 2009, 09:27:10
Зайдите и после вывода этого сообщения в директорию config.tests/qws/directfb и наберите make. Потом ошибки в студию ;)
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 07 Сентября, 2009, 12:14:40
linking directfb
directfb.o: In function `main':
directfb.cpp:(.text+0xc): undefined reference to `DirectFBInit'
collect2: ld returned 1 exit status
make: *** [directfb] Ошибка 1


 вот такой конфиг
./configure -prefix /fs/qt4.5-linuxfb -embedded arm -armfpa -little-endian -qt-mouse-tslib -pch -I/home/snar/downloads/dev/host/include/directfb -I/home/snar/downloads/dev/host/include -L/home/snar/downloads/dev/host/lib  -no-cups -no-qdbus -qt-freetype -qt-gfx-linuxfb -plugin-gfx-directfb -qt-kbd-qvfb -no-glib -no-webkit -silent -qt-zlib -qt-libtiff -qt-libpng -qt-libmng-qt-libjpeg -silent -xplatform qws/linux-arm-g++


/qws/linux-arm-g++/qmake.conf
#
# qmake configuration for building with arm-linux-g++
#

include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)

# modifications to g++.conf
QMAKE_CC                = arm-linux-gcc
QMAKE_CXX               = arm-linux-g++
QMAKE_LINK              = arm-linux-g++
QMAKE_LINK_SHLIB        = arm-linux-g++


# modifications to linux.conf
QMAKE_AR                = arm-linux-ar cqs
QMAKE_OBJCOPY           = arm-linux-objcopy
QMAKE_STRIP             = arm-linux-strip
QT_CFLAGS_DIRECTFB   += -I/home/snar/downloads/dev/build/DirectFB-1.0.0/include
QT_LIBS_DIRECTFB      += -L/home/snar/downloads/dev/build/root/lib -ldirect -ldirectfb -lfusion -lz





load(qt_config)

Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 08 Сентября, 2009, 09:51:11
Редактирование файла qws/linux-arm-g++/qmake.conf не дало результатов
зато собирается и работает вот так
export QT_LIBS_DIRECTFB="-ldirect -ldirectfb -lfusion -lz"
ну и в конфиге не забываем -I/путь к кратеру/host/include/directfb
однако осталось еще это
ep93xxfb_check_var - pixel clock error 125643000             
  ep93xxfb_check_var - memory error                           
  ep93xxfb_check_var - unsupported video mode     
как с ним быть?
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 09 Сентября, 2009, 09:28:26
Я так понимаю, что directfb перед запуском проверяет все видеорежимы описанные в /etc/fb.modes, поскольку был взят файл fb.modes по умолчанию - там есть режимы которые ep93xxfb не поддерживает, о чем и сообщает всему миру :) Но те которые поддерживаются проходят без сообщений... Я считаю, что это нормально - и не стал редактировать fb.modes, хотя для "боевой" системы лучше оставить всего один режим в fb.modes - тот в котором работаем - быстрее грузиться будет
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 09 Сентября, 2009, 10:49:34
скажите с использованием diretcfb вы заметили ускорение вывода графики? спрашиваю потому что сам визуально особой разницы не наблюдаю, а думаю что должна быть в разы
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 17 Сентября, 2009, 08:58:02
Честно говоря не особо... :-[ Мне кажется что дело в том, что Qt не использует все возможности directfb. в особенности по копированию изображений. Наверное надо писать свой драйвер под Qt4.  ???
to Snar: На сколько я понимаю ты уже пробовал это делать?
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 18 Сентября, 2009, 08:59:50
вобщем по умолчанию directfb сконфигурирован так что не использует BLIT ни cfb_blit ни ep93xxblit
#define EDB93XX_SUPPORTED_BLITTINGFLAGS (DSBLIT_NOFX)
+
+#define EDB93XX_SUPPORTED_BLITTINGFUNCTIONS  (DFXL_NONE)

используется только fill, но если посмотреть вызовы этой функции ядра то она используется крайне редко - т.е. ускориться ничего не может :-(
зато если  +#define EDB93XX_SUPPORTED_BLITTINGFUNCTIONS  (DFXL_BLIT) то картина совсем другая - более активно используется fill + вызывается blit в модуле ядра, cfb_blit тут не работает - его надо либо переписывать либо использовать аппаратный.С аппаратным тоже не все просто потому что, вроде бы directfb или qt4 использует активно палитры, а как их прикрутить к аппаратному blit я не знаю. Вобщем пока на экране каша
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: scad от 18 Сентября, 2009, 09:33:11
Цитировать
#define EDB93XX_SUPPORTED_BLITTINGFUNCTIONS  (DFXL_BLIT)

Где ее объявлять? Тоже хочу попробовать :)
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 18 Сентября, 2009, 09:47:01
cirrus_porting.patch тут смотри
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Snar от 24 Сентября, 2009, 15:16:55
to Scad есть ли какие успехи?
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: Yuri от 15 Мая, 2010, 02:21:05
А какой всё таки у этого топика был финал - никто не в курсе ? : ) есть предположение, что тема здесь поднимаемая (DirectFB) как-то связана с решением моей проблемы, описываемой здесь: http://www.zao-zeo.ru/forum/index.php?topic=360.0 (http://www.zao-zeo.ru/forum/index.php?topic=360.0). Может DirectFB помочь с проблемами задержек при изменении цвета текста кнопки QT-4 при её нажатии/ускорении отрисовки картинки во весь экран ?
Название: Re: ТИОН-ПРО и DirectFB
Отправлено: asv от 15 Мая, 2010, 11:05:48
> Может DirectFB помочь с проблемами задержек при изменении цвета текста кнопки QT-4

Мне кажется, что пока Qt4 (4.5) с DirectFB работает медленнее чем с /dev/fb, в Интернет тоже можете найти подобные заключения.