原文地址:Turning an old Amazon Kindle into a eink development platform

译者 & 校正:HelloGitHub-小鱼干 & 卤蛋

我想有个用于(开发)未来项目的水墨屏,刚好我又买了一个带树莓派 “hat” 的小玩意。就这样,灵光一闪的我想到旧 Amazon Kindle 电子书阅读器可以变废为宝。

译者:这便是本文的由来。

我之前有过使用 Kindle 的经验:我为它移植过一个 Infocom 解析器 和一个 Manga 漫画阅读器 。我让亚马逊软件以 “Kindlets” 形式加载 Infocom 和 Manga,并将它们集成到电子书阅读器 Kindle 中。而现在,我想要一个好用且便宜的水墨屏 Linux 开发平台。

下面就是全部的操作和流程!

Ebay 上便宜的 Kindle(和它们便宜的原因)

我在 Ebay 上看到了许多便宜的 Kindle,上面标着 “BLOCKED BY AMAZON”,当然我并不打算买它们,因为理论上它们可能被偷了。最后,我选择了一个 7 英镑的非触摸版 Kindle 4。

几天后,我收到货发现了它这么便宜的原因:这台 Kindle 陷入了某种不可退出的演示模式:

我在 Google 上搜了下解决方法,后来版本的 Kindle 是可以退出演示模式,但这些方法在这个 Kindle 4 版本上没用。不过不要紧,这不重要:因为我并不想在这个 Kindle 上运行原装的 Kindle 电子书软件。

嗯,下一步我们就是要去获得访问权限。我浏览了 mobileread 论坛 显示 Kindle 有一个调试串口:是时候动手了!

处理硬件

这台 Kindle 有点麻烦:它周围有多个卡扣,外壳粘在电池组件上,我机智地用了一把刀来拆机并用丙酮把 (Kindle 后盖的)粘合剂擦拭干净。

  • 红色框:讨厌的卡扣

  • 紫色:真的非常麻烦的胶水(粘合剂)

  • 黄色:串口

一般来说,硬件串口是没有插孔的,我们要将连接线焊接到主板的串口上。我喜欢用大约 0.2mm 电线来连接电子元件,并用我的电烙铁来重焊 Kindle 底座。

我不想任何电线乱绕,我也深知我可能会焊乱电线但我又需要连接串口,所以我想到了一个法子连接电线:

我用强力胶把一块条板粘在 Kindle 的 PCB 印刷电路板上,然后把迷你 PCB 连接点上的电线焊在一端。最后,在另一端我焊接了一个大的、通用“Dupont”电缆插座,这样我可以很容易地连接和拆卸它。对啦,Kindle PCB 顶部电缆是 0v/GND,其他电缆是 TX 和 RX (我忘了这两个电缆的顺序)。

最后一个难题:Kindle 串口运行电压是 1.8v,所以我需要一个串行适配器来供电:

我买的适配器支持 5v、3.3v、2.5v 和 1.8v,非常搭!

Root Kindle

接下来,我把串行适配器连到我的笔记本电脑上,运行 minicom 串口通信软件,再重新启动 Kindle。然后,我(难免地,译者:前面有提到作者忘记了 TX 和 RX 顺序)交换 TX 和 RX 电缆后,我看到了 Kindle 欢迎信息!

U-Boot 2009.08-lab126 (Aug 29 2012 - 12:55:24)CPU:   Freescale i.MX50 family 1.1V at 800 MHz
mx50 pll1: 800MHz
mx50 pll2: 400MHz
mx50 pll3: 216MHz
ipg clock     : 50000000Hz
ipg per clock : 50000000Hz
uart clock    : 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
Board: Tequila
Boot Reason: [POR]
Boot Device: MMC
Board Id: 0031701123730Z56
S/N: B02317022392005M
Initing MDDR memory
ZQ calibration complete: 0x128=0xfffe0010 0x12C=0xffffffff
DRAM:  256 MB
Using default environmentIn:    serial
Out:   logbuff
Err:   logbuff
Quick Memory Test 0x70000000, 0x10000000
POST done in 13 ms
Hit any key to stop autoboot:  0
## Booting kernel from Legacy Image at 70800000 ...Image Name:   Linux-2.6.31-rt11-lab126Image Type:   ARM Linux Kernel Image (uncompressed)Data Size:    4777568 Bytes =  4.6 MBLoad Address: 70008000Entry Point:  70008000Verifying Checksum ... OKLoading Kernel Image ... OK
OK
Starting kernel ...[snip]Welcome to Kindle!kindle login:

