ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: ТИОН-ПРО и DirectFB  (Прочитано 20290 раз)

0 Пользователей и 1 Гость просматривают эту тему.

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
ТИОН-ПРО и DirectFB
« : 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 на тионе? или ТИОН все это не поддерживает?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ТИОН-ПРО и DirectFB
« Ответ #1 : 20 Августа, 2009, 17:14:52 »

Нужно смотреть чего именно хочет и не получает directfb
Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: ТИОН-ПРО и DirectFB
« Ответ #2 : 21 Августа, 2009, 08:18:32 »

Скорее всего Direct FB хочет поставить свои настройки для видеорежима, а соотвествующий ioctl в драйвере ep93xx не реализован :( См. пост про смену разрешения...
fbset "vmode_name" дает ошибку
при вызове функции fb_set_var в драйвере ep93xxfb.c Invalid argument
Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: ТИОН-ПРО и DirectFB
« Ответ #3 : 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 запускается но появляются какие-то артефакты на экране в виде черных прямоугольников. прицеплю скоро картинку.
Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: ТИОН-ПРО и DirectFB
« Ответ #4 : 28 Августа, 2009, 10:12:52 »

Продолжаем битву с DirectFB. Тот который идет в linux-crater-1.0.3 (последний релиз сборки cirrus) не содержит gfx драйвера для процессоров циррус  ??? Взял патч из вот этой сборки: 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.

Понятно что дело в корректных настройках видео режимов - подскажите куда копать.
Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: ТИОН-ПРО и DirectFB
« Ответ #5 : 28 Августа, 2009, 16:14:57 »

Картинка выглядит как здесь: http://arm.cirrus.com/forum/pub/bad-photo-clip_149.jpg
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ТИОН-ПРО и DirectFB
« Ответ #6 : 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. Но это будет не в ближайшее время.
Записан

Snar

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 22
Re: ТИОН-ПРО и DirectFB
« Ответ #7 : 02 Сентября, 2009, 16:05:52 »


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

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





« Последнее редактирование: 02 Сентября, 2009, 16:08:19 от Snar »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: ТИОН-ПРО и DirectFB
« Ответ #8 : 02 Сентября, 2009, 20:23:30 »

Если не хотите разрешать зависимотси, то проще сразу собирать в
heelrod/crater.tar.bz2
Записан

Snar

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 22
Re: ТИОН-ПРО и DirectFB
« Ответ #9 : 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
Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: ТИОН-ПРО и DirectFB
« Ответ #10 : 03 Сентября, 2009, 13:47:49 »

to Snar 1. Какой у Вас ТИОН и какой монитор?
2. Собирал без fusion потому что мне не нужно запускать несколько приложений directfb одновременно :)
3. У вас не запускается потому что не загружен модуль fusion.ko и не созданы файлы устройств для него.
« Последнее редактирование: 03 Сентября, 2009, 13:52:36 от scad »
Записан

Snar

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 22
Re: ТИОН-ПРО и DirectFB
« Ответ #11 : 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)
Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: ТИОН-ПРО и DirectFB
« Ответ #12 : 03 Сентября, 2009, 14:50:03 »

То есть заработало? ;)
qt должно нормально работать если второе окно из первого открываешь... А вот если это два разных приложения - тогда будут проблемы
Записан

Snar

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 22
Re: ТИОН-ПРО и DirectFB
« Ответ #13 : 03 Сентября, 2009, 15:13:17 »

заработало, картинка конечно....теперь бы все это заставить работать с TFT 5.7 а потом уж qt4 собрать с directfb
Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: ТИОН-ПРО и DirectFB
« Ответ #14 : 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 отличается не только на эту строку от исходного ;), а сейчас завал на работе... :(
Записан