LINUX.ORG.RU

Выделить память под фреймбуффер

 


0

2

Здравия всем есть ARM система на которой установлен linux на ядре из под андроида. В этом ядре есть фреймбуфер и есть к нему оверлей (устройства fb0 fb1), под фреймбуффер память резервируется ядром, а вот под оверлей память должна выделятся системой (в оригинале андроидом) и потом через IOCTL передаваться адрес этой памяти на fb1.

собственно вопрос - как выделить в пользовательском режиме эту память и получить реальный адрес для передачи в драйвер? или это невозможно (сложно) и лучше выделять память самим видео драйвером при загрузке - так у меня сейчас сделано(но хотел переделать потому-что оверлей этот использую только для вывода видео).


есть фреймбуфер и есть к нему оверлей (устройства fb0 fb1)

что такое оверлей?

под оверлей память должна выделятся системой (в оригинале андроидом)

почему ты так решил?

через IOCTL передаваться адрес этой памяти на fb1

какой конкретно ioctl?

как выделить в пользовательском режиме эту память и получить реальный адрес для передачи в драйвер?

скорее всего тебе не нужно этого делать; в любом случае, все графические буфера выделаются через gralloc

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

1.под оверлеем понимаю тут видео слой который аппаратно накладывается на основной и имеет отдельный интерфейс /dev/fb1

2,3.потому что так написано в исходниках видеодрайвера (да и ядро не резервирует под это память)

case FBIOSET_YUV_ADDR:   //when in video mode, buff alloc by android

#define FBIOSET_YUV_ADDR 0x5002

(я для пробы изменил в ядре чтобы резервировать память под буфер и видеодрайвер чтобы ее подключить и это работает)

olegk0
() автор топика
Ответ на: комментарий от olegk0

так написано в исходниках видеодрайвера

что за железка и что за драйвер? судя по всему, это специфика вашего драйвера и надо смотреть конкретный HAL (для ROCKCHIP, если моё google-fu меня не подводит)

видео слой который аппаратно накладывается на основной

такого понятия в андроиде не существует. при наличии hwcomposer'а решение об аппаратной композиции слоя принимается динамически

имеет отдельный интерфейс /dev/fb1

к устройству слой тем более отношения не имеет

в случае OMAP'а оверлеями называются входные пайпы на DSS. на OMAP4 их 4 штуки - 3 видео оверлея (масштабирующих) и 1 GFX (немасштабирующий), к которому привязан фреймбуфер. память для фреймбуфера выделяется модулем ядра (omaplfb), память для буферов слоя - обёрткой над gralloc'ом (который, опять же, реализуется в модуле ядра)

исходники rk_fb кажутся мне, мягко говоря, неочевидными (и комментарии только усугубляют дело)

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

к устройству слой тем более отношения не имеет

исходники rk_fb кажутся мне, мягко говоря, неочевидными

при более внимательном рассмотрении, какая-то логика появляется. у них там фиксированы четыре слоя - по два на менеджер экрана, и динамического распределения слоёв по оверлеям просто нет

в таком случае тебе нужен твой менеджер графической памяти (я по привычке решил что у тебя андроид с gralloc'ом) для выделения буфера нужного размера в пиксельформате, который способен понять твой драйвер

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

процессор rk3066, драйвер фреймбуфера, исходник тут

по оверлею - типа как на OMAP но тут всего по два (масштабируемый и нет) на каждый внешний видео интерфейс(которых 2), и каждый привязан к устройству /dev/fb0-3

исходники да, китайцы писали и не полные к томуже

вообщем как я понял одно из простых решений это написание модуля который привяжет заранее зарезервированный кусок памяти к оверлею

olegk0
() автор топика

Из знаков препинания только «тире» проходили? Какой класс? Какая вспомогательна школа?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.