dlinyj: (Default)
[personal profile] dlinyj
На меня тут жалуются, мол Длиный не пишет ничего о железе, всё бытовуха. Я лишь оправдываюсь, что железо на работе, а всилу специфики работы писать о том не могу. А дома в основном жрачка, стирка, уборка и т.п. Но раз в недельку я устраиваю себе ночь паяльника и топора и тогда что-то ваяю.

В закромах Родины ВНЕЗАПНО обнаружил древнюю читалку Sony PRS-505, которую когда-то любезно одолжил у одного знакомого, и так ему и не отдал. А этой читалкой кроме меня ещё пользовалась милая девушка [livejournal.com profile] shnur0vka (коей передаю, пользуясь случаем, привет).

Я вспомнил, что читалка бегает под линуксом. Ну я вынул её и положил на стол, понимая что из неё получится прекрасный, контрасный дисплей, на который можно будет смотреть сколько угодно времени не напрягаясь. Поскольку мне надо отображать только графики и то раз в минуту, то самое оно.
Положил я её на стол и забыл. Потом ушёл в пещеры, где в автобусе многоуважаемый камрад [livejournal.com profile] vshmuk пользовался такой читалкой. И слово за слово, он напомнил, что когда-то писал статью о взломе данных читалок и о том, что там есть (о чудо!) Фрейм буффер!!! А это значит, что требуемое изображение достаточно просто записывать в файл фреймбуфера, и оно будет отображаться на экране.

Я прям этой мыслью заболел. Нашёл статью, от туда вышел на форум и толковую инструкцию по подпайке. Но в силу того, что вечером я напоминаю овощ, сил кроме как на разбор читалки, у меня не хватало. Хотя ночью прям уснуть не мог. Но вот у меня наконец дошли руки, и я подпаялся (честно, не с первого раза), к контактным площадкам самым тонким проводом, что у себя нашёл. Подключил к VCP FT232RL, и пошло-поехало...


Ломаемая книжка





Тыл



После успешного логина root, и убивания процессов, которые усыпляют книгу

root@(none):~# killall tinyhttp.sh
root@(none):~# killall tinyhttp


Я попал в знакомую оболочку, с которой, блин, работаю на работе каждый день. Потирая потные ручёнки, решил погладеть файлик фреймбуфера.

root@(none):/# ls -la /dev/fb*
-rw-r--r--    1 root     root            0 Jan  1 00:00 /dev/fb
crw-rw-rw-    1 root     root      29,   0 Jan  1  1970 /dev/fb0
crw-rw-r--    1 root     root      29,   1 Jan  1  1970 /dev/fb0autodetect
crw-rw-r--    1 root     root      29,   0 Jan  1 00:00 /dev/fb0current
crw-rw-r--    1 root     root      29,  24 Jan  1 00:00 /dev/fb0user0
crw-rw-r--    1 root     root      29,  25 Jan  1 00:00 /dev/fb0user1
crw-rw-r--    1 root     root      29,  26 Jan  1 00:00 /dev/fb0user2
crw-rw-r--    1 root     root      29,  27 Jan  1 00:00 /dev/fb0user3
crw-rw-r--    1 root     root      29,  28 Jan  1 00:00 /dev/fb0user4
crw-rw-r--    1 root     root      29,  29 Jan  1  1970 /dev/fb0user5
crw-rw-r--    1 root     root      29,  30 Jan  1  1970 /dev/fb0user6
crw-rw-r--    1 root     root      29,  31 Jan  1  1970 /dev/fb0user7
crw-rw-rw-    1 root     root      29,  32 Jan  1  1970 /dev/fb1
crw-rw-r--    1 root     root      29,  33 Jan  1  1970 /dev/fb1autodetect
crw-rw-r--    1 root     root      29,  32 Jan  1  1970 /dev/fb1current
crw-rw-rw-    1 root     root      29,  64 Jan  1  1970 /dev/fb2
crw-rw-r--    1 root     root      29,  65 Jan  1  1970 /dev/fb2autodetect
crw-rw-r--    1 root     root      29,  64 Jan  1  1970 /dev/fb2current
crw-rw-rw-    1 root     root      29,  96 Jan  1  1970 /dev/fb3
crw-rw-r--    1 root     root      29,  97 Jan  1  1970 /dev/fb3autodetect
crw-rw-r--    1 root     root      29,  96 Jan  1  1970 /dev/fb3current
crw-rw-rw-    1 root     root      29, 128 Jan  1  1970 /dev/fb4
crw-rw-r--    1 root     root      29, 129 Jan  1  1970 /dev/fb4autodetect
crw-rw-r--    1 root     root      29, 128 Jan  1  1970 /dev/fb4current
crw-rw-rw-    1 root     root      29, 160 Jan  1  1970 /dev/fb5
crw-rw-r--    1 root     root      29, 161 Jan  1  1970 /dev/fb5autodetect
crw-rw-r--    1 root     root      29, 160 Jan  1  1970 /dev/fb5current
crw-rw-rw-    1 root     root      29, 192 Jan  1  1970 /dev/fb6
crw-rw-r--    1 root     root      29, 193 Jan  1  1970 /dev/fb6autodetect
crw-rw-r--    1 root     root      29, 192 Jan  1  1970 /dev/fb6current
crw-rw-rw-    1 root     root      29, 224 Jan  1  1970 /dev/fb7
crw-rw-r--    1 root     root      29, 225 Jan  1  1970 /dev/fb7autodetect
crw-rw-r--    1 root     root      29, 224 Jan  1  1970 /dev/fb7current


