我希望获得一个eink屏幕以用于将来的项目。我买了一只带树莓派“帽子”的小鹿。但是,后来我意识到,我也许可以重新使用旧的Amazon Kindle电子书阅读器。
很久以前,我就迷上了Kindle:我将Infocom解释器和Manga阅读器移植到了它。我设法获得了亚马逊自己的软件,将其加载为“ Kindlets”,并显示它们已集成到其电子书阅读器中。但是,现在我只想要一个便宜的,基于Linux的eink开发平台。
因此,我去了ebay!我看到了很多标有“ AMAZON封锁”的便宜货。我决定不参加这些活动,因为从理论上讲它们可能已被盗。最后,我花了7英镑买了Kindle 4“非接触式”。
几天后,它出现了。我发现了为什么它这么便宜:它陷入了某种无法实现的演示模式:
我进行了一些谷歌搜索,尽管似乎后来的Kindle版本可以取消演示模式,但该版本似乎无用。我其实并不在乎;我不想在此上运行原始的Kindle电子书软件。
因此,下一步就是获得访问权限。浏览mobileread论坛显示它具有调试串行端口:是时候打开外壳了!
这有点棘手!它周围有多个夹子,并且将表壳粘在电池盒上,因此需要明智地使用大刀来说服它放开。我用一些丙酮清洗了胶水。
像往常一样,串行端口缺少其插槽,因此我们需要焊接到板上的微小触点上。我喜欢用〜0.2mm的绕线机来做这种事情,而表面安装返修位用于烙铁:
我不想留下任何电线,但我也知道在某个时候我会搞砸并且需要访问串行端口控制台,因此我想出了一个解决方案并附加了它:
我将一块Veroboard胶粘在点燃的PCB上,然后将细小的PCB触点的绕线导线焊接到一端。最后,我在另一端焊接了一个更大的,更常规的“ Dupont”电缆插座,这样我就可以轻松地进行连接和拆卸。哦,Kindle PCB上的顶部电缆是0v / GND,其他电缆是TX和RX(我忘记了这两个的顺序)。
最后的障碍:kindle串行端口以1.8v运行,因此我需要一个支持以下内容的串行端口适配器:
我买的是5v。 3.3v,2.5v和1.8v:非常漂亮!
接下来,我将串行适配器连接到笔记本电脑,运行minicom串行端口软件,然后重新启动Kindle。然后,一旦(不可避免地)交换了TX和RX导线,我就被这个招呼了!
U-Boot 2009.08-lab126(2012年8月29日-12:55:24)CPU:飞思卡尔i.MX50系列1.1V at 800 MHzmx50 pll1:800MHzmx50 pll2:400MHzmx50 pll3:216MHzipg时钟:每个时钟50000000Hzipg:50000000Hzuart时钟:24000000Hzahb时钟: 100000000Hzaxi_a时钟:400000000Hzaxi_b时钟:200000000Hzweim_clock:100000000Hzddr时钟:800000000Hzesdhc1时钟:80000000Hzesdhc2时钟:80000000Hzesdhc3时钟:80000000Hzesdhc4时钟:80000000HzMMC:FSL_ESDHC:0,FSL_ESDHCN:003Board:TequilaP:30Board:TquilaP:30: MDDR存储器ZQ校准完成:0x128 = 0xfffe0010 0x12C = 0xffffffffDRAM:256 MBUs在默认环境中输入:serialOut:logbuffErr:logbuffQuick Memory Test 0x70000000,0x10000000POST在13 ms内完成按下任何键以停止自动启动:0 ##从旧版映像启动内核,代码为70800000 ...映像名称:Linux-2.6.31-rt11-lab126映像类型:ARM Linux内核映像(未压缩)数据大小:4777568字节= 4.6 MB加载地址:70008000 Entry Po int:70008000正在验证校验和...确定正在加载内核图像...确定OK正在启动内核... [snip]欢迎使用Kindle!kindle登录:
太好了,因此可以启动uboot引导程序,然后引导至linux并要求我登录。
尝试以root用户身份登录会提示输入密码:嗯……但是,我从以前的Kindle资料中已经知道可以从序列号生成密码。我发现该网站为特定设备生成了许多可能的密码:排在第三位的是我的。
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);
哦:我忘了提起我如何提取设备的序列号。好吧,将其插入USB并不能真正“起作用”:您无法将这些演示设备安装为磁盘。但是,在Linux下,它仍会在linux的dmesg输出中输出序列号(您也可以在uboot中使用printenv来获取序列号,如果在显示“单击任何键以停止自动引导”时按Enter,也可以使用该序列号):
[128033.676587] usb 1-2:使用xhci_hcd的新高速USB设备编号51 [128033.829631] usb 1-2:找到新的USB设备,idVendor = 1949,idProduct = 0004,bcdDevice = 1.00 [128033.829638] usb 1-2:新的USB设备字符串:Mfr = 1,Product = 2,SerialNumber = 3 [128033.829642] usb 1-2:产品:Amazon Kindle [128033.829645] usb 1-2:制造商:Amazon [128033.829648] usb 1-2:序列号:XXXXXXXXXXXXXXXX
凉!我们有root用户,可以登录!现在来弄清楚如何使其变得更容易些。
单位= 64 * 512的柱面数= 512 = 32768字节设备引导起始端块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
第一个磁盘非常远地开始进入磁盘:原来内核存储在该“丢失”区域中。
进一步显示分区1是正常系统,2是诊断工具分区,3是用于存储kindle的内部私有状态(例如wifi密码)。最后,当您通过USB插入kindle时,您会看到4:您的书本所在的位置。
我使用dd将磁盘的开头和分区1-3转储到了/ mnt / us上(如果可以的话,我希望拍摄完整的原始映像,以便在出现问题时可以将其还原):
尽管此Kindle并未显示USB上的磁盘,但由于我具有root用户,因此我可以简单地做到这一点:
然后,我可以在笔记本电脑上安装各个分区。我将所有文件都提取到一个文件夹中,以便可以在它们周围戳戳并轻松grep它们。我想通了:
它使用rc.d作为其系统初始化系统,因此有很多不错的纯文本脚本。
电子书软件位于/ opt / amazon中,并且位于Java中(我已经知道这一点,但是需要快速复习)。
有大量有趣的纯文本“诊断”脚本用于测试。 有一个相当漂亮的wifid守护进程用于管理wifi连接:我从diag脚本中了解了如何与之对话。 您可以使用/ usr / sbin / eips命令(此处为文档)从命令行写入eink屏幕。 我找不到明显的“关闭演示模式”开关:演示模式似乎是Java电子书软件的定制版本。 以下系统服务与不支持的功能或电子书软件有关,或与Amazon联系:S50wan S70wand S75phd S81usbnetd S93webreaderd S94browserd S95framework S96boot_finished。 您可以使用内置的wifid连接到wifi并管理您的wifi配置文件。 哦,也,请记住,当您想知道为什么它不起作用时,许多Kindle仅支持2.4Ghz wifi😉 该方法可以是open,wep,wpa,wpa2之一(如果选择open,则将其设置为“ no”)
WIFIPSK是使用wpa_passphrase实用程序(实际上是在kindle上)生成的WIFI PSK:正常的“ wifi密码”将不起作用。
以下许多说明需要更改kindle上的根磁盘。但是,默认情况下,它以只读模式安装,从而防止修改。要解决此问题,请在kindle上运行以下命令:
我希望能够通过ssh进入自己的kindle,因此我需要安装dropbear ssh守护程序。当然,这是基于ARM的设备,因此我要么自己编译它,要么在某个地方找到它。幸运的是,kindle一直保持着USBNET hack:我选择不自己使用该hack,因为我想完全控制此开发箱,但我仍然可以从中借用dropbear二进制文件。
不幸的是,USBNET以Kindle自身怪异的更新格式提供,因此我们需要从中提取它:
将src / usbnet / bin / dropbearmulti复制到您的Kindle(我将其重新安装为USB设备并复制了)。
#!/ bin / shNAME =" adq"案例" $ 1"在开始)#显示一些东西! / usr / sbin / eips -c 20 20" HELLO ADQ" IP =`ifconfig wlan0 | awk&#39 / t addr:/ {gsub(/.*:/, 34;",$ 2); print $ 2}'`/ usr / sbin / eips 1 1&#34 ; IP地址:$ IP" / usr / sbin / eips 1 2"根密码:< MY ROOT PASSWORD>" / usr / sbin / eips"" #连接wifi并在lipc-set-prop com.lab126.wifid cm中允许ssh连接MYWIFISSID iptables -A INPUT -i wlan0 -p tcp --dport 22 -j ACCEPT / dropbear -r / dropbear_rsa_host_key mkdir -p / mnt / us / usbnet / etc echo"< MY SSH PUBKEY>" > / mnt / us / usbnet / etc / authorized_keys#在USB上暴露外壳modprobe -r g_file_storage modprobe g_serial / sbin / getty -L 115200 ttyGS0 -l / bin / login& ;;停) ;; *)msg"用法:/etc/init.d/$NAME {start | stop}" W& 2出口1 ;; acexitit 0
通过USB将其设置为“假装为串行设备”并给出登录提示:如果我通过USB插入并使用minicom,则会收到登录提示……以防万一出问题。
在启动时,我的kindle现在看起来像这样,我可以以root用户身份进入它。 差不多就完成了:现在,我可以进入kindle了,并且有多个级别的串行控制台,可以在出现问题时/在进入时使用。 它是一个由wifi供电,电池供电,电子墨水linux开发系统的小巧精巧的系统。 最后的调整是从后盖上取下一些夹子,然后再将其夹子夹回去以保护电路。 这个库(FBInk)看起来可以代替Amazon eips软件; 如果我想将显示器集成到自己的软件中,可能会更好。