很好,这是启动 uboot 的启动加载器( bootloader )在启动 Linux 并要求我登录。

以 root 登录,提示要输入密码:Emmm…密码?从以前的 Kindle 使用经验中,我知道可以用 Kindle 的序列号生成密码。然后我找到了 这个网站,它会为一个特定的设备生成许多可能的密码:我的 Kindle root 登录密码是第三个。

为防止网站倒闭,这里是 Javascript 生成密码的关键片段:

var md5 = hex_md5(serial);
document.getElementById("rootpw").innerHTML = "fiona" + md5.substring(7,11);
document.getElementById("rootpw2").innerHTML = "fiona" + md5.substring(7,10);
document.getElementById("rootpw3").innerHTML = "fiona" + md5.substr(13,3);

对对,我忘了说我是如何拿到设备序列号的。Kindle 以非工作状态插上 USB,即,你不能将这些演示设备作为磁盘。但在这个状态的 Kindle 可用 Linux 的 dmesg 命令输出序列号(你也可以在 uboot 中使用 printenv 命令得到序列号,当它显示 “Hit any key to stop autoboot” 时按 Enter 回车键):

[128033.676587] usb 1-2: new high-speed USB device number 51 using xhci_hcd
[128033.829631] usb 1-2: New USB device found, idVendor=1949, idProduct=0004, bcdDevice= 1.00
[128033.829638] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[128033.829642] usb 1-2: Product: Amazon Kindle
[128033.829645] usb 1-2: Manufacturer: Amazon
[128033.829648] usb 1-2: SerialNumber: XXXXXXXXXXXXXXXX

Cool!我们有 root 权限,可以登录了!现在来看看如何让它更方便地使用。

转储系统

一般来说,第一步是将磁盘信息转到另一台计算机上进行分析。

检查 /proc/mounts,显示主磁盘 /dev/mmcblk0 上有多个分区。

运行 fdisk /dev/mmcblk0 会得到如下结果:

