LINUX.ORG.RU

Работа с черно-белым фреймбуффером

 , ,


1

4

Всем привет. Есть аппарат с E-INK дисплеем, ARM процем и линуксом. Немного с ним играю сейчас. Написал методы для обработки нажатии клавиш, сенсора, вывода изображений на экран. Но есть 2 проблемы: 1) После того как я вывожу что то во фреймбуффер оно появляется не сразу, как это происходит с обычным фреймбуффером, а после того как я вызываю тестовую программу для вывода строк на экран. Смотрел доки на фреймбуффер, никаких способов его активации там не нашел. Как я могу узнать куда и что пишет эта тестовая программа? 2) Как выводить на экран оттенки серого? Экран реагирует на запись 1 - это черный, и или больше - это белый. И все. У обычного фреймбуффера пишутся 4 значения, а как тут писать?

void DrawPixel(char fd, unsigned int x, unsigned int y, unsigned short int c)
{
    location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) + (y+vinfo.yoffset) * finfo.line_length;
    *((unsigned short int*)(fbp + location)) = c;
}
http://savepic.ru/12508315.jpg

Вы не по адресу. Эти вопросы надо задавать разработчикам прошивки/драйвера. Там обычно надо вызвать какой-то ioctl чтобы пошло обновление (перерисовка) экрана. Можно начать с http://www.the-ebook.org/forum/viewforum.php?f=40

SZT ★★★★★ ()
Последнее исправление: SZT (всего исправлений: 1)

Да, еще можно дизассемблировать этот их libinkview.so (исходников они не дают). Еще см. http://www.the-ebook.org/forum/viewtopic.php?t=13564

Не знаю, насколько все это актуально для новых покетбуков

SZT ★★★★★ ()

Спасибо за ссылки, попробую спросить там. По поводу дизассемблировать - насколько это реально? Ведь тут не x86. Какой дизассемблер можно использовать? И насколько реально с кода вытянуть эти запросы? С асмом никогда не работал, поэтому вопросы нубские. И еще вопрос - если я знаю адрес, по которому идет IOCTL(через strace не проблема вытянуть) как я смогу выполнить такой же запрос?

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

По поводу дизассемблировать - насколько это реально?

Вполне реально. Можно использовать radare2(LGPL) или IDA(стоит много денег, но в сети можно найти пиратки, там еще есть декомпилятор).

И еще вопрос - если я знаю адрес, по которому идет IOCTL(через strace не проблема вытянуть) как я смогу выполнить такой же запрос?

Через вызов функции ioctl с нужными агрументами

SZT ★★★★★ ()

И кстати, что за модель электронной книги, каким образом был получен root доступ? Эту информацию можно туда же на тот форум отправить, может быть кому-то она будет полезна

SZT ★★★★★ ()

Ридер - pocketbook 624. Доступ к консоли производится элементарно - правится rcS, так, что бы не запускался лаунчер, а просто монтировались разделы и все. И книга тогда сама выбрасывает в консоль на UART. Это на стоке, я сейчас использую тестовую прошивка от покетбука. Код наверно на гит залью, может кому интересно будет. Попробую дизассемблером найти нужные инструкции. Вот есть у меня такой запрос, после него идёт вывод на экран(это strace) ioctl(3, 0x4040462e, 0xbec3aac0)=0 Как мне исполнить из программы такой же запрос?

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

man ioctl

Думаю, как-то так:

#include <sys/ioctl.h>
...
ioctl(3, 0x4040462e, 0xbec3aac0);
Только этот ioctl применяется к некоему файловому дескриптору. Надо посмотреть, что за файл на третьем файловом дескрипторе. Сделать это можно каким-то таким образом:
readlink /proc/*тут_PID_процесса*/fd/3
Или же проанализировать вывод strace и найти там системный вызов, который этот третий файловый дескриптор «открывает»

SZT ★★★★★ ()
Последнее исправление: SZT (всего исправлений: 2)
Ответ на: комментарий от dossalab

И еще, если в гугле поискать эту константу 0x4040462e можно найти кое-какую информацию и даже какой-то код

SZT ★★★★★ ()

Вот загуглить я и не пробовал, спасибо. Действительно много довольно полезной инфы, буду пробовать. Дизассемблировать кстати не вышло - очень сложно разбираться в получившихся кодах, а декомпилятор весьма плохо работает, непонятно что там получается

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