Ebook-різник секрети sony book reader prs-505

Наша мета - подивитися, як використовується Лінукс під "дорослих", масових
пристроях, оцінити знахідки "тамтешніх" професійних линуксоидов,
набратися досвіду в дослідженні чужого софта, а може, і додати в пристрій
щось своє.

Отже, спочатку проведемо "офлайновий огляд внутрішньої програми.
Виробник електронних книг періодично викладає на офіційний сайт
свіжі прошивки, виправляють старі глюки і додають нові. Щоб не
потрошити вміст flash-карток пристрою, просто скачати нову

версію. Це програма, яку виробник нам надав для
перепрошивки рідерів. Вона містить образ файлової системи для заливки в
пристрій. Екзешник - всього лише саморозпаковується Win-Zip, і його
зовсім необов'язково запускати, досить просто розпакувати linux-утилітою
unzip:

$ Unzip PRS-505 \ Updater \ 1.1.00.18040.exe
$ ls
checksum eBookMSCDeviceUpdater.dll fsk.dll kconfig.xml msvcr71.dll ssleay32.dll
cramfs.Fsk.img eBookUpdater FskImage.dll libeay32.dll PRS-505 Updater
1.1.00.18040.exe USBDLL.dll
cramfs.Rootfs.img eBookUpdater.xsb Fskin.dll MSCEncComm.dll PRS-505 Updater.exe
DriveManager.dll FskCore.xsb FskPower.dll msvcr70.dll raw.BootImg.img
$ Rm PRS-505 \ Updater \ 1.1.00.18040.exe

Крім допоміжних dll-ек і конфігураційних файлів xml (до них ми ще
повернемося), в розпакованому архіві будуть жити потрібні образи ФС, які і
заливаються в результаті в пристрій. Вони мають розширення * .img. припустимо ці
іміджі через програму file і подивимося, що вона про них думає:

$ File * .img
cramfs.Fsk.img: Linux Compressed ROM File System data, little endian size 65536
CRC 0xc3e97789, edition 2768907732, 3306537355 blocks, 1718735798 files
cramfs.Rootfs.img: Linux Compressed ROM File System data, little endian size
65536 CRC 0xdb11801f, edition 3444324402, 2364302859 blocks, 491549572 files
raw.BootImg.img: DOS executable (device driver) for DOS

Вміст третього файлу здалося мені підозрілим, це був явно не
ДОС-драйвер. Розмір - 480 тисяч байт, майже повністю забитий одиничками (для
швидшого затоки у флеш, як я вважаю) і має деяку кількість
вкраплень чогось малоосмисленное. Спочатку я вирішив, що це якийсь завантажувач
(Справжнє призначення стане ясним пізніше).

Файли cramfs.Fsk.img і cramfs.Rootfs.img, очевидно - образи файлових систем в
форматі CramFS. Спробуємо їх змонтувати:

$ Mkdir Fsk.FS
$ Cd Fsk.FS
# Mount -t cramfs -o loop. /cramfs.Fsk.img.

Всередині - каталог sony / ebook, а в ньому - підкаталоги application, bin і FONT.
Заглянемо в перший і побачимо купу динамічних бібліотек, скомпільованих під
архітектуру armel, і купку всюдисущих xml-файлів. У каталозі / bin - 4 бінарники,
а в FONT - шрифти.

Тепер прімонтіруем файл cramfs.Rootfs.img. У ньому - повноцінна файлова
система GNU з каталогами: bin, Data, dev, etc, home, lib, mnt, opt, opt0, opt1,
proc, root, sbin, tmp, usr, var. Що ж цікавого тут можна накопати? Ну,
по-перше, вміст файлу / etc / issue дасть нам версію оточення Linux -
комерційний проект MontaVista
версії 3.0. Файли / etc / passwd і / etc / sudoers розкажуть про єдиному
користувача цієї системи: "libro" з зашифрованим паролем "/ ET3mqgcE1NTQ".
Підкаталог /etc/rc.d позначить всі сервіси і демони, які запускаються в
пристрої. Тут все стандартно, якби не сховався в rcS.d скрипт
S20libromount. Заглянувши в нього, можна дізнатися, що він монтує файлові системи
(В / opt, / opt0 і / opt1), підвантажує драйвера екранчика, звуку, usb-storage і
flash-карток, виводить назовні вітання і встановлює дефолтний час. В
Загалом, все, від чого залежить кнігочіталка, робиться тут.

Я мало не пішов з підкаталогу / etc далі по файлової системи, але в
останню мить помітив скриптик rc.d / rc3.d / S98librostart, який запускає
файл tinyhttp.sh, що живе в попередній вивченої нами файлової системи. А от
тут вже цікаво. Навіщо пристрою, який не має ніякого мережевого інтерфейсу,
якийсь http? Гаразд, беремо на замітку і повземо по файлової системи далі.

kernel_version = 2.4.17_n12
author = E Ink
description = 8track FrameBuffer Driver
VGA e-ink 600x800

