2012年03月30日

Kindle Fire 6.3でroot化して日本語フォントを利用する

Kindle Fireのファームウェア6.3が近々リリースされますね。
僕は一足先にAmazonのサイトからダウンロードしてroot化にチャレンジしてみました。
環境はUbuntu(正確にはXubuntu)で、このあたりの情報を参考にして。

結論からいうと問題無く出来ました。が、しかし、難易度は過去最高(Ubuntuだから?)でした!

前提条件


これまでの記事も参考にして頂きたいのですが、以下の環境が必要です。

  • Android SDK(platform-tools/adb及びfastbootを利用)
  • twrp(fbmode)
  • su(rootユーザにスイッチする為に必要)
  • Superuser.apk(必須では無い)
Android SDKが古いとfastbootが無いかもしれません。その場合はAndroid SDK ManagerでPlatform-toolsをアップデートして下さいね。
Android SDK以外は僕が使ったバイナリを以下のリンクからダウンロードできるようにしておきました。

 rootkit.zipをダウンロード

それでは行きましょう(自己責任ですよ)!


6.3ファームウェアのダウンロードとインストール


僕は正式リリース前にバージョンアップするので以下のAmazonからファームウェアをダウンロードします。

40

これをUSB経由で接続したKindle Fireのkindlefireupdatesフォルダにコピー。

スクリーンショット - 2012年03月29日 - 16時51分20秒

コピーが終わったらKindle Fireのストレージを解除して、設定画面 > More...を開いて、

38

Deviceを選択すると、ビルド番号でUpdate your Kindleボタン有効になっているのでタッチ。

07

これでアップデートが始まります。

再起動が終われば6.3へのアップデートは終了。

53

この時点で、フォントは中華(CJK)フォント、root権限は無くなってしまいます。


root権限を復活させる


ここからはUbuntuのホームディレクトリの下にあるDownloadsフォルダ内にAndroid SDK(android-sdk-linux/platform-tools)、fbmode、suがある前提でお話します。

まずは、fbmodeをKindle Fireにコピーします。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb push ~/Downloads/fbmode /data/local/fbmode
 3072 KB/s (510876 bytes in 0.162s)

コピーしたfbmodeに実行権限を付与します。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb shell chmod 755 /data/local/fbmode

fbmodeを実行します。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb shell /data/local/fbmode

ここで再起動(USBケーブルは接続したまま)。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb reboot

すると、再起動したKindle Fireが起動ロゴから先に進まなくなります。

写真 12-03-29 16 59 05

焦らずに次のコマンドでtwrpのイメージを指定します。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/fastboot -i 0x1949 boot ~/Downloads/twrp-blaze-2.0.0RC0.img 
 downloading 'boot.img'...
 OKAY [  2.712s]
 booting...
 OKAY [  0.003s]
 finished. total time: 2.716s

すると、Kindle Fireには次のような画面が現れます。

写真 12-03-29 17 34 14
 
よくわかりませんが、Rebootボタンをタッチ。すると、再起動が始まり、次の画面が現れます。

写真 12-03-29 17 37 36

画面下には”press power button for recovery”との表示。
参考にしたサイト通り、ここで次のコマンドを実行。

xubuntu $  ~/Downloads/android-sdk-linux/platform-tools/fastboot oem idme bootmode 5002 
 < waiting for device >

次に進むはずが・・・何も起こりません・・・ずーとwaiting for deviceのまま。。。遂に文鎮化???

折角だから習字道具を買いに出ようとKindle Fireの電源を落とし、ケーブルを抜き差ししたところ電源がオンになり同じ画面が表示されるので、念の為、OS側の機器認識状態を確認してみることに。

lsusbコマンドでUbutnu側のUSB認識状態を確認すると、

$ sudo lsusb 
 [sudo] password for netbuffalo: 
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
 Bus 002 Device 002: ID 045e:007d Microsoft Corp. Notebook Optical Mouse
 Bus 001 Device 006: ID 18d1:0100 Google Inc. 

