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

23.02.2021 - Просмотров: 15

Я всегда хотел получить экран на электронных чернилах для моих будущих проектов. Я купил небольшой экран с картой расширения 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 (это всегда неизбежно), я увидел следующую информацию!

""
U-Boot 2009.08-lab126 (29 августа 2012 — 12:55:24)

процессор: Freescale на меня.MX50 семьи 1.1 V на 800 МГц
Mx50 сигналами pll1:800 МГц
Mx50 pll2:400 МГц
Mx50 pll3:216MHz
ИПГ часы : 50000000Hz
ИПГ на часы : 50000000Hz
по UART часы : 24000000Hz
Ahb clock : 100000000Hz
Axi_a clock : 400000000Hz
Axi_b Clock : 200000000Hz
Weim_clock : 100000000Hz
Ddr Clock : 800000000Hz
Esdhc1 clock : 80000000Hz
Esdhc2 clock : 80000000Hz
Esdhc3 clock : 80000000Hz
Esdhc4 clock : 80000000Hz
MMC: FSL_ESDHC: 0, FSL_ESDHC: 1
Доска: Текила
Причина загрузки: [POR]
Загрузочное устройство: MMC
Идентификатор платы: 0031701123730Z56
S/N: B02317022392005M
Initing MDDR memory
ZQ calibration complete: 0x128=0xfffe0010 0x12C=0xffffffff
DRAM: 256 МБ
Использование среды по умолчанию

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

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

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

[снип]

Добро пожаловать в Kindle!

Разжигает войти:
""

Отлично, это загрузка с помощью загрузчика 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 в мой ноутбук:

"
автоматического-в разжигают. 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 ГГц, имейте это в виду, если что-то не работает.

Листинг количество профилей беспроводной:

"
Lipc-вам-опора ком. Lab126.Wifid profileCount
"

Отображение содержимого профиля WIFI:

"
Echo " {index=(0)}"| lipc-hash-prop com.Lab126.Wifid profileData
""

Удаление профиля WIFI:

"
Lipc-set-prop com. 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 РО
"

Установка 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", чтобы внести свои собственные изменения:

"’
#! /bin/sh
NAME= "adq"

Дело "$1" в

Start)

display some stuff!

/usr/sbin/eips -c 20 20 "HELLO ADQ"
IP="ifconfig wlan0| awk ‘/t addr:/{gsub(/.*:/,",$2);print$2}’"
/usr/sbin/eips 1 1 "IP-адрес: $IP"
/usr/sbin/eips 1 2 "Корневой пароль: <МОЙ ПАРОЛЬ ROOT>"
/usr/sbin/eips "

подключитесь к Wi-Fi и разрешите ssh

Lipc-набор-опора на ком.Lab126.CmConnect Wifid 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
;;
Esac

Выход 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. Попробуйте сделать это как можно быстрее!

Читайте также