Вы хотите железа? Их есть у меня.
Sep. 27th, 2012 01:00 amНа меня тут жалуются, мол Длиный не пишет ничего о железе, всё бытовуха. Я лишь оправдываюсь, что железо на работе, а всилу специфики работы писать о том не могу. А дома в основном жрачка, стирка, уборка и т.п. Но раз в недельку я устраиваю себе ночь паяльника и топора и тогда что-то ваяю.
В закромах Родины ВНЕЗАПНО обнаружил древнюю читалку Sony PRS-505, которую когда-то любезно одолжил у одного знакомого, и так ему и не отдал. А этой читалкой кроме меня ещё пользовалась милая девушка
shnur0vka (коей передаю, пользуясь случаем, привет).
Я вспомнил, что читалка бегает под линуксом. Ну я вынул её и положил на стол, понимая что из неё получится прекрасный, контрасный дисплей, на который можно будет смотреть сколько угодно времени не напрягаясь. Поскольку мне надо отображать только графики и то раз в минуту, то самое оно.
Положил я её на стол и забыл. Потом ушёл в пещеры, где в автобусе многоуважаемый камрад
vshmuk пользовался такой читалкой. И слово за слово, он напомнил, что когда-то писал статью о взломе данных читалок и о том, что там есть (о чудо!) Фрейм буффер!!! А это значит, что требуемое изображение достаточно просто записывать в файл фреймбуфера, и оно будет отображаться на экране.
Я прям этой мыслью заболел. Нашёл статью, от туда вышел на форум и толковую инструкцию по подпайке. Но в силу того, что вечером я напоминаю овощ, сил кроме как на разбор читалки, у меня не хватало. Хотя ночью прям уснуть не мог. Но вот у меня наконец дошли руки, и я подпаялся (честно, не с первого раза), к контактным площадкам самым тонким проводом, что у себя нашёл. Подключил к VCP FT232RL, и пошло-поехало...

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

Тыл
После успешного логина root, и убивания процессов, которые усыпляют книгу
root@(none):~# killall tinyhttp.sh
root@(none):~# killall tinyhttp
Я попал в знакомую оболочку, с которой, блин, работаю на работе каждый день. Потирая потные ручёнки, решил погладеть файлик фреймбуфера.
Обана... А тут оказывается дофигища фреймбуфферов... Я попробовал сделать на экране фарш:
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
Он задумался, но экран упорно показывает точно то, что на фотке. Хм... Интересно, как он выводит бут имидж? Исходя из статьи
vshmuk есть скрипт, который монтирует всё и выводит изображение, а именно /etc/rc.d/rcS.d/S20libromount
Глянем, что же там:
root@(none):/# cat /etc/rc.d/rcS.d/S20libromount
из всего фаршмака, что там вывалилось, нам наиболее интересно вот что:
А это много интереснее. Ну ка попробуем по умному:
Ничего... Попробуем выполнить комманду, которая следует после
Тоже ничего, хотя какие-то действия идут.
Попробовал ещё загрузить оригинальную бут имайдж, согласно скрипту. Но ничего не произошло... А жаль.
Для тех, кто нихрена не понимает в линухах (надеюсь, что таких среди моих читателей почти нет), поясняю, что фреймбуффер это файл в линуксе (как и любое устройство в общем-то), в который можно (теоретически), тупо записать файл-слепок памяти, и вывести его на экран. Так же можно сделать аппаратный скриншот, т.е. просто сдампить видеопамять, скопировав этот файл в другое место и просмотреть его, скопировав (точнее записав в) его обратно.
Зачем это нужно: На целевой машине идёт видеовывод в виртуальный экран, с разрешением, равным разрешению книжки (а именно 600х800). Далее периодически, берётся файл фреймбуффера виртуального экрана и перенаправляется в сом-порт, а на том конце из ком-порта, коммандой cat это перенаправляется во фреймбуффер книжки.
Иллюстрирую, все комманды выполняются на целевой машине, книжка подключена по UART, через VCP, который висит на /dev/ ttyUSB0 . Комманды вызываются раз в несколько минут, например в кроне.
echo "cat /dev/ttyS0 >/dev/fb0" > /dev/ttyUSB0
Эта комманда по UART передаёт комманду перенаправлять содержимое файла СОМ-порта во фреймбуффер. Следом идёт вторая комманда:
cat /dev/fbn > /dev/ttyUSB0
Эта комманда передаёт содержимое виртуального экрана fbn (где n-номер экрана) в СОМ-порт. Всё должно отработать прекрасно, передача кончится по приходу символа конца файла.
Сия гениальная и простая операция у меня не удалась. Пока не удалась.
Камрад
vshmuk советует найти скрипт листания страниц, и поглядеть его. Но потом.... Поскольку я уже просто клюю носом в клаву, эксперименты на сегодня прекращаю. Быть может на работу захвачу всё это барахло, там попробую помучать.
В закромах Родины ВНЕЗАПНО обнаружил древнюю читалку Sony PRS-505, которую когда-то любезно одолжил у одного знакомого, и так ему и не отдал. А этой читалкой кроме меня ещё пользовалась милая девушка
Я вспомнил, что читалка бегает под линуксом. Ну я вынул её и положил на стол, понимая что из неё получится прекрасный, контрасный дисплей, на который можно будет смотреть сколько угодно времени не напрягаясь. Поскольку мне надо отображать только графики и то раз в минуту, то самое оно.
Положил я её на стол и забыл. Потом ушёл в пещеры, где в автобусе многоуважаемый камрад
Я прям этой мыслью заболел. Нашёл статью, от туда вышел на форум и толковую инструкцию по подпайке. Но в силу того, что вечером я напоминаю овощ, сил кроме как на разбор читалки, у меня не хватало. Хотя ночью прям уснуть не мог. Но вот у меня наконец дошли руки, и я подпаялся (честно, не с первого раза), к контактным площадкам самым тонким проводом, что у себя нашёл. Подключил к 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
Он задумался, но экран упорно показывает точно то, что на фотке. Хм... Интересно, как он выводит бут имидж? Исходя из статьи
Глянем, что же там:
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-номер экрана) в СОМ-порт. Всё должно отработать прекрасно, передача кончится по приходу символа конца файла.
Сия гениальная и простая операция у меня не удалась. Пока не удалась.
Камрад