我的 Kindle DX 復活了

Posted by TJ Wei on 星期一, 6月 27, 2011 with No comments
自從買了 Kindle DXG 後,使用率一直很高。不過說來也是我不小心,後來發生了一件慘劇。
原本有些小構想,決定要改寫 Kindle 裡面的一些 java 程式。
於是,我將 /opt/amazon 備份了一份成為 /opt/amazon2,然後將使用者介面停止。
一開始的計畫將修改的版本放入 /opt/amazon2 內,然後copy 並修改相關的 script裡面的 path。這樣,我就有一份可以修改的使用這介面,不會影響原本的系統。
由於都是 user mode 的東西,想來應該很安全,即使 script 失敗,最多就是程式終止罷了。
為了怕有些地方 path 沒改到,執行了原本的 /opt/amazon 裡的程式,所以我又將 /opt/amazon 改成 /opt/amazon0,執行 /opt/amazon2 的版本試試看。
結果執行新的 script ,失敗了,這不意外,因為難免會漏掉一些地方沒改到。
意外的是,機器非常迅速的重新開機。
這只能怪我沒有事先注意到這個起始使用這介面的 script 有個當掉會自動重開機的保護機制。由於只是一瞬間的事,我來不及將 /opt/amazon0 改回,所以機器就磚了。
總之,錯在於我過於大意,沒有將 usbnetwork 設為開機自動啟動。
上網搜尋了一下,找到所謂的進入 recovery mode的方式:按住電源 30 秒,然後長按 Home。
然後我就讓他回復了原廠設定。可惜回復原廠設定不包含讓 /opt/amazon 回復。
Recovery mode 可以讓你用 usb 傳入更新檔,然後更新。可惜這個階段的更新檔的格式和普通那種 font hack 之類從使用者介面選單更新的那種不同,update maker 還不支援。
想說送廠維修曠日費時,而且因為是自己 hack 的結果,所以難免有點心虛。所以就想自力救濟。
依照這個網頁的說明,拆解了 kindle 的塑膠頭蓋。沒有 iPad 拆解工具,所以就用一字起,指甲和卡片完成工作。
這張圖的最上端中間,j9 那個區域,有四塊明顯的方形金屬片,用這個區域來連 serial console。所以需要 USB to TTL 裝置,電壓需要 3.3v版本。四個金屬片由左至右分別為,3.3v, TX, RX, GND,所以要依序連上 USB to TTL 端的 3.3v RX TX GND(我其實不太懂,但就我的印像是 TX<->RX)。
理論上來說,應該要焊上去比較牢靠,但是我的銲錫和電烙鐵不知塵封何處,而且我之前只是拿來焊接舞台魔術道具的一些電線,所以其實技術非常糟糕。或者應該要做個像是這樣的接頭,但同樣我也沒有工具。
所以我剪開一條壞掉的網路線,抽出幾條短電線,然後在卡紙上用針穿了四個孔,把導線頭穿過針孔,然後膠帶貼好,用剪刀把導線頭剪齊,作成了這樣的接頭

這樣的接頭當然十分不穩,所以要一隻手用點力去讓導線頭和 kindle 上的金屬板接觸。更不幸的是,由於擺設方向的問題,我必需要用右手做這件事。也就是說,鍵盤、滑鼠、重開 kindle 的動作必須由左手來負責。
經過一點練習後,終於能成功的讓 hyperterm 連到 kindle 的開機畫面。
不過發現 login 時,會問密碼。
網路上搜尋了一下,發現真的要連進 shell ,要使用先進入  uboot 互動環境。
進入的方式是在 reboot 後第一時間按下 enter(也許是任意鍵,不過反正 enter 也是任意鍵)。
按的時間不對的話,會進入 developer mode,那是壞得更嚴重的時候才需要的。
在 uboot 下輸入
uboot> setenv bootargs $(bootargs_base) root=/dev/mmcblk0p1 rw init=/bin/sh
uboot> bootm 0xa0060000
這兩行指令就可以進入 shell 了。當然,由於我只有左手能工作,所以那兩行我是先 copy 起來,讓鬥在 hypterterm 裡面貼上。
經過漫長的努力後,終於看到睽違已久的 #  shell 命令列提示符號,不用再 root ,也不用再 remount ,不過 PATH 沒有設定,所以輸入完整的 /bin/mv 把 /opt/amazon0 改回 /opt/amazon。
然後 shutdown now, reboot 都無效,只好按電源紐重新啟動。其實有點緊張,不過很順利的重新開機。
唯一的遺憾是之前在 recovery mode 時,似乎把下載的藏書以及 font hack 等等都刪除了。不過amazon 的帳號資料還在,所以跟 amazon 買的書都還會在。
Categories: