[Перевод] Превращаем старый Amazon Kindle в платформу разработки с e-ink

Я всегда хотел получить экран на электронных чернилах для своих будущих проектов. Я купил небольшой экран с картой расширения Raspberry Pi, но потом понял, что можно просто использовать старый" ридер " Amazon Kindle.

Давным-давно я уже экспериментировал с Kindle: портировал на него интерпретатор Infocom и приложение для чтения манги. Мне удалось заставить программное обеспечение Amazon загружать их в виде Kindlet и отображать их интегрированными в "ридер". Однако сейчас мне просто нужна была дешевая и удобная платформа разработки Linux с eink.

Дешевый Kindle от Ebay (и причина его дешевизны)

Итак, я пошел на eBay! Я нашел много очень дешевых лотов, помеченных как "Заблокированные Amazon". Я решил не брать их, потому что теоретически их можно было украсть. В конце концов я выбрал Kindle 4 non-touch screen за 7 фунтов.

Через несколько дней он приехал. Вот тогда-то я и понял почему это было так дешево: на экране постоянно отображался некий демо-режим, из которого невозможно выйти:

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

Итак, следующий шаг-получение доступа. Изучив форумы mobileread, я нашел отладочный последовательный порт: пора открывать кейс!

Физический доступ получен!

Все оказалось довольно сложно! По периметру много защелок, а сам корпус приклеен к батарейному отсеку, поэтому потребовалось вмешательство большого ножа. Я очистил прибор от клея ацетоном.

  • Красный: раздражающие защелки
  • Фиолетовый: очень раздражающий клей.
  • Желтый: последовательный порт!

Как это обычно бывает в таких случаях, последовательный порт не имеет разъема, поэтому вам нужно припаять крошечные штырьки к плате. Для такой работы я люблю использовать проволоку для скручивания диаметром около 0,2 мм и жало для поверхностного монтажа:

Я не хочу оставлять незакрепленные провода, но в то же время понимаю, что рано или поздно у меня что-то пойдет не так и мне понадобится доступ к консоли последовательного порта, поэтому я придумал следующее решение:

Я приклеил кусок макета к печатной плате Kindle, а затем припаял с одного конца проводники от крошечных штырьков на печатной плате. Затем я припаял больший и более удобный разъем Dupont на другом конце, чтобы я мог легко подключиться к нему. Верхний кабель на плате Kindle-0v/GND, а остальные-TX и RX (я забыл, какой из них где).

Последняя проблема: последовательный порт Kindle работает на 1,8 В, поэтому мне нужен адаптер последовательного порта, поддерживающий это напряжение:

Адаптер, который я купил, поддерживает 5 В, 3,3 В, 2,5 В и 1,8 В — очень удобно!

Root-доступ получен!

Затем я подключил адаптер последовательного порта к ноутбуку, запустил программное обеспечение последовательного порта minicom и перезапустил Kindle. Затем, поменяв местами провода TX и RX (это всегда неизбежно), я увидел следующую информацию!

"

Процессор: Freescale на меня.MX50 семьи 1.1 V на 800 МГц

mx50 сигналами pll1:800 МГц
mx50 pll2:400 МГц
mx50 pll3:216MHz
ИПГ часы : 50000000Hz
ИПГ на часы : 50000000Hz
UART на часы : 24000000Hz
АГТ часы : 100000000Hz
axi_a часы : 400000000Hz
axi_b часы : 200000000Hz
weim_clock : 100000000Hz
РДР часы : 800000000Hz
esdhc1 часы : 80000000Hz
esdhc2 часы : 80000000Hz
esdhc3 часы : 80000000Hz
esdhc4 часы : 80000000Hz
ГМК: FSL_ESDHC: 0, FSL_ESDHC: 1
Совет: Текила
загрузки причин: [Пр]
загрузочного устройства: ГМК
ID платы: 0031701123730Z56
з/п: B02317022392005M
Initing MDDR памяти
кассового аппарата калибровки в комплекте: 0x128=0xfffe0010 0x12C=0xFFFFFFFF в
память DRAM: 256 Мбайт
с использованием по умолчанию

в: серийный