Отже, електронне чорнило подаються Лінукс як графічний
Framebuffer-сумісний дисплей! Так що, якщо захочемо похачіть пристрій і
змусити виводити на екран щось, відмінне від книжок, - треба лише спрямовувати
висновок нашої графічної програми в / dev / fb0. Виявляється і сенс файлу
raw.BootImg.img - це те, що відсилається у фреймбуффер при завантаженні ОС, тобто
картинка з логотипом і написом "Starting Up ...". Розмір файлу якраз дорівнює
800 × 600 (= 480000), по байту на піксель.

Одне з особливостей пристрою - розробники фізично помістили на різні
файлові системи власне GNU (як універсальний софт) і пристрій-залежну
оболонку Fsk - то, що і робить букридер букридерів. Зроблено це щоб можна
було швидко заливати поновлення до програми читання, не чіпаючи систему цілком і
підвищуючи її безпеку.

Розбираємо ...

Нутрощі пристрої вже давно досліджені товаришами igorsk, boroda і
іншими ентузіастами з форуму

www.the-ebook.org. Нам залишилося тільки повторити їх подвиг, благо,
інструкція з розбирання там є.

Із завмиранням серця розбираю свого доброго друга і всередині виявляю:

  • Центральний процесор FreeScale (Dragonball) MX-1 з архітектурою ARM926
  • Мікросхема NAND-Flash пам'яті Samsung (256 Мb)
  • Мікросхема NOR-Flash пам'яті Spansion (2 Мb)
  • Дві мікросхеми оперативної пам'яті Samsung
  • Контролер карт SD / MMC + MemoryStick Ricoh
  • Контролер дисплея на FPGA Actel ProASIC3
  • Цифро-аналоговий перетворювач для виведення звуку
  • Контролер USB Epson S1R72V17
  • Розпаювання під пропріетарний оцінний роз'єм (100 ніжок), маркована як
    CN1501

Взагалі, компонувальник плати і дизайнерам корпусу моя похвала і заздрість. Усе
підігнано неймовірно точно, і ніде не помітно марнотратства. впихнути в
корпус що-небудь, крім того, що в ньому є, мені здалося неможливим.
Коротше, ні додати, ні відняти.

Розберемося з налагоджувальний роз'ємом. Очевидно, на нього виводяться JTAG-інтерфейси
мікросхем + якісь порти, типу послідовного отладочного UART'а з
центрального процесора. Так і є. Хлопці з форуму, названого вище, вже
зробили брудну роботу, у вигляді затикання осциллографом, і вирахували належать
DBG-порту ніжки. Залишилося тільки до них підпаяти. Припаюємо тонкі срібні
дроти до 6 (Transmit) і 7 (Receive) пінам, а також не забуваємо про "земляний"
контакт, який можна взяти або від 5-го Піна роз'єму або - просто схопившись
за корпус пристрою. Через перехідник RS-232 / UART підключаємо до COM-порту
комп'ютера.

Включаємо пристрій. Якщо порт налаштований правильно і все запаяні акуратно, то
спостерігаємо лог завантаження Лінукса. Як завантаження закінчена, - логіном з впізнали
з / etc / passwd реквізитами (libro: librie). Система пускає нас і вивалює
повідомлення:

### fskLoad
### fskLoaded
latest nblconfig read from 0x0003b800
latest nblconfig written to 0x0003c000
#### xs_switcher_usbWatcher_endUSBThread
# Warning: global instead of local!
# Warning: global instead of local!
SYSNPM: sysnpm_pm_callback (): 163 Mem, CPU stopping.

Після чого не відповідає! Все добре, так і має бути, це
процес-оболонка tinyhttp помітила неактивність процесора і вирубала його, щоб
заощадити акумулятор. "Розворушити" процесор можна, Понатискавши на кнопки
гучності. Працювати так складно, тому вбиваємо зайве:

$ Killall tinyhttp.sh
$ Killall tinyhttp

З цього моменту нам доступна справжня, повноцінна система GNU / Linux на ядрі
2.4!

З балки завантаження (команда dmesg) можемо дізнатися багато про апаратну частину
девайса: наприклад, що розмір оперативної пам'яті 64 Mb і що flash-пам'ять
розбита на дуже багато розділів на всі випадки життя. Погляньмо на характеристики
процесора:

root @ (none): / proc # cat / proc / cpuinfo

Processor. ARM / CIRRUS Arm920Tsid (wb) rev 0 (v4l)
BogoMIPS. 98.09
Features. swp half 26bit
Cache type. write-back
Cache clean. cp15 c7 ops
Cache lockdown. format A
Cache unified. harvard
.
Hardware. Motorola DragonBall MX1 (eBook-2)

Виходить, контролер працює на частоті 100 МГц і має архітектуру ARM9.

А ось що Лінукс примонтировать:

