友快網

導航選單

[譯] turning an old amazon kindle into a eink竅門:舊amazon kindle電子書閱讀器可變廢為寶

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

原文作者:adq

譯者 & 校正: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 歡迎資訊!

很好,這是啟動 uboot 的啟動載入器( bootloader )在啟動 Linux 並要求我登入。

以 root 登入,提示要輸入密碼:Emmm…密碼?從以前的 Kindle 使用經驗中,我知道可以用 Kindle 的序列號生成密碼。然後我找到了 這個網站,它會為一個特定的裝置生成許多可能的密碼:我的 Kindle root 登入密碼是第三個。

為防止網站倒閉,這裡是 Javascript 生成密碼的關鍵片段:

對對,我忘了說我是如何拿到裝置序列號的。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

會得到如下結果:

四個分割槽:三個 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/

src/usbnet/bin/dropbearmulti

複製到你的 Kindle(我重灌它為 USB 裝置並複製過來)。

在 Kindle 中:

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

定製 Kindle

我用下面的方式重新命名了所有不需要的系統服務:

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

我在

/etc/rc5。d/S99adq

中添加了自己的初始化指令碼來新增自己的定製設定:

在電子書螢幕的啟動頁顯示一些有用資訊

連上 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 可能會更好。

最後,歡迎優秀的你加入 HelloGitHub 的「譯文亦舞」系列,讓你的才華舞動起來!把優秀的文章分享給更多的人。

上一篇:oppo這款手機憑藉一張盛世美顏的宇宙摩卡圈粉不少時尚圈達人
下一篇:python無服務框架zappa:一條命令部署python應用程式,輕鬆上線的重要步驟