Я всегда хотел получить экран на электронных чернилах для своих будущих проектов. Я купил небольшой экран с картой расширения Raspberry Pi, но потом понял, что можно просто использовать старый" ридер " Amazon Kindle.
Давным-давно я уже экспериментировал с Kindle: портировал на него интерпретатор Infocom и приложение для чтения манги. Мне удалось заставить программное обеспечение Amazon загружать их в виде Kindlet и отображать их интегрированными в "ридер". Однако сейчас мне просто нужна была дешевая и удобная платформа разработки Linux с eink.
- Дешевый Kindle от Ebay (и причина его дешевизны)
- Физический доступ получен!
- Root-доступ получен!
- Загрузки ядра от устаревшего образа в 70800000 .
- Выполнение системного дампа
- Системный анализ
- Общение с Wifid
- внесении изменений в корень
- Установка Dropbear SSH
- преобразовывая все, чтобы мои проекты
- показать кое-что!
- подключитесь к WiFi, и разрешить SSH в
- подвергайте консоли через USB
- Дальнейшее развитие
- На правах рекламы
Дешевый 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. Попробуйте сделать это как можно быстрее!