из: logbuff
ошибка: logbuff
быстрый тест памяти 0x70000000, значение 0x10000000
Post сделанный за 13 мс
нажмите любую клавишу, чтобы остановить автозапуск: 0

Загрузки ядра от устаревшего образа в 70800000 .

Тип изображения: Образ ядра ARM Linux (несжатый)
Размер данных: 4777568 Байт = 4,6 МБ
Адрес загрузки: 70008000
Точка входа: 70008000
Проверка Контрольной суммы . ОК
Загрузка Образа Ядра . ОК
ОК
Запуск ядра .

[СНиП]

Добро пожаловать разжигает!

kindle login:

"

Отлично, это загрузка с помощью загрузчика uboot, после чего загружается Linux и делается запрос на вход.

Если вы попытаетесь войти в систему как root, система запросит пароль, хм. Однако из моего предыдущего опыта работы с Kindle я знал, что пароль может быть сгенерирован из серийного номера. Я обнаружил, что этот сайт генерирует несколько возможных паролей для конкретного устройства: мой пароль был третьим в списке.

В случае смерти сайта, вот самый важный фрагмент кода Javascript:

"
Var md5 = hex_md5(serial);
Document.GetElementById("rootpw").InnerHTML = "fiona" + md5.Substring(7,11);
Документ.GetElementById("rootpw2").InnerHTML = "fiona" + md5.Substring(7,10);
Документ.GetElementById("rootpw3").InnerHTML = "fiona" + md5.Substr(13,3);
""