Обана... А тут оказывается дофигища фреймбуфферов... Я попробовал сделать на экране фарш:

root@(none):~# cat /dev/urandom > /dev/fb
cat: write error: Invalid argument

Понятно, попробуем следующий

root@(none):~# cat /dev/urandom > /dev/fb0
cat: write error: No space left on device

Он задумался, но экран упорно показывает точно то, что на фотке. Хм... Интересно, как он выводит бут имидж? Исходя из статьи [livejournal.com profile] vshmuk есть скрипт, который монтирует всё и выводит изображение, а именно /etc/rc.d/rcS.d/S20libromount


Глянем, что же там:
root@(none):/# cat /etc/rc.d/rcS.d/S20libromount

из всего фаршмака, что там вывалилось, нам наиболее интересно вот что:
...
# display booting image 
/usr/local/sony/bin/nblconfig -dump | head -3 | awk '{print $9}' | grep 02 > /dev/null
if [ $? == 0 ]; then
        # init screen load
        grep BootImg /proc/mtd > /dev/null
        if [ $? == 0 ]; then
                NUM=`grep BootImg /proc/mtd | awk -F: '{print $1}' | awk -Fd '{print$2}'`
                dd if=/dev/mtd$NUM of=/dev/fb0 bs=256 count=1875
                /opt/sony/ebook/bin/writescreen init 0
        else
                /opt/sony/ebook/bin/writescreen init 1
                echo no boot image
        fi
else
        /opt/sony/ebook/bin/writescreen init 1
fi
...


А это много интереснее. Ну ка попробуем по умному:

 
root@(none):/# dd if=/dev/urandom of=/dev/fb0 bs=256 count=1875
1875+0 records in
1875+0 records out


Ничего... Попробуем выполнить комманду, которая следует после
root@(none):/# /opt/sony/ebook/bin/writescreen init 0
latest nblconfig read from 0x00035000
latest nblconfig written to 0x00035800


Тоже ничего, хотя какие-то действия идут.

Попробовал ещё загрузить оригинальную бут имайдж, согласно скрипту. Но ничего не произошло... А жаль.



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

Зачем это нужно: На целевой машине идёт видеовывод в виртуальный экран, с разрешением, равным разрешению книжки (а именно 600х800). Далее периодически, берётся файл фреймбуффера виртуального экрана и перенаправляется в сом-порт, а на том конце из ком-порта, коммандой cat это перенаправляется во фреймбуффер книжки.

Иллюстрирую, все комманды выполняются на целевой машине, книжка подключена по UART, через VCP, который висит на /dev/ ttyUSB0 . Комманды вызываются раз в несколько минут, например в кроне.

