реклама на сайте
подробности

 
 
> framebuffer драйвер
amaora
сообщение Jun 11 2009, 21:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Пишу драйвер PCF8833 (дисплей от nokia), оказалось взаимодействовать с ядром гораздо сложнее, чем с контроллером LCD.
Дисплей подключен по SPI, в связи с чем такая проблема,
mmap из userspace, похоже нет ни какого хорошего способа узнать, что память была отмэплена и перезаписана, и что новые данные пора отправить контроллеру.
есть два варианта,
- регулярно проверять буфер на изменения, не подходит т.к. это постоянный расход времени процессора
- обновлять по запросу из userspace, есть там какой то sync но как я понял он совсем не для этого, и ни кто его так не использует

может кто нибудь знает вариант получше?

Спасибо,
пока работает только fbcon, Прикрепленный файл  pcf8833.c.txt ( 10.02 килобайт ) Кол-во скачиваний: 426
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amaora
сообщение Jun 16 2009, 14:00
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Да в чем разница то? ну растеризатор там вместо mpeg декодера, как это на работу драйвера влияет?

Переписать софт было бы правильнее, не плохо бы ещё сделать нормальную синхронизацию (ну то есть flush должен блокировать процесс или сообщать, что тот слишком часто шлет новые данные) а не пропуск кадров. Только это все не оправдано для такого дисплея, там 20 кадров в секунду похоже предел самого LCD.

Но скорее сделаю как проще, добавлю свой ioctl, для включения/отключения постоянной отправки кадров в контроллер LCD, а из userspace, когда надо запустить "не правленный" софт, можно включать это. Думаю это окончательный и лучший вариант.

И ещё раз про atmel_spi,
spi_write это синхронная функция, то есть явно не для больших объемов данных. Да можно было бы усложнить драйвер и избавится от этого недостатка, это ворос равновесия между сложностью интерфейса и реализации. Вы похоже сторонник хорошего внешнего интерфейса, и пусть будет кривая (но работающая) его реализация, так?

Это не баг по тому что автор драйвера видимо писал его зная об этой особенности, это именно особенность.

Сообщение отредактировал amaora - Jun 16 2009, 14:08
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jun 16 2009, 15:06
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(amaora @ Jun 16 2009, 17:00) *
Переписать софт было бы правильнее
.....
Это не баг по тому что автор драйвера видимо писал его зная об этой особенности, это именно особенность.


В общем не вижу смысла в дальнейшей дискуссии smile.gif
Go to the top of the page
 
+Quote Post
VDV
сообщение May 24 2010, 11:19
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 152
Регистрация: 18-03-06
Пользователь №: 15 366



подскажите пожалуйста, можно где-то прочитать о том, что такое фрейм буфер?
в чем его отличие от символьного устройства?
(sceleton.c видел)
как с ним работать со стороны пользовательского пространства?
нашел только документы от 2000 и 2002 года.
технология с тех пор не менялась?
Go to the top of the page
 
+Quote Post
sasamy
сообщение May 24 2010, 16:13
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(VDV @ May 24 2010, 14:19) *
подскажите пожалуйста, можно где-то прочитать о том, что такое фрейм буфер?


Это буфер окна smile.gif

Цитата
в чем его отличие от символьного устройства?


В терминах системы это и есть символьное устройство.

Цитата
(sceleton.c видел)
как с ним работать со стороны пользовательского пространства?


Как с символьным устройством - read/write или mmap (последний чаще всего, вернее первый я кроме консоли нигде не встречал)

Цитата
нашел только документы от 2000 и 2002 года.
технология с тех пор не менялась?


Да какие там технлогии - это просто кусок памяти который имеет структуру в соответствии с текущим режимом: разрешение и цветность. Для fbcon кроме того есть специальные ф-ции с помощью которых можно ускорить работу с кусором или скролингом экрана - если это не поддерживается устройством аппаратно то их нет смысла эмулировать програмно, они не нужны для нормальной работы. Для примера простой вариант: экран 320х200@16 будет соответствовать сишному массиву uin16t fbscreen[200][320]; и для 16 бит пиксель состоит из rgb 565.
Go to the top of the page
 
+Quote Post
VDV
сообщение May 25 2010, 08:18
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 152
Регистрация: 18-03-06
Пользователь №: 15 366



тогда напрашиваются 2 вопроса.
1. если это просто разделяемый между user и kernel space буфер памяти,
как происходит уведомление драйвера о необходимости перерисовки?
как происходит оптимизация перерисовки?
или же все тупо:
user space заполняет память, а драйвер просто с заданной частотой обновления перекидывает его на экран?

2. программы пользовательского пространства как-то видимо должна получать параметры дисплея (через ioctl?) и понимать, отрисовку чего видеокарта может ускорить, а что надо эмулировать программно.
как это делается?
если через ioctl, значит, есть стандартные коды запросов?
Go to the top of the page
 
+Quote Post
sasamy
сообщение May 25 2010, 10:00
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(VDV @ May 25 2010, 12:18) *
тогда напрашиваются 2 вопроса.
1. если это просто разделяемый между user и kernel space буфер памяти,
как происходит уведомление драйвера о необходимости перерисовки?
как происходит оптимизация перерисовки?
или же все тупо:
user space заполняет память, а драйвер просто с заданной частотой обновления перекидывает его на экран?