/ Dev / root on / type cramfs (rw)
proc on / proc type proc (rw)
tmpfs on / dev / shm type tmpfs (rw)
tmpfs on / tmp type tmpfs (rw)
tmpfs on / var type tmpfs (rw)
tmpfs on / etc type tmpfs (rw)
/ Dev / mtdblock10 on / opt1 / keys type cramfs (rw)
/ Dev / mtdblock11 on / opt1 / info type cramfs (rw)
/ Dev / mtdblock15 on / opt type cramfs (rw)
/ Dev / mtdblock16 on / opt0 type jffs2 (rw)
devpts on / dev / pts type devpts (rw)

До речі, те, що має файлову систему cramfs - доступно тільки для читання.
Особливість файлової системи, що б там драйвер собі не думав.

Ttf-шрифти лежать в каталозі / opt / sony / ebook / FONT. В ідеалі, їх треба
перейменувати в tt0003m_.ttf, tt0011m_.ttf, tt0419m_.ttf, а також дати внутрішні
імена:

Font family - Swis721 BT, Dutch801 Rm BT, Courier10 BT
Font subfamily - Roman, Roman, Roman
Full font name - Swis721 BT Roman, Dutch801 Rm BT Roman, Courier10 BT Roman

Саме такі імена прописані в конфігах application / kconfig.xml і
application / resources / scripts / main.xml. За образом і подобою написаного там
можна змінити запропоновані стилі на свої:


У тих же конфігах, граючись зі скриптами і розміткою, можна додати
можливостей в оболонку. Фінальний акорд - пакуємо нову ФС в образ:

# Mkfs.cramfs ./new_opt ./new_opt.img

перепрошивка

Просто так замінити потрібний файл на оновлений стисла файлова система cramfs
не дозволяє. Треба буде її розпакувати на PC, внести зміни і за допомогою
mkfs.cramfs запакувати назад, що й було зроблено в попередньому розділі.
Товариш igorsk написав набір скриптів (Universal Flasher, качати

звідси). З їх допомогою можна замінити старий образ на створений, а також
(Увага!) Замінювати окремі файли, якщо хочеться поекспериментувати, чи не
страждаючи з компонуваннями образів. Просто скидаємо купку файлів на Flash-картку,
замінюємо образ new_opt.img на наш, вставляємо в букридер і перезавантажуємося. якщо
все пройшло добре, і помилок в конфігах немає, то ми заімеем оновлений інтерфейс.

Найчастіше при заливці зіпсованого образу система не виходить з ладу і дає
нам шанс виправити проблему. Хоча іноді оболонка ушкоджується настільки, що
без важкої артилерії (подпаіваніе до Отладочная порту) не обійтися. Але ж
інша файлова система з GNU не вбита, тому з повноцінною консоллю
нескладно перепрошити пристрій робочої прошивкою вручну, попередньо заливши
на флешку відповідний образ (наведена нижче послідовність дій
запропонована boroda):

// Створюємо тимчасовий диск в пам'яті об'ємом 32 Мb
root @ (none):

# Mount -o remount -t tmpfs -o size = 32m / dev / shm / tmp
// Монтуємо Flash-картку
root @ (none):

# Mkdir / tmp / sd_card
root @ (none):

# Mount / dev / sdmscard / r5c807a1 / tmp / sd_card
// Виймаємо звідти образ в тимчасовий диск
root @ (none):

# Cp /tmp/sd_card/new_opt.img / tmp
// Перевіряємо контрольну суму
root @ (none):

# Md5sum /tmp/new_opt.img
// пропрієтарних софт Sony для низкоуровневой роботи з NAND-flash картками
root @ (none):

# / Usr / local / sony / bin / nblsdm delete Fsk
root @ (none):

# / Usr / local / sony / bin / nblsdm create -i /tmp/new_opt.img -d 1 Fsk
// Порівнюємо залите
root @ (none):

# / Usr / local / sony / bin / nblsdm cmp -i /tmp/new_opt.img Fsk
root @ (none):

# / Usr / local / sony / bin / nblconfig -ksel normal
root @ (none):

Простір для експериментів

Звичка розбирати трапляються під руку (і збирати назад!) Гаджети
додає досвіду і допомагає при створенні чогось свого. Ми взяли пристрій для
читання електронних книг, але замість читання стали досліджувати його програмну і
апаратну суть. Гаразд спроектований і створений на базі знайомого і
вивченого Linux, Sony Book Reader PRS-505 надає широкий простір для
експериментів і творчості.

UART - цей простий механізм дозволяє послідовно передати кілька
байт. В одному з попередніх номерів журналу Сергій Долін докладно написав про нього
в рубриці "Фрікінг".

Sony Book Reader PRS-505 - кишеньковий комп'ютер, який має замість стандартного
ЖК або OLED-дисплея так званий E-ink дисплей на електронному чорнилі.

Хороший сайт про електронні книжки з чудовим форумом -
www.the-ebook.org.

Ще трохи відомостей про нутрощах девайса:

wiki.mobileread.com/wiki/Sony_Reader_hack.

Покажи цю статтю друзям:

Схожі статті