Ах, я забыл рассказать вам, как я извлек серийный номер устройства. USB — соединение не "работает" — такие демонстрационные устройства нельзя монтировать в виде дисков. Однако, под Linux, он по-прежнему выводит порядковый номер в Linux вывод dmesg (вы также можете сделать это с помощью printenv в приложения uboot если вы нажмете Enter, когда появится сообщение "Нажмите любую клавишу, чтобы остановить автозапуск "отображается"):

"[128033.676587] интерфейс USB 1-2: новое высокоскоростное USB-устройство номером 51 использованием xhci_hcd
[128033.829631] по usb 1-2: USB-устройств обнаружили, idVendor=1949, idProduct=0004, bcdDevice= 1.00
[128033.829638] по usb 1-2: Новые строки USB-устройств: ПТР=1, продукт=2, SerialNumber будет=3
[128033.829642] по usb 1-2: продукт: Amazon разжечь
[128033.829645] по usb 1-2: производитель: Amazon
[128033.829648] usb 1-2: SerialNumber: XXXXXXXXXXXXXXXX"

Отлично! У нас есть root, и мы можем войти в систему! Теперь давайте разберемся, как немного упростить вашу работу.

Выполнение системного дампа

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

Проверив "/proc/mounts", мы увидим множество разделов основного диска на "/dev/mmcblk0".

Выполнить ‘fdisk как /dev/mmcblk0, мы получаем следующее:

‘ единицы = цилиндры 64 * 512 = 32768 байт

загрузочное устройство начало конец блоки ID Система

на /dev/mmcblk0p1 * 1025 12224 358400 83 Линукс
на /dev/mmcblk0p2 12225 14272 65536 83 Линукс
на /dev/mmcblk0p3 14273 15296 32768 83 Линукс
на /dev/mmcblk0p4 15297 59776 1423360 б с Win95 FAT32 в"

Итак, есть четыре раздела — три Linux, один FAT32.

  • Первый диск начинается довольно далеко: оказалось, что ядро хранится именно в этой "недостающей" области.
  • После его изучения становится ясно, что раздел 1-это нормальная система, 2-что-то вроде раздела для диагностических инструментов, 3-для хранения внутреннего частного состояния Kindle (например, паролей Wi-Fi). 4 — это раздел, который вы видите, когда подключаете Kindle через USB: в нем хранятся все книги.
  • Секция 4 монтируется на /mnt/us.

Используя dd, я сбросил начало диска и разделы 1-3 в /mnt/us (мне нравится делать полный raw-образ, чтобы я мог восстановить его в случае, если что-то пойдет не так):

"dd if=/dev/mmcblk0 of=/mnt/us/kindle.Img bs=32768 count=15297"

Хотя этот Kindle не отображает диск через USB, так как у меня есть root, я могу просто заставить его отображать:

"rmmod g_file_storage
modprobe g_file_storage file=/dev/mmcblk0p4"

После этого я скопировал все на ноутбук.

Системный анализ

Затем я смонтировал разделы из kindle. Img на мой ноутбук:

"kpartx -v kindle. Img"

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

  • "rc.D’ используется в качестве системы инициализации, поэтому существует множество скриптов, написанных обычным текстом.
  • Уровень инициализации 5-это "нормальная" система, которая работает на электронных книгах
  • Название электронной книги находится в ‘/opt/amazon’, она написана на Java (я вроде бы уже знал это, но мне нужно было освежить свою память)* Есть целая куча интересных diag-скриптов для тестирования, написанных простым текстом.* Есть довольно удобный демон "wifid" для управления Wi-Fi-соединением: из diag-скриптов я узнал, как с ним общаться.
  • Вы можете написать на экран eink из командной строки с помощью команды "/usr/sbin/eips" (документация находится здесь).
  • Я не смог найти очевидного переключателя "отключить демонстрационный режим": похоже, он встроен в программное обеспечение Java e-book.
  • Следующие системные службы связаны с неподдерживаемыми функциями ПО электронной книге или при общении с Amazon: "S50wan S70wand S75phd S81usbnetd S93webreaderd S94browserd S95framework S96boot_finished".

Общение с Wifid

Вы можете использовать встроенный wifid для подключения к Wi-Fi и управления профилями Wi-Fi. О, и имейте в виду, что многие Kindles поддерживают только Wi-Fi на частоте 2,4 ГГц, имейте это в виду, если что-то не работает.

Перечисление количества профилей Wi-FI:

‘lipc-get-prop com. Lab126.ProfileCount Wifid"

отображение контента в профиль WiFi:

‘Эхо" {=индекс(0)}"| lipc-хэш-опора ком.Lab126.ProfileData Wifid"

удаление профиля беспроводной:

‘lipc-набор-опора на ком. Lab126.DeleteProfile Wifid WIFIESSID"

Создать профиль беспроводной:

‘Эхо’ {Эссид= "WIFIESSID", smethod= "WPA2 в", обеспеченным= "да", ПСК="WIFIPSK"} ‘| lipc-хэш-опора ком. Lab126.CreateProfile Wifid"

возможные варианты smethod: открытая, шифрование WEP, шифрование WPA и WPA2 (если вы выберите "Открыть", затем установите значение для обеспеченных "нет").

WIFIPSK-это WIFI PSK, генерируемый утилитой "wpa_passphrase" (которая находится в Kindle): обычная "wifi passphrase" не будет работать.

Соединительного профиля беспроводной:

‘ lipc-набор-опора на ком. Lab126.CmConnect Wifid WIFIESSID"

отображение состояния беспроводной связи:

‘Эхо’ {индекс = (0)}"| lipc-хэш-проп -Н ком.Lab126.CurrentEssid Wifid"

внесении изменений в корень

многие инструкции требуют от вас изменения корневого диска на ваш Kindle. Однако по умолчанию он монтируется в режиме только для чтения. Чтобы решить эту проблему, выполните следующую команду на вашем kindle:

‘ mntroot rw"

После завершения работы верните диск в режим только для чтения, чтобы избежать нежелательных изменений:

‘ mntroot ro"

Установка Dropbear SSH

Я хотел иметь возможность подключаться к kindle через ssh, поэтому решил установить демон dropbear ssh. Конечно, это устройство находится на ARM, поэтому мне пришлось либо скомпилировать его самому, либо найти где-нибудь. К счастью, есть поддерживаемый разработчиком USBNET hack для kindle: я решил не использовать этот хак дома, потому что хотел полностью контролировать свое устройство, но все же смог позаимствовать у него двоичный файл dropbear.

К сожалению, USBNET поставляется в своем собственном странном формате обновления Kindle, поэтому вам нужно извлечь из него двоичный файл:

На компьютере:

  • Загрузите этот репозиторий git и скомпилируйте его-это позволит нам декодировать обновления kindle.
  • Скачать kindle-usbnetwork-0.57.N-k4.Zip отсюда и скопируйте его в ‘ KindleTool/Release/’.
  • "компакт KindleTool/выпуск/"
  • ‘распаковать разжечь-usbnetwork-0.57. N-k4.Zip"
  • "./kindletool экстракт Update_usbnetwork_0.57.N_k4_install.ОГРН usbnet"
  • "компакт-usbnet"
  • "Jxf usbnet смолы.Деготь.ХZ"
  • копировать ‘в src/usbnet/ОГРН/dropbearmulti’ в строку (я перемонтирована в качестве USB-устройства и копировал файлы).

В Kindle:

  • компакт-диск " / "
  • "МВ /шоссе/США/dropbearmulti /"
  • "команду chmod а+х /dropbearmulti"
  • "ЛН-СФ /пакет dropbear /dropbearmulti"
  • "ЛН-СФ /dropbearkey /dropbearmulti"
  • "ЛН-СФ /ОГРН/УПП /dropbearmulti"
  • "/dropbearkey-Т РГА /dropbear_rsa_host_key"

преобразовывая все, чтобы мои проекты

Я переименовал все ненужные системные службы:

"cd /etc/rc5. D; mv S95framework ОТКЛЮЧЕН.S95framework"

Добавлен пользовательский скрипт инициализации в ‘/etc/rc5.D/S99adq’, чтобы внести свои собственные изменения:

‘#! /Бен/ш
имя= ", сохраненный в adq"

случай "$1" в

начало)