ありゃ?、OS側では本来のKindle FireのベンダーID(1949:006 Lab126)では無く18d1(Google Inc)として認識しています。
これが原因でAndroid SDK(fastboot)がKindle Fireを認識しなくなったようですが、全てのKindle Fireに起こるとは限らないようです(僕の場合はAndroidマーケットなどもインストールしているから??)。

ということで僕のUbuntuでは次の2つの作業をします。

xubuntu $ sudo vi /etc/udev/rules.d/51-android.rules
 SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"
 ※1949を18d1に変更。
 ※このファイルの意味がわからない人はこちらのページをどうぞ。
 ※viが苦手な人はgeditでどうぞ。

変更したら次のコマンドでudevデーモンを再起動。

xubuntu $ sudo /etc/init.d/udev restart

Android SDKのUSBドライバ設定ファイルを変更しておきます。

xubuntu $ vi ~/.android/adb_usb.ini
 0x1949
 ※0x1949を0x18d1に変更。
 ※Windowsの方は”ファイル名を指定して実行”から”%USERPROFILE%\.android”と入力するとadb_usb.iniが見つかるかと思います。

  21

2つのファイルを書き換えたら、adbコマンドでサーバーを再起動。

xubuntu $  ~/Downloads/android-sdk-linux/platform-tools/adb kill-server
xubuntu $  ~/Downloads/android-sdk-linux/platform-tools/adb start-server

さあ、もう一度fastbootを実行してみます。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/fastboot oem idme bootmode 5002
 OKAY [  0.202s]
 finished. total time: 0.202s
 
認識しましたね。一度、再起動します。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/fastboot reboot
 rebooting...
 finished. total time: 0.001s

するとTWRPの画面が表示されるようになります。
中央寄せ
device-2012-03-30-120111

TWRPはほうっておいて、引き続きadbで作業します。

xubuntu $  ~/Downloads/android-sdk-linux/platform-tools
/adb shell mount system
 error: device not found
 
ぎゃー、また予定している手順通りにならない。。。

もしやと思い、もう一度lsudbコマンドでUSB機器の認識状態を確認すると、

xubuntu $ sudo lsusb
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
 Bus 002 Device 002: ID 045e:007d Microsoft Corp. Notebook Optical Mouse
 Bus 001 Device 010: ID 1949:0006 Lab126 

今度は正しいベンダーID(1949)に戻ってます。
という事で、先程と同じ手順で18d1を1949に戻しますが、adb start-serverする時にはsudoを付けて下さい。

$ sudo ~/Downloads/android-sdk-linux/platform-tools/adb start-server
 * daemon not running. starting it now on port 5037 *
 * daemon started successfully *

sudoを付けないと、機器のIDが正しく表示されなくなります。devicesの表示がこんなだとNGです。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb devices
 List of devices attached 
 ???????????? no permissions

ここまで出来たらあとは迷うポイントは無くなります。
systemパーティションをマウントして、

xubuntu $ sudo ~/Downloads/android-sdk-linux/platform-tools/adb shell mount system

用意しておいたsuファイルをコピー

xubuntu $  ~/Downloads/android-sdk-linux/platform-tools/adb push ~/Downloads/su /system/xbin/su
1656 KB/s (22364 bytes in 0.013s)

コピーしたsuファイルの所有者を変更。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb shell chown 0.0 /system/xbin/su

コピーしたsuファイルの実行権限を変更。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools
/adb shell chmod 06755 /system/xbin/su 

6.3で新たにインストールされたrootチェック用ファイルを無効にします。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb shell mv /system/bin/check_rooted /system/bin/check_rooted.bak

fastbootで設定した起動モードを変更して、再起動。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb shell idme bootmode 4000
 <idme> write 4000 to offset 0x1000
xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb reboot

起動するとあの黄色い三角マーク(yellow triangle)が表示されますが、しばらくするとKindle Fireの起動モードになります。

Superuser.apkを持っている人は起動後にadbからインストールできます。

xubuntu $ /path/to/adb install /path/to/Superuser.apk

これでroot化は完了。Windowsの方はこんなにハマらないかもしれませんね。


日本語フォントをインストール


これは基本的な手順は過去の記事と同じですが、以前のように直接/system/fontsにコピーしない点が違います。

NETBUFFALO:Kindle Fireで日本語フォントを使う


まずは、用意しておいたIPAフォントをKindle Fireの/data/localにDroidSansJapanese.ttfとしてコピー。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb push ~/Downloads/ipaexg.ttf  /data/local/DroidSansJapanese.ttf

次はadbでrootになれるか確認してみましょう。

xubuntu $ ~/Downloads/android-sdk-linux/platform-tools/adb shell
 $ su
 #

"#"が出たのでroot化は成功していますね。

続いて次のコマンドで/systemパーティションを書き込み可能な状態にします。

# mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system

直接push出来無いのでddコマンドで/system/fontsフォルダにコピーします。

# dd if=/data/local/DroidSansJapanese.ttf of=/system/fonts/DroidSansJapanese.ttf
 11763+1 records in
 11763+1 records out
 6022748 bytes transferred in 0.421 secs (14305814 bytes/sec)
 
読み取れるようにフォント・ファイルの権限を変更して、再起動。

# chmod 644 /system/fonts/DroidSansJapanese.ttf
# reboot

こちらがフォント変更前(6.3標準の状態)。

20

日本語フォントだとこうなります。

27


ふう、6.3のroot化は今までで一番大変でした。






Posted by netbuffalo at 14:01│Comments(8)TrackBack(0)


この記事へのトラックバックURL

この記事へのコメント
エイパパと申します
いつもブログ拝見しています。
ご指導を、お願いしたい件がありコメントします

実はKindle Fireでrootを取りTWRPを導入後、私のミスで
Kindle Fireのデータを消去してしまいました

現在はTWRPは立ち上がりますがリストアのファイルもなく
リストア出来ない状態です
本体をマウントすると「TWRP」フォルダ(空の)が有るだけです

この状況から本体の復旧は可能でしょうか?
ご指導よろしくお願いいたします。
Posted by エイパパ at 2012年04月11日 10:11
エイババさん、
それは悲しい状況ですね
確認してみますが、Kindleの中には無くともPC等の外部機器にバックアップのコピーはあるでしょうか?
Posted by netbuffalo at 2012年04月11日 10:43
エイパパです

「Amazon Software」をダウンロードし、zipへリネーム、
TWRPでflashをしてKindle Fireを復旧させました
ROOTやTWRPは再度導入が必要ですが復旧出来ほっとしています

次回からはしっかりリストアファイルも保管します

最低限TWRPが機能していたおかげです!
Posted by エイパパ at 2012年04月11日 13:18
エイパパさん、

良かったですね。
起動しなくなったときの絶望感、藁をも掴む気持ちよくわかります!
TWRPは万能ですね。
ちなみにダンロードされたAmazon Softwareとはupdate-kindle-6.3_D01E_4019920.binでしょうか?
後学のためにブログを見られていたら教えて頂きたく。
Posted by netbuffalo at 2012年04月11日 13:26
ありがとうございます!

そうです、
Amazon Software「update-kindle-6.3_D01E_4019920.bin」を
ダウンロードしてzipにリネームしました

「TWRP」でPCにマウントし上記zipをコピー
TWRPでflashです

まさしくTWRPは万能です!
Posted by エイパパ at 2012年04月11日 13:48
エイババさん、

早速のご連絡、ありがとうございます。
なるほどー、amazon標準のbinファイルをzip化->flashで元に戻るのですね!参考になりました。
自分も失敗した場合に試してみます。

今後ともよろしくお願いします。
Posted by netbuffalo at 2012年04月11日 14:03
こちらこそ、これからもよろしくお願いします。
ブログも拝見させていただきます

ちなみに私のハンドルネールは「eipapa=エイパパ」です

Posted by エイパパ at 2012年04月11日 14:11
エイパパさん、

すみません!
老眼(?)が始まっているのか読み間違えてしてしまいました。
Kindle Fire仲間が増えてよかったです。
Posted by netbuffalo at 2012年04月11日 14:19

コメントする

名前
 
  絵文字