td2sk の日記

技術メモとかゲームとか

HTC JにClockworkmod Recoveryを移植してみた(不具合あり)

連日の試行錯誤と某スレ住民の協力により、とりあえず動作するHTC J用のClockwork Recoveryができた。重大なバグがあるためバイナリうpはなし。試す場合は記事末尾の諸注意を熟読のこと。

移植のおおまかな方針

  1. ハードウェアの似ているOneS用のCWMをビルド
  2. Jのリカバリと、OneS用のCWMをマージ
  3. recovery.fstabの編集

Cyanogenmod for HTC OneSのソースコード取得

Cyanogenmod for HTC One SBuild from sourceを参考に、Buildの手前まで済ませる。

ビルド

目的は out/target/product/ville/recovery/root/sbinの中身なので、Linuxカーネルのビルドが走り始めたらmakeは中断。

$ . build/envsetup.sh
$ make recovery -j16
# Linuxカーネルのビルドに到達したらCtrl-C
$ make recoveryimage -j16

リカバリの編集

Jから抜き出してきたrecovery.imgを展開し、ramdisk部分を編集する。
展開はsplit-bootimg.plで。ググれば見つかる。
先頭256バイトを切り落とさないとスクリプトがコケるので注意。

以下、recovery.img-ramdiskフォルダ内で

  • mkdir data dev proc sys
  • Jリカバリのinit.rcを (Cyanogenフォルダ)/device/htc/ville/recovery/init.rc で置き換え
  • Jリカバリの/sbin以下を (Cyanogenフォルダ)/out/target/product/ville/recovery/root/sbin/ からコピー
  • Jから吸い出したueventd.rcをJリカバリにコピー
  • default.propを以下のように修正
< ro.secure=1
< ro.allow.mock.location=0
< ro.debuggable=0
< persist.service.adb.enable=0
---
> ro.secure=0
> ro.allow.mock.location=1
> ro.debuggable=1
> persist.service.adb.enable=1
  • /etc/recovery.fstabを以下のように変更
# mount point	fstype		device			[device2]
/recovery &#160; &#160; &#160; emmc &#160; &#160; &#160; &#160; &#160; &#160;/dev/block/mmcblk0p22
/boot &#160; &#160; &#160; &#160; &#160; emmc &#160; &#160; &#160; &#160; &#160; &#160;/dev/block/mmcblk0p21
/cache &#160; &#160; &#160; &#160; &#160;ext4 &#160; &#160; &#160; &#160; &#160; &#160;/dev/block/mmcblk0p37
/data &#160; &#160; &#160; &#160; &#160; ext4 &#160; &#160; &#160; &#160; &#160; &#160;/dev/block/mmcblk0p38
/sdcard &#160; &#160; &#160; &#160; vfat &#160; &#160; &#160; &#160; &#160; &#160;/dev/block/mmcblk1p1	/dev/block/mmcblk1
/internal_sdcard	vfat	/dev/block/mmcblk0p39
/system &#160; &#160; &#160; &#160; ext4 &#160; &#160; &#160; &#160; &#160; &#160;/dev/block/mmcblk0p36
/misc &#160; &#160; &#160; &#160; &#160; emmc &#160; &#160; &#160; &#160; &#160; &#160;/dev/block/mmcblk0p23

再構築

mkbootimgでオプションを正しく指定しないと、起動しないイメージを出力するので注意。

# mkbootfs、mkbootimgは(Cyanogenフォルダ)/out/host/linux-x86/binにある
# ファイル名は適宜変更
cd ..
mkbootfs ./recovery.img-ramdisk | gzip -9 > custom-ramdisk.gz
mkbootimg --kernel recovery.img-kernel --ramdisk custom-ramdisk.gz  --cmdline 'console=ttyHSL0,115200,n8' --base 0x80400000 --ramdiskaddr 0x81800000 -o custom_recovery.img

諸注意

  • リストアすると高級文鎮になる
  • USB経由でSDカードをマウントできない
  • ビルド手順に抜けがあっても文句言わない

参考、協力

CID書き換えによるアンロック手法の開発、実験

HTC One SへのCyanogenmod非公式移植

リカバリの実機テスト
リソース提供
recovery.fstabの修正
各種アドバイス