показать кое-что!

выполнить /sbin/еипс -с 20 20 "Здравствуй, сохраненный в adq"
ИС="ifconfig, которые как wlan0| у awk ‘/т в addr:/{gsub(/.*:/,",$2);печать$2}’"
выполнить /sbin/еипс 1 1 "ip-адрес: $ИП"
выполнить /sbin/еипс 1 2 "root пароль: <мой пароль>"
выполнить /sbin/еипс "

подключитесь к WiFi, и разрешить SSH в

lipc-набор-опора на ком.Lab126.Wifid cmConnect MYWIFISSID
в iptables -a вход -я как wlan0 -П по протоколу tcp —dport 22 -J и прими
/пакет dropbear -Р /dropbear_rsa_host_key
команды mkdir -Р /шоссе/США/usbnet/и т. д
Эхо "<мой SSH по умолчанию>" > /шоссе/США/usbnet/и т. д./authorized_keys

подвергайте консоли через USB

команды modprobe -Р g_file_storage
команды modprobe g_serial
на /sbin/Гетти -л 115200 ttyGS0 -л /ОГРН/войти &
;;

стоп)

;;
*)
Сообщение "Использование: /и т. д./init.Д/имя$name {пуск|стоп}" Ж >&2
Выход 1
;;
эсок

выход 0

"

Теперь устройство может:

  • Отображать полезную информацию на экране при загрузке
  • Подключение к Wi-Fi.
  • Используйте SSH через брандмауэр.
  • Запустите демон dropbear ssh.
  • Добавьте мой открытый ключ ssh в соответствующее место dropbear.
  • Удалите функцию USB "притвориться диском"
  • Сделайте его "притвориться последовательным устройством" через USB и отобразите запрос на вход: если я подключу его через USB и использую minicom, я получу запрос на вход в случае, если что-то пойдет не так.

Теперь при загрузке мой kindle выглядит так, и я могу подключиться как root через ssh.

Все почти готово: теперь я могу подключиться через ssh к kindle, и у меня есть несколько слоев последовательной консоли на случай, если что-то пойдет не так. Это довольно удобная система разработки Linux с e-ink, Wi-Fi-соединением и временем автономной работы.

Последнее улучшение — я снял несколько защелок с задней крышки и поставил ее на место.

Дальнейшее развитие

Похоже, что эта библиотека (FBInk) сможет заменить программное обеспечение Amazon eips; вероятно, будет удобнее, если я захочу интегрировать дисплей с моим собственным программным обеспечением.

На правах рекламы

Epic servers-это надежные серверы на Linux или Windows с мощными процессорами AMD EPYC и очень быстрой файловой системой, использующие только NVMe диски от Intel. Попробуйте сделать это как можно быстрее!

PriceMedia