Units = cylinders of 64 * 512 = 32768 bytesDevice Boot      Start         End      Blocks  Id System
/dev/mmcblk0p1   *        1025       12224      358400  83 Linux
/dev/mmcblk0p2           12225       14272       65536  83 Linux
/dev/mmcblk0p3           14273       15296       32768  83 Linux
/dev/mmcblk0p4           15297       59776     1423360   b Win95 FAT32
  • 四个分区:三个 Linux 系统,一个 FAT32 系统。

  • 第一个磁盘开始时离磁盘很远:原来内核存储在那个 “丢失的” 区域。

  • 深入研究后发现分区 1 是正常系统,2 是一种诊断工具,3 是存储 Kindle 私密信息(例如 Wi-Fi 密码)。当你通过 USB 插入 Kindle 时,你会看到分区 4:你电子书的存储地方。— 分区 4 挂载在 /mnt/us”`。

我用 dd 命令将磁盘和分区 1-3 转储到 /mnt/us 上(一般我中意备份一个完整的原始映像,以便在出现问题时可以恢复它):

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

接着,我将 Kindle 各个分区安装到我的笔记本电脑上。我把所有分区文件放在一个文件夹中,这样我可以方便地用 grep 命令查看它们。我发现:

  • Kindle 用 rc.d 作为它的系统初始化系统,文件夹中有很多优雅的纯文本脚本。

  • Init level 5 是运行电子书软件的 “通用” 系统

  • 电子书软件在 /opt/amazon目录,用 Java 编写(我知道要快速复习 Java 了)。

  • Kindle 有一堆有意思的纯文本 “diag” 脚本用来测试。

  • 有一个相当漂亮的 wifid daemon 来管理 Wi-Fi 连接:我从 diag 脚本中找到了与它对话的方法。

  • 用 /usr/sbin/eps 命令(文档见这里)从命令行写入数据到水墨屏。

  • 我没找到可见的 “turn off demo mode” 开关:看样子演示模式是 Java 电子书软件的定制功能。

  • 以下系统服务与不支持的功能或电子书软件有关,或与 Amazon 联系:S50wan S70wand S75phd S81usbnetd S93webreaderd S94browserd S95framework S96boot_finished。

对话 Wifid

你可以用 Kindle 内置的 wifid 连接 Wi-Fi,并管理你的 Wi-Fi 配置文件。对啦,如果你的 Wi-Fi 连接失败,一定要记住许多 Kindle 只支持 2.4Ghz Wi-Fi ????

列出 Wi-Fi 配置文件数量

lipc-get-prop com.lab126.wifid profileCount

显示 Wi-Fi 配置文件

echo "{index=(0)}" | lipc-hash-prop com.lab126.wifid profileData

删除某个 Wi-Fi 配置文件

lipc-set-prop com.lab126.wifid deleteProfile WIFIESSID

创建 Wi-Fi 配置文件

echo '{essid="WIFIESSID", smethod="wpa2", secured="yes", psk="WIFIPSK"}' | lipc-hash-prop com.lab126.wifid createProfile
  • smethod 可以是 open / wep / wpa / wpa2 之一(如果选择 open,请设置 secured 为 “no”)

  • WIFIPSK 是 wpa_passphrase 实用程序(这实际上是在 Kindle 上)生成的 WIFI PSK:一个正常的 “wifi passphrase” 将不起作用。

连接 Wi-Fi 配置文件

lipc-set-prop com.lab126.wifid cmConnect WIFIESSID

显示 Wi-Fi 连接情况

echo "{index = (0)}" | lipc-hash-prop -n com.lab126.wifid currentEssid

修改 Root

下面的许多说明需要更改 Kindle 的根磁盘。但是,默认情况下根磁盘为防止被修改以只读模式挂载。要解决这个问题,在 Kindle 上运行以下命令:

mntroot rw

完成修改后,将其设置为只读模式,以防止任何不必要的更改:

mntroot ro

安装 Dropbear SSH

我想 ssh 到我的 Kindle,所以我要安装 ssh 程序 dropbear。当然,Kindle 是一个基于 ARM 的设备,所以要么我自己编译 dropbear,要么在某个地方找到 dropbear 二进制文件。刚好,Kindle 有一个遗留的  USBNET 漏洞:我自己不直接用这个漏洞,因为我想完全控制这个开发套件,但是我可以从 USBNET 那里借用 dropbear 二进制文件。

不巧的是,USBNET 漏洞是用 Kindle 自有诡异的更新格式发布的,所以我们需要把 USBNET 提取出来:

在你的电脑中:

  • 下载这个 git repo 并编译它——这会让我们解码 Kindle 更新。

  • 在 这里 下载 kindle-usbnetwork-0.57.N-k4.zip,并复制到 KindleTool/Release/

cd KindleTool/Release/
unzip kindle-usbnetwork-0.57.N-k4.zip
./kindletool extract Update_usbnetwork_0.57.N_k4_install.bin usbnet
cd usbnet
tar Jxf usbnet.tar.xz
  • 将 src/usbnet/bin/dropbearmulti 复制到你的 Kindle(我重装它为 USB 设备并复制过来)。

在 Kindle 中:

cd /
mv /mnt/us/dropbearmulti /
chmod a+x /dropbearmulti
ln -sf /dropbear /dropbearmulti
ln -sf /dropbearkey /dropbearmulti
ln -sf /bin/scp /dropbearmulti
/dropbearkey -t rsa /dropbear_rsa_host_key

定制 Kindle

我用下面的方式重命名了所有不需要的系统服务:

cd /etc/rc5.d; mv S95framework DISABLED.S95framework

我在 /etc/rc5.d/S99adq 中添加了自己的初始化脚本来添加自己的定制设置:

#!/bin/sh
NAME="adq"case "$1" instart)# 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 Address: $IP"/usr/sbin/eips 1 2 "Root Password: <MY ROOT PASSWORD>"/usr/sbin/eips ""# connect to wifi and allow ssh inlipc-set-prop com.lab126.wifid cmConnect MYWIFISSIDiptables -A INPUT -i wlan0 -p tcp --dport 22 -j ACCEPT/dropbear -r /dropbear_rsa_host_keymkdir -p /mnt/us/usbnet/etcecho "<MY SSH PUBKEY>" > /mnt/us/usbnet/etc/authorized_keys# expose shell over usbmodprobe -r g_file_storagemodprobe g_serial/sbin/getty -L 115200 ttyGS0 -l /bin/login &;;stop);;*)msg "Usage: /etc/init.d/$NAME {start|stop}" W >&2exit 1;;
esacexit 0
  • 在电子书屏幕的启动页显示一些有用信息

  • 连上 Wi-Fi。

  • 允许通过防火墙  SSH。

  • 运行 dropbear ssh 进程。

  • 在 dropbear 中添加我的 ssh 公钥。

  • 移除 “pretend to be a disk” USB 功能。

  • 通过 USB 连接时,假装为串行设备并给出一个登录提示:如果我通过 USB 插入它并使用 minicom,我就会得到一个登录提示… 嗯,这是为了防止出现问题。

一旦启动,我的 Kindle 就是现在这样,然后我可以作为 root 用户 ssh 连接它。

差不多了:我现在可以 ssh 连 Kindle,如果发生问题,我也有多级别的串行控制台来解决问题。这是一个小巧的、支持无线网、电池供电的水墨屏 Linux 开发系统。

最后的操作,把后盖合上来保护电路。

展望

这个库 (FBInk)看起来可以取代亚马逊的 eip 软件;如果我想把显示器集成到我自己的软件中,FBInk 可能会更好。动手前先买个新的 Kindle 备用吧!

获取更多优质文章,点击关注

????????????

把废弃的Kindle改装成自己的Linux开发平台相关推荐

  1. 废弃二手电池改装成移动电源 虚标容量赚取暴利

    2012年07月02日09:25 来源:IT时报 山寨移动电源偷工减料安全成忧 IT时报记者 尤歆飞 本报日前曾连续刊发<自制品牌手机电池五分钟搞定>.<山寨手机电池暗藏品牌猫腻 垃 ...

  2. 电视看板实现原理_电脑显示器如何改装成电视机?详细改装方法,修电脑师傅告诉你...

    大家好,我是老王.我们每个人家里几乎都有台式电脑,现在是手机时代,不用电脑办公的朋友,很少开电脑了.家里的电脑都落了厚厚一层灰,我们还舍不得把旧电脑扔掉,那么就有人想到一个问题,那就是能不能把旧电脑的 ...

  3. 微软360游戏机改服务器,战斗民族就是干高玩将Xbox 360改装成PC简直改装达人

    随着主流大作逐渐抛弃Xbox 360和PS3,本世代主机也逐渐变成了"上世代",如果你不想让心爱的Xbox 360吃灰,不妨把这台优秀的主机改装一下. 近日一位名叫Draelren ...

  4. 将ubuntu安装在用剩下的硬盘改装成的移动硬盘时遇到的问题及解决办法

    将ubuntu安装在用剩下的硬盘改装成的移动硬盘时遇到的问题及解决办法 参考文章: (1)将ubuntu安装在用剩下的硬盘改装成的移动硬盘时遇到的问题及解决办法 (2)https://www.cnbl ...

  5. Windows改装成Linux,Windows系统改装成Linux系统

    说下背景:上级领导要求的将一台windows系统的电脑改装成Linux系统的电脑.弄了一天半的时间终于弄好了. 下面时操作过程以及自己遇到的一些坑. 一.制作一个启动盘 使用一个大于8G的U盘制作启动 ...

  6. 移动光驱装服务器系统盘,光驱别扔,可以改装成移动光驱用

    原标题:光驱别扔,可以改装成移动光驱用 现在电脑流行加装成2个硬盘,原位变成SSD固态硬盘,光驱位变成机械硬盘,这样,以前的光驱就没有使用价值了,扔了有点可惜.并且,以后还是有机会使用光驱的,安装一下 ...

  7. 无线网卡改打印服务器,怎样将喷墨打印机改装成无线连接

    如何给我的usb接口的打印机改装成通过wifi连接的打印机查看全部3个回答 如何给我的usb接口的打印机改装成通过wifi连接的打印机 我来答 gon360 知道合伙人数码行家 2017-10-03 ...

  8. 惠普linux系统改装win7,惠普HP笔记本预装win8改装成win7系统BIOS设置与安装方法

    市场上很多笔记本电脑预装的都是windows8操作系统,这也让很多用户操作不习惯的地方,相比之下很多用户都想将预装的win8系统改装成win7系统.最近用户在选购惠普HP笔记本电脑也是预装win8系统 ...

  9. 暗盒怎么更换计算机模式,如何将绿米双键墙壁开关改装成三键无线开关模块

    如何将绿米双键墙壁开关改装成三键无线开关模块 2020-01-23 16:24:16 6点赞 16收藏 9评论 背景:拆解绿米双键开关后,在按钮针脚处焊接引出3根线,扔掉外壳并绝缘包扎后就成了可以放在 ...

最新文章

  1. Linux服务器IP下了,linux – DDOS攻击下的服务器 – 如何查找IP?
  2. 达梦数据库卡慢简单分析
  3. 基础数学落后与高端人才流失
  4. Vue+Element+Springboot实现图片上传
  5. 如何导出树结构清晰的代码机构目录
  6. 终于有了自己的域名了
  7. calender获取日期前几月_iOS时间,日期,星期等相关获取
  8. 防止百度网盘和谐/暗中观察我的资源
  9. 关于我在黑马程序员培训毕业后的亲身体验
  10. 嵌入式c学习第一步:dev cpp编译器安装
  11. 安装虚拟机提示未能启用服务器,win7系统共享虚拟机提示VMware Workstation Server共享服务不能启动的解决方法...
  12. python英文日期转数字年月日格式
  13. 《计算机工程》从投稿到录用之一手经验
  14. 【OptiX】第6个示例 折射,玻璃材质
  15. 获取当前日期的上一个月和后三个月。
  16. 三大中值定理及简单例题
  17. 获取Golang环境变量的三种方式
  18. 关于xds100仿真器的ftdi驱动无法使用的问题
  19. MyEclipse6.5注册码
  20. 贝尔宾九种团队角色理论总结(转)

热门文章

  1. 最短路径算法之迪杰斯特拉算法(Dijkstra)和佛洛依德算法(Floyd)
  2. vue中引入高德地图Loca数据可视化
  3. 小议技术领域的精分化——从《找你妹》背后的游戏云聊起
  4. 【Java】微信小程序imgSecCheck接口示例-校验一张图片是否含有违法违规内容
  5. 从脑瘫患者重获交流到免开颅微创,脑机接口更安全了吗?
  6. android怎么自动收起通知栏,Android中如何收起状态栏
  7. word打开文件显示只读,如何对文档进行编辑的解决办法
  8. 网络上如何区分不同计算机,什么是耦合度?按耦合度的不同,如何区分计算机网络和其他计算机系统?...
  9. python制作数据库报表_如何制作数据报表并实现自动化?
  10. 考前考中靠后-三级考试