echo "cat /dev/ttyS0 >/dev/fb0" > /dev/ttyUSB0

Эта комманда по UART передаёт комманду перенаправлять содержимое файла СОМ-порта во фреймбуффер. Следом идёт вторая комманда:

cat /dev/fbn > /dev/ttyUSB0

Эта комманда передаёт содержимое виртуального экрана fbn (где n-номер экрана) в СОМ-порт. Всё должно отработать прекрасно, передача кончится по приходу символа конца файла.

Сия гениальная и простая операция у меня не удалась. Пока не удалась.

Камрад [livejournal.com profile] vshmuk советует найти скрипт листания страниц, и поглядеть его. Но потом.... Поскольку я уже просто клюю носом в клаву, эксперименты на сегодня прекращаю. Быть может на работу захвачу всё это барахло, там попробую помучать.
Page 1 of 2 << [1] [2] >>

Date: 2012-09-26 09:05 pm (UTC)
From: [identity profile] di-halt.livejournal.com
Долго же ты будешь его через ком порт рожать то. Там же в лучшем случае по биту на точку.

Date: 2012-09-26 09:10 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Там по байту на точку. Файл загрузочной картинки весит 480000 байт (800х600 точек). На скорости 115200 за 5 секунд улетит. Вполне себе нормально для меня. Мне не нужно видео смотреть.
Edited Date: 2012-09-26 09:11 pm (UTC)

Date: 2012-09-26 09:11 pm (UTC)
From: [identity profile] svchost1101.livejournal.com
А нету ли случаем у кого айфона дохлого 4с?

Date: 2012-09-26 09:15 pm (UTC)
From: [identity profile] svchost1101.livejournal.com
тьху. Что-то оно куда-то не туда комментарий кинуло.
А не проще взять какой нибудь ЛСД экранчик ну или светодиодную доску?

Date: 2012-09-26 09:16 pm (UTC)
From: [identity profile] svchost1101.livejournal.com
А всё, вопрос снят. Поглядел сейчас цены. ЛСД 800х600 таких размеров стоит 100 уе.

Date: 2012-09-26 09:21 pm (UTC)
From: [identity profile] shnur0vka.livejournal.com
В свое время пользовалась или в свое время милая?)

Спасибо, длинный. Приятно, что помнишь.

Date: 2012-09-26 09:28 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Да я его в глаза-то не видел.

Date: 2012-09-26 09:29 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Забавно вышло. Поправил для однозначности :).

Ты как сама-то? Надо б пересечся как-нить. Там какое-то пати у яндекса, хотел побывать.
Edited Date: 2012-09-26 09:29 pm (UTC)

Date: 2012-09-26 09:39 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Зачем, если есть это? Дрова ещё писать. Мне нормальное гуи надо выводить.

Date: 2012-09-26 10:10 pm (UTC)
From: [identity profile] paracloud.livejournal.com
Вроде как в e-ink мало записать во framebuffer новое содержимое, надо ещё пнуть устройство выполнить перерисовку - целиком или какую-то область.
Sony 505 это кажется EInk 8Track, в qt есть интересный кусок кода:

void QLinuxFbScreen::setDirty(const QRect &r)
{
    if(d_ptr->driverType == EInk8Track) {
        // e-Ink displays need a trigger to actually show what is
        // in their framebuffer memory. The 8-Track driver does this
        // by adding custom IOCTLs - FBIO_EINK_DISP_PIC (0x46a2) takes
        // an argument specifying whether or not to flash the screen
        // while updating.
        // There doesn't seem to be a way to tell it to just update
        // a subset of the screen.
        if(r.left() == 0 && r.top() == 0 && r.width() == dw && r.height() == dh)
            ioctl(d_ptr->fd, 0x46a2, 1);
        else
            ioctl(d_ptr->fd, 0x46a2, 0);
    }
}

Скорее всего writescreen init 0/1 как раз эти ioctl() и делает, почему не сработал в твоём случае - надо копать.
Судя по strings есть ещё команда "writescreen einkclear", и больше ничего, а работает оно с /dev/fb0.
Может, драйвер framebuffer ещё не проиничен до конца при загрузке?
Откуда отображаемая картинка, точно ли она проапдейтилась при этой загрузке, а не осталась с прошлых времен?

