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 советует найти скрипт листания страниц, и поглядеть его. Но потом.... Поскольку я уже просто клюю носом в клаву, эксперименты на сегодня прекращаю. Быть может на работу захвачу всё это барахло, там попробую помучать.

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 07:52 pm
Powered by Dreamwidth Studios