kindle2 文鎮からの復活最終版

投稿者: | 2012年3月29日

少し前に「ちょっと間違って/usrを壊してしまった」というkindle2を譲ってもらったので
Recovering a formatted or corrupt Kindle 2の手順にて修理した記録です。
kindle2限定ですがシステム領域を壊したり、まっさらにしても復帰できる方法を試すことになったため
せっかくなので書いておきます。どれだけ需要があるのかは謎ですけど。

今回の方法を使うための前提条件

以下のものが必要になります。
・正常に動作するkindle2か、または正常に動いていた時点のrootfsのバックアップ
・u-bootにコマンドを入力したりカーネルを転送するため、シリアルで接続できる環境
・LinuxかMacOSX等、rawデバイスにアクセスできてddの使えるマシン(今回はUbuntu11.04にて実施)

ターゲットの文鎮化程度

何を思ったかssh接続状態で/usrをリネームしたとのこと。
各種コマンドが効かなくなり、強制再起動したらログインもできなくなったということでした。
まぁそうなるでしょうね(^^;

正常イメージのバックアップ

うちのkindle2はしばらく使わないと思って実家に放置してあったのですが、
先日やっと回収してきたのでこれからイメージを抜き出して修理に使います。
この正常に動作するkindle2をjailbreak状態にしてssh接続か、またはシリアルでつないで

#dd if=/dev/mmcblk0p1 of=/mnt/us/rootfs.img bs=1024

これでPCからusbでマウントできる領域にrootfsがdumpできます。
これはいったんPCに保存。あとでこのrootfsを壊れた方に書き込みます。

シリアル接続イメージ

カスタムカーネルの転送とリカバリモードの起動

今回起動できないkindle2も、u-bootまでは壊れていない状態です。
u-bootから Yifan Lu さん(毎度kindleのjailbreakアプリを作っている方)の公開されている
カスタムリカバリカーネルを使ってブートします。
Recovering a formatted or corrupt Kindle 2
以下はシリアルコンソールでの操作。

電源投入直後のuboot起動カウントダウン中に何かキーを押してu-bootに入り、

>run prg_kernel_serial

待ち状態になるので、Ymodemで先ほどのサイトにおいてあるカスタムリカバリカーネルを転送
この手順はたまに転送開始に失敗することがあるようなので、転送が途中で止まって失敗してそうであればCtrl-Cで停止して再度実行。

転送終了後

>bootm 0xa0060000

コマンドを実行すると、書き込んだカーネルでのbootが始まります。
boot後しばらくシリアルコンソールか本体にてEnterを押し続けてといると
リカバリモード(Developer Menu)に入ります。

kindleの画面上では5つしか選択肢はありませんが、コンソール側には9つ表示されます

Developer Menu
====
3. Load MMC0 over USB storage
4. Erase MMC0
I. Initialize Partition Table (fdisk) and format FAT
O. Format and overwrite FAT partition
E. Export FAT partition
U. Update using update*.bin file on FAT partition
M. Update using update*.bin file on FAT partition of second MMC port
D. dmesg / kernel printk ring buffer.
Q. quit
Choose:  10

参照元のサイトでは、ここで”I”を選択してパーティションを初期化していますが、壊れ方の状態がわかっている場合にはここで”I”を選択してパーティションを初期化して書き直すより、まずは”3″を選択して現在の状態をマウントしてみた方が良いかもしれません。
うちで試したときにはそのまま”I”を選択してしまったので中身がすべて消えました…
今回のように、/usrを名前変えた程度であれば別のPCからドライブをマウントして書き換えれば済んだのですがそれは後から気がつきまして(笑

リカバリモードからrootfsを書き込み

ここでタイムアウトする前に”3″を押すとUSB経由でkindleの内部ストレージ全体にアクセスできるようになります。
標準のカーネルでは”3″を押した時点でパスワードを要求されるのですが、カスタムリカバリカーネルでは
これが回避してあります。
ということでUSBでつないだPCからkindleと、中のパーティションが4つ見えるようになるので、第1パーティションを
念のためext3でフォーマットしてから先ほど別の端末からバックアップしたrootfsをddで書き込みます。
今回は/dev/sdfとして認識されたので、ここの1つめということで以下のとおり。

#mkfs.ext3 /dev/sdf1
#dd if=rootfs.img of=/dev/sdf1 bs=1024k

以上の後、再起動すると文鎮から復活しています。

カスタムリカバリカーネルについて

もともとkindleには起動後にenterを押し続けると入れるリカバリモードがあります。
ただ、このモードから内部ストレージにアクセスするためにはパスワードを要求されるため、
このパスワード部分が突破できないと自分で修理するのに標準のリカバリモードは使えませんでした。
この処理を飛ばしたカーネルが今回のカスタムリカバリカーネルだとのことです。
詳細は参照サイトのappendixを参照。
 


 

#これを直したおかげでkindle2はu-bootを壊さなければほぼ復旧できることが確認できたので
 またいろいろやってみるつもりです。
 時間がとれれば……

kindle2 文鎮からの復活最終版」への2件のフィードバック

  1. Tet

    ichinomotoさん
    いつも貴重な情報をありがとうございます。
    appendixサイトのリカバリーカーネルのリンクが切れてしまっています。リンク先の修復依頼をしていますが、気づいてもらえないようです。
    もしichinomotoさんがリカバリーカーネルをお持ちでしたら、公開していただけると幸いです。

    返信
  2. ichinomoto

    確かにリンク切れしてるみたいですね。
    もうkindle2関係は数年触っていませんが、うちにまだ残っているか探してみます。

    返信

コメントを残す

メールアドレスが公開されることはありません。