Date: 2012-09-26 11:34 pm (UTC)
From: [identity profile] shnur0vka.livejournal.com
Это же YaC! Регистрация открыта до завтра до 18.00 ;)

Сама... неплохо. Многое произошло, многое происходит. Лучше лично и правда.

Date: 2012-09-27 05:03 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Отвечу с конца.

>> Откуда отображаемая картинка, точно ли она проапдейтилась при этой загрузке, а не осталась с прошлых времен?

Отображаемая картинка отрисовалась при загрузке.

Камрад [livejournal.com profile] vshmuk мне вчера сказал следующее:

Этот загрузочный скрипт немного не то делает, оказывается:
http://irc.openinkpot.org/%23openinkpot/%23openinkpot.2008-08-06.log.html

В общем, для инициализации экрана надо запихнуть некие waveform-данные, уникальные для каждого экрана. Это и делает загрузочный скрипт.

http://www.the-ebook.org/forum/viewtopic.php?t=14492

Короче, как я понял надо думать...
Edited Date: 2012-09-27 05:14 am (UTC)

Date: 2012-09-27 05:08 am (UTC)
From: [identity profile] fgh151.livejournal.com
На досуге тоже с железкой развлекаюсь и тормознулся тож на фреймбуфере. При загрузке линухи картинку выводит, а как я к нему подбурусь сразу ересь всякую показывает. Пока не разобрался что к чему- времени не хватает.

Пиши вести с фронтов!

Date: 2012-09-27 05:51 am (UTC)
From: [identity profile] nemo-q.livejournal.com
"почти нет" тех кто в линухе ни в зуб ))

Date: 2012-09-27 05:52 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Есть хороший повод изучить :)))

Date: 2012-09-27 06:30 am (UTC)
From: [identity profile] goodic.livejournal.com
хм. Недавно разгребал говны и нашел глючный Lbook V3. Там тоже линь... и без паяния умеет доступ к консоли давать (на сколько помню). Занес в "потыкать" лист. Спасибо за идею.

А у тебя же iPad есть? Пользуешься?

Date: 2012-09-27 06:49 am (UTC)
From: [identity profile] nosferatum.livejournal.com
Только вчера выкинул книжку без корпуса. Хотя я не могу придумать, куда ее пристроить.

Date: 2012-09-27 06:56 am (UTC)
From: [identity profile] devmind.livejournal.com
Плотоядно посматриваю на PRS-300 :) Хотя, я ее читаю, поэтому вряд ли разберу.

Date: 2012-09-27 07:36 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Я зарегался, но приехать видимо смогу только после работы (интересно, такое возможно?). В общем-то в первую очередь пообщаться с тобой :)

Date: 2012-09-27 07:37 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Там различная длинна пикселя может быть: 8 бит, 16, 24 и 32. Надо опытным путём установить. В моём случае 8 бит.

Date: 2012-09-27 07:38 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Как это без паяния? Ты о своих тыканьях тоже пописывай! Интересно таки.

Есть, пользуюсь достаточно активно, а что?

Date: 2012-09-27 07:38 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Вот так всегда... А что с ней было?

Date: 2012-09-27 07:39 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Та ладно, разобрал, подпаялся и собрал в зад. Я думаю через разъём наушников вывести UART и закрыть всё обратно, шоб товарный вид не теряла.

Date: 2012-09-27 07:40 am (UTC)
From: [identity profile] nosferatum.livejournal.com
не было корпуса, аккумулятора, и кнопок, просто плата с экраном, три года валялась.

Date: 2012-09-27 07:44 am (UTC)
From: [identity profile] goodic.livejournal.com
про "без паяния" вечером отпишусь - освежу в памяти

есть BT клава PAPOO E6300. Брал для ведроида, но она уж больно под Aple заточена. Нужно? for free
Page 1 of 2 << [1] [2] >>

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 01:11 pm
Powered by Dreamwidth Studios