2. программы пользовательского пространства как-то видимо должна получать параметры дисплея (через ioctl?) и понимать, отрисовку чего видеокарта может ускорить, а что надо эмулировать программно.
как это делается?
если через ioctl, значит, есть стандартные коды запросов?


1 Если mmap то никак, read/write - я думаю с этим понятно - пишешь свои ф-ции и обрабатываешь переданные из/в юзерспейс данные. Вообще это сегодня появились всякие SoC, lcd и framebuffer используют как некий слой абстракции над железом, изначально он использовался в x86 по назначению - это был прямой доступ к памяти видеоконтроллера. Если видеобуфер выделяется в озу то да, так и делают - постоянно обновляется экран.
2 Я думаю в Интернете немало информации чтобы спрашивать все подряд на форуме smile.gif
Go to the top of the page
 
+Quote Post
VDV
сообщение May 25 2010, 10:03
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 152
Регистрация: 18-03-06
Пользователь №: 15 366



Цитата(sasamy @ May 25 2010, 14:00) *
2 Я думаю в Интернете немало информации чтобы спрашивать все подряд на форуме smile.gif

я потому и спрашиваю на форуме, что не смог найти в интернете.
либо я просто не смог правильно задать вопрос гуглу, чтобы он смог ответить.
а чтобы правильно ему задать вопрос, надо понять, что спрашивать.
Go to the top of the page
 
+Quote Post
sasamy
сообщение May 25 2010, 11:15
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(VDV @ May 25 2010, 13:03) *
я потому и спрашиваю на форуме, что не смог найти в интернете.



Да перестаньте - это смешно. Я например обычно начинаю поиск в документации идущей в исходниках ядра, как ни страноо там есть вот это:
Код
# pwd
/usr/src/linux-2.6.33/Documentation/fb


Совсем странно что там есть описание fbcon и собственно fb
fbcon.txt
framebuffer.txt

Например framebuffer.txt нам говорит:
Цитата
/dev/fb* also allows several ioctls on it, by which lots of information about
the hardware can be queried and set. The color map handling works via ioctls,
too. Look into <linux/fb.h> for more information on what ioctls exist and on
which data structures they work. Here's just a brief overview:



Теперь достаточно посмотреть include/linux/fb.h
Код
# cat fb.h | grep FBIO
#define FBIOGET_VSCREENINFO    0x4600
#define FBIOPUT_VSCREENINFO    0x4601
#define FBIOGET_FSCREENINFO    0x4602
#define FBIOGETCMAP        0x4604
#define FBIOPUTCMAP        0x4605
#define FBIOPAN_DISPLAY        0x4606
#define FBIO_CURSOR            _IOWR('F', 0x08, struct fb_cursor_user)
#define FBIO_CURSOR            _IOWR('F', 0x08, struct fb_cursor)
/* #define FBIOGET_MONITORSPEC    0x460C */
/* #define FBIOPUT_MONITORSPEC    0x460D */
/* #define FBIOSWITCH_MONIBIT    0x460E */
#define FBIOGET_CON2FBMAP    0x460F
#define FBIOPUT_CON2FBMAP    0x4610
#define FBIOBLANK        0x4611        /* arg: 0 or vesa level + 1 */
#define FBIOGET_VBLANK        _IOR('F', 0x12, struct fb_vblank)
#define FBIO_ALLOC              0x4613
#define FBIO_FREE               0x4614
#define FBIOGET_GLYPH           0x4615
#define FBIOGET_HWCINFO         0x4616
#define FBIOPUT_MODEINFO        0x4617
#define FBIOGET_DISPINFO        0x4618
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- amaora   framebuffer драйвер   Jun 11 2009, 21:46
- - Harbour   Смысл использовать mmap при последовательном обмен...   Jun 12 2009, 06:55
- - amaora   Если правильно использовать, то mmap быстрее write...   Jun 12 2009, 09:53
- - Harbour   mmap-то быстрее, но ведь все равно SPI в конце, д...   Jun 12 2009, 20:08
- - sasamy   Цитата(amaora @ Jun 12 2009, 00:46) Диспл...   Jun 14 2009, 15:50
|- - sasamy   Кстати насчет подобных конструкций: Кодstatic int...   Jun 14 2009, 17:02
- - amaora   Этот вариант я уже видел, мне он не понравился по ...   Jun 14 2009, 22:40
|- - sasamy   По поводу переключения bits_per_word - не совпадае...   Jun 15 2009, 05:45
- - amaora   Я понял, только написал не очень ясно. Прямая отпр...   Jun 15 2009, 15:48
|- - sasamy   Цитата(amaora @ Jun 15 2009, 19:48) Я пон...   Jun 15 2009, 18:56
|- - sasamy   Цитата(amaora @ Jun 15 2009, 19:48) Пряма...   Jun 16 2009, 04:08
- - amaora   Ну вот давайте ещё померяемся Попробовал сегодня...   Jun 16 2009, 10:05
|- - sasamy   Цитата(amaora @ Jun 16 2009, 14:05) Ну во...   Jun 16 2009, 11:37
- - VDV   видимо я опять задал не тот вопрос... даже не знаю...   May 26 2010, 08:39
- - VDV   нашел наконец-то что-то http://books.google.ru/boo...   May 26 2010, 14:52
- - VDV   вопрос появился написал драйвер для своего дисплея...   Jun 10 2010, 15:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th August 2025 - 04:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01543 секунд с 7
ELECTRONIX ©2004-2016