HTC JにClockworkmod Recoveryを移植してみた(不具合あり)
連日の試行錯誤と某スレ住民の協力により、とりあえず動作するHTC J用のClockwork Recoveryができた。重大なバグがあるためバイナリうpはなし。試す場合は記事末尾の諸注意を熟読のこと。
移植のおおまかな方針
- ハードウェアの似ているOneS用のCWMをビルド
- Jのリカバリと、OneS用のCWMをマージ
- recovery.fstabの編集
Cyanogenmod for HTC OneSのソースコード取得
Cyanogenmod for HTC One SのBuild 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       emmc            /dev/block/mmcblk0p22 /boot           emmc            /dev/block/mmcblk0p21 /cache          ext4            /dev/block/mmcblk0p37 /data           ext4            /dev/block/mmcblk0p38 /sdcard         vfat            /dev/block/mmcblk1p1 /dev/block/mmcblk1 /internal_sdcard vfat /dev/block/mmcblk0p39 /system         ext4            /dev/block/mmcblk0p36 /misc           emmc            /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非公式移植