Ebook-потрошитель. Применяем хирургию, чтобы раскрыть секреты Sony Bookreader PRS-505Евгений «Vshmuk» Бейсембаев (diver@edu.ioffe.ru, ICQ 308229460) Вокруг нас полно гаджетов с Linux на борту, и никто не мешает учиться на ошибках профессионалов, вскрывая гаджеты и изучая. Мной была куплена «игрушка» - книгочиталка на электронных чернилах Sony BookReader PRS-505. Вдоволь начитавшись Хайнлайна, я полез во внутренности девайса, изучить программную и аппаратную часть. Эта статья - результат увиденного. Наша цель - посмотреть, как используется Линукс во «взрослых», массовых устройствах, оценить находки «тамошних» профессиональных линуксоидов, поднабраться опыта в исследовании чужого софта, а может, и добавить в устройство что-то свое. ОффлайнИтак, сначала проведем «оффлайновый осмотр внутренней программы. Производитель электронных книг периодически выкладывает на официальный сайт свежие прошивки, исправляющие старые глюки и добавляющие новые. Чтобы не потрошить содержимое flash-карточек устройства, просто скачаем новую версию
Помимо вспомогательных dll-ек и конфигурационных файлов xml (к ним мы еще вернемся), в распакованном архиве будут жить нужные образы ФС, которые и заливаются в итоге в устройство. Они имеют расширение *.img. Пропустим эти имиджи через программу file и посмотрим, что она о них думает:
Содержимое третьего файла показалось мне подозрительным, это был явно не ДОС-драйвер. Размер - 480 тысяч байт, почти полностью забит единичками (для более быстрого залива во флеш, как я полагаю) и имеет некоторое количество вкраплений чего-то малоосмысленного. Сначала я решил, что это какой-то загрузчик (истинное назначение станет ясным позднее). Файлы cramfs.Fsk.img и cramfs.Rootfs.img, очевидно - образы файловых систем в формате CramFS. Попробуем их смонтировать:
Внутри - каталог sony/ebook, а в нем - подкаталоги application, bin и FONT. Заглянем в первый и увидим кучу динамических библиотек, скомпилированных под архитектуру armel, и кучку вездесущих xml-файлов. В каталоге /bin - 4 бинарника, а в FONT - шрифты. Я чуть было не ушел из подкаталога /etc дальше по файловой системе, но в последний момент заметил скриптик rc.d/rc3.d/S98librostart, который запускает файл tinyhttp.sh, живущий в предыдущей изученной нами файловой системе. А вот здесь уже интересно. Зачем устройству, не имеющему никакого сетевого интерфейса, какой-то http? Ладно, берем на заметку и ползем по файловой системе дальше.
Следовательно, электронные чернила представляются Линуксу как графический Framebuffer-совместимый дисплей! Так что, если захотим похачить устройство и заставить выводить на экран что-то, отличное от книжек, – надо лишь направлять вывод нашей графической программы в /dev/fb0. Проявляется и смысл файла raw.BootImg.img - это то, что отсылается во фреймбуффер при загрузке ОС, то есть картинка с логотипом и надписью «Starting Up…». Размер файла как раз равен 800x600 (=480000), по байту на пиксель. Одно из особенностей устройства - разработчики физически поместили на разные файловые системы собственно GNU (как универсальный софт) и устройство-зависимую оболочку Fsk - то, что и делает букридер букридером. Сделано это чтобы можно было быстро заливать обновления к программе чтения, не трогая систему целиком и повышая ее безопасность. Разбираем…Внутренности устройства уже давно исследованы товарищами igorsk, boroda и остальными энтузиастами с форума www.the-ebook.org/forum/viewtopic.php?t=7577. Нам осталось только повторить их подвиг, благо, инструкция по разборке там имеется.
Итак, никакого чуда или крутой инженерной находки внутри букридера нет. Видим микросхему NOR-памяти, в которой, скорее всего, живут загрузчик и ядро, потому как именно этот тип Flash умеет читать отдельно заданный байт (Random Access). Рядом – NAND-Flash, где, очевидно, живут файловые системы и, собственно, сами книжки. Лично меня порадовала SDRAM-память в маленьких BGA-корпусах. Тем самым инженеры нехило сэкономили место на плате. Вообще, компоновщикам платы и дизайнерам корпуса моя похвала и зависть. Все подогнано неимоверно точно, и нигде не заметно расточительства. Впихнуть в корпус что-нибудь, кроме того, что в нем есть, мне показалось невозможным. Короче, ни добавить, ни отнять. ОнлайнВключаем устройство. Если порт настроен правильно и все запаяно аккуратно, то наблюдаем лог загрузки Линукса. Как загрузка закончена, – логинимся с узнанными из /etc/passwd реквизитами (libro:librie). Система пускает нас и вываливает сообщение: После чего перестает отвечать на команды! Все хорошо, так и должно быть, это процесс-оболочка tinyhttp заметила неактивность процессора и вырубила его, чтобы сэкономить аккумулятор. «Расшевелить» процессор можно, понажимав на кнопки громкости. Работать так сложно, поэтому убиваем лишнее:
С этого момента нам доступна настоящая, полноценная система GNU/Linux на ядре 2.4! Из лога загрузки (команда dmesg) можем узнать многое об аппаратной части девайса: например, что размер оперативной памяти 64 Mb и что flash-память разбита на очень много разделов на все случаи жизни. Взглянем на характеристики процессора:
Выходит, контроллер работает на частоте 100 МГц и имеет архитектуру ARM9. А вот что Линукс примонтировал:
Кстати, то, что имеет файловую систему cramfs – доступно только для чтения. Особенность файловой системы, что бы там драйвер себе ни думал. ОболочкаКак среди файлов прошивки устройства, так и в приложении, поставляющемся под Windows, можно заметить множество xml-файлов, как один, начинающихся со строчки Энтузиасты в интернете уже создали альтернативные прошивки с пакетами локализации и даже упаковали их в CramFS-образы. Среди рекомендуемого - более читабельные шрифты, симпатичные иконки и часы в углу экрана. Можно не спешить заламывать конфиги, а сначала посмотреть, что предлагает сообщество. Но если хочется чего-то своего, то расскажу, как создать образ на примере заливки новых шрифтов. Ttf-шрифты лежат в каталоге /opt/sony/ebook/FONT. В идеале, их надо переименовать в tt0003m_.ttf,tt0011m_.ttf,tt0419m_.ttf, а также дать внутренние имена:
Именно такие имена прописаны в конфигах application/kconfig.xml и application/resources/scripts/main.xml. По образу и подобию написанного там можно изменить предложенные стили на свои:
В тех же конфигах, играясь со скриптами и разметкой, можно добавить возможностей в оболочку. Финальный аккорд - пакуем новую ФС в образ:
ПерепрошивкаПросто так заменить нужный файл на обновленный сжатая файловая система cramfs не позволяет. Надо будет ее распаковать на PC, внести изменения и с помощью mkfs.cramfs запаковать обратно, что и было проделано в предыдущем разделе. Товарищ igorsk написал набор скриптов (Universal Flasher, качать отсюда - www.mobileread.com/forums/showthread.php?t=26831). С их помощью можно заменить старый образ на созданный, а также (внимание!) заменять отдельные файлы, если хочется поэкспериментировать, не мучаясь с компоновками образов. Просто скидываем кучку файлов на Flash-карточку, заменяем образ new_opt.img на наш, вставляем в букридер и перезагружаемся. Если все прошло хорошо, и ошибок в конфигах нет, то мы заимеем обновленный интерфейс. Чаще всего при заливке испорченного образа система не выходит из строя и дает нам шанс исправить проблему. Хотя иногда оболочка повреждается настолько, что без тяжелой артиллерии (подпаивания к отладочному порту) не обойтись. Но ведь остальная файловая система с GNU не убита, поэтому с полноценной консолью несложно перепрошить устройство рабочей прошивкой вручную, предварительно залив на флешку соответствующий образ (приведенная ниже последовательность действий предложена boroda):
Простор для экспериментовПривычка разбирать попадающиеся под руку (и собирать обратно!) гаджеты добавляет опыта и помогает при создании чего-то своего. Мы взяли устройство для чтения электронных книг, но вместо чтения стали исследовать его программную и аппаратную суть. Ладно спроектированный и созданный на базе знакомого и изученного Linux, Sony Bookreader PRS-505 предоставляет широкий простор для экспериментов и творчества. INFOUART - этот простой механизм позволяет последовательно передать несколько байт. В одном из предыдущих номеров журнала Сергей Долин подробно написал о нем в рубрике «Фрикинг». Sony Bookreader PRS-505 - карманный компьютер, имеющий вместо стандартного ЖК или OLED-дисплея так называемый E-ink дисплей на электронных чернилах. WWW
|