攻撃は最大の防御なり

50代おやじの適当なブログです。

S-OFFされたSensationにオフィシャルOTAを当てたいんだよー

2011-08-05 10:51:18 | HTC Sensation
俺のSensationはRevolutionaryが発表された後に買った物ですが、
家に届いて一時間も経たない内にS-OFFされてrootedになっていました。

で、翌日位に「アップデートが可能になりました」の通知が・・・
この通知ってpush配信なんですかねぇ?
Androidのバージョンが上がるアップデートじゃないので入れなくて良いと言えばそれまでですが、当てたくなるのが人の世。
でもS-OFFされていると普通の方法じゃ入れられないんですよねー。面倒くさいw

OTAパッケージにはsystem配下をフルワイプして入れる物と、差分パッチを当てる物があります。
今回、俺がいれたのは差分パッチの方ね。
update-scriptを読むと大体こんなシーケンスになっていました。

・入っているROMはアップデート対象のバージョンだよね?
・ブートローダーは変更していないよな?でもsuper CIDの機体だったら許す
・デバイス名はpyramidだよね?
・パッチ対象のファイルは変更していないよね?
・じゃあパッチあてる
・パーミッションも直しちゃおうね
・bootloader,boot,recovery,radio辺りも上書いちゃうよー

チェックの所で引っ掛かるとassertします。
scriptを変更しちゃえば通るけど、出来ればそのまま通したいよね。
俺の場合はbootloaderを変更しているのと、kernel変更に合わせてwifiモジュールを変更している点が引っ掛かりますね。

取り敢えずsuper CIDが設定してファイルを元に戻せば良いことが分かりました。
CIDというのはcountry IDの事で、通常はデバイスのリージョンに合わせた物が設定されています。
これのせいで例えばUK版にはAsia版のROMが入れられないようになっているんですね。
super CIDってのはテスト用にこのリージョン制限が掛からないようにするCIDの事です。

clockworkmod recoveryに入ってadbからCIDを確認してみます。

adb shell mount /system
adb shell /system/bin/getprop ro.cid

結果は空でした。ここでcidを上書いて騙します。

adb shell /system/bin setprop ro.cid 11111111

これでOTAをインストしてやればOK。
もし入れ換えたファイルが引っ掛かる様なら、途中でエラーと共にファイル名が表示されるので入れ換えて再実行しましょう。
これで見事インストが出来ましたが一つ落とし穴があります。
最後の方でrecoveryやらを書き換えるwrite_firmware_imageはclockworkmod recoveryではダミーになっていて実際実行されません。
入れたい人は自分で入れないと駄目です。俺の場合はradioだけ書き換えることにしました。
fastbootから入れるのでadbのカレントにOTAの中のfirmware.zipからradio.imgを抽出しておきます。

adb reboot bootloader
fastboot flash radio radio.img

あっ?fastbootって標準じゃ入っていないんだっけ?ググればすぐ見つかると思います。
このfastbootからのリカバリは覚えておいて損はないです。
例えばOSが起動しなくなってRecoveryにも入れない。bootloaderしか起動出来なくなった時は

fastboot flash radio radio.img
fastboot flash system system.img
fastboot flash boot boot.img
fastboot flash recovery recovery.img

これで復旧出来るでしょう。
各imgの元ネタはclockworkmod recoveryでバックアップしておいたものでも良いですし
最悪はOTAやRUUのrom.zipから抽出したものでも大丈夫です。
実際fastbootからのリカバリの方が使いやすいんだよねw
母艦は容量気にせずにバックアップ保存できるしね。

では、良いAndroidライフを。