
Arrows We2 (FCG02)の FastbootROMを作る
これは解説記事ではありません。
僕がfastbootROMを作った手順を書き起こしただけなので、他の端末でも同じようにすれば出来るという一般化したものではありません。
あくまでも"参考"として読んでください。
BootLoaderのアンロック
開発者オプションを出してOEMロック解除をオンにする
adb reboot bootloader
fastboot flashing unlock
本体側でYES
DSUでbootの抜き出し
DSUを使ってboot/init_bootを抜いてくる
adb shell
su
cd /dev/block/by-name/
for file in ; do
if [[ "${file}" = boot || "${file}" = init_boot* ]]; then dd if="${file}" of=/sdcard/Download/"${file}".img ; else continue ; fi
done
Downloadフォルダ内にboot,init_bootのダンプが作られるのでPC等にコピー
DSUではダンプできない領域があったりするので注意する
StockROMに戻ってフルダンプ
ダンプしたboot/init_bootにMagiskパッチを当て焼く
(事前にA/Bの確認をしておくこと)
StockROMを起動した状態でフルダンプ
adb shell
su
cd /dev/block/by-name/
for file in ; do
if [[ "${file}" = cache || "${file}" = userdata* || "${file}" = sd* ]]; then continue ; else dd if="${file}" of=/sdcard/Download/"${file}".img ; fi
done
boot/init_bootは最初にDSUでダンプしたものに差し替えること
必要なイメージをピックアップ
fastbootROMでよく使われるimageは以下
(これが全てでは無いし不要なこともある)
abl.img
aop.img
aop_config
audio_dsp.img
bluetooth.img
boot.img
cust.img
dpm.img
dtbo.img
gpued.img
gz.img
init_boot.img
lk.img
logo.img
metadata.img
mcupm.img
md1img.img
misc.img
modem.img
pi_img.img
qupfw.img
scp.img
spmfw.img
sspm.img
tee.img
uefisecapp.img
uefi.img
vbmeta.img
vbmeta_system.img
vbmeta_vendor.img
vcp.img
vendor_boot.img
xbl.img
xbl_config.img
super.img
(userdata.img)
preloader_raw.img
rescue.img
recovery.img
同じチップやメーカーのFastbootROMがある場合は参考にして必要になりそうなimageを取捨選択していく
今回はOTAファイルがあったのでOTAで更新されている領域を中心に要不要の判断をした
NVdataやNVramなど固有情報を含むimageは絶対にfastbootROMに含めないこと
(通常不要なimage群)
???_para.img, ???log.img, nv???.img, persist.img, ???info.img, protect.img, sda.img, sdb.img, sdc.img, sec1.img, seccfg.img, userdata.img
その他、ダミーファイル(ハッシュが同値)
batの作成
まずは別機種が接続されていた場合にbatを強制終了させるためにcodenameの確認をさせる(xiaomi.euから拝借)
この機種のcodenameは"yamato"なのでyamato以外の端末が接続されている場合はbatが強制終了する
@echo off
echo Waiting for device...
set device=unknown
for /f "tokens=2" %%D in ('fastboot getvar product 2^>^&1 ^| findstr /l /b /c:"product:"') do set device=%%D
if "%device%" neq "yamato" echo This package is for "yamato" devices; this is a "%device%". & exit /B 1
続いてexpdbとmetadataをeraseする
ここが残っているとリカバリからの初期化に失敗する原因になる
また、A/B機種の場合はcurrent-slotをaにセットしておく
fastboot set_active a
fastboot erase expdb
fastboot erase metadata
あとはimageを焼いていくだけ
機種によって_abだったり_a,_bだったりA/Bがなかったりするのであらかじめパーティションの確認しておく
fastboot flash boot_a image/boot.img
fastboot flash boot_b imege/boot.img
fastboot flash dpm_a image/dpm.img
fastboot flash dpm_b image/dpm.img
.......
....
..
preloader_raw等、fastbootDでしか焼けない領域がある場合はfastbootDに移行して焼く
fastboot reboot fastboot
fastboot flash preloader_raw_a image/preloader_raw.img
fastboot flash preloader_raw_b image/preloader_raw.img
すべての領域が焼けたらRecoveryへ移行し、wipeする
fastboot reboot recovery
ここまででbatの記述は完了
実際には一発で成功しないので実行確認をしながら調整していく
また、場合によって処理の順番を適切に入れ替えること
ちなみに今回作った例は最後に載せています。
batの実行確認
batを実行してRecoveryに移行し、Wipe Data後、起動すればbatは完成です
問題が発生した場合は記述を訂正したり、焼く領域を再度考え直して修正していきます。
環境によってflashが失敗することもあるので、公開する場合はadb.exeやfastboot.exeを同梱したほうがよいです。
アップデートの場合
アップデートの場合は以下を削除してください
リカバリでのwipeも不要です
fastboot erase expdb
fastboot erase metadata
参考
@echo off
echo Waiting for device...
set device=unknown
for /f "tokens=2" %%D in ('fastboot getvar product 2^>^&1 ^| findstr /l /b /c:"product:"') do set device=%%D
if "%device%" neq "yamato" echo This package is for "yamato" devices; this is a "%device%". & exit /B 1
fastboot erase expdb
fastboot erase metadata
fastboot flash boot_a image/boot.img
fastboot flash boot_b image/boot.img
fastboot flash dpm_a image/dpm.img
fastboot flash dpm_b image/dpm.img
fastboot flash dtbo_a image/dtbo.img
fastboot flash dtbo_b image/dtbo.img
fastboot flash efuse image/efuse.img
fastboot flash frp image/frp.img
fastboot flash gpueb_a image/gpueb.img
fastboot flash gpueb_b image/gpueb.img
fastboot flash gz_a image/gz.img
fastboot flash gz_b image/gz.img
fastboot flash lk_a image/lk.img
fastboot flash lk_b image/lk.img
fastboot flash logo image/logo.img
fastboot flash metadata image/metadata.img
fastboot flash mcupm_a image/mcupm.img
fastboot flash mcupm_b image/mcupm.img
fastboot flash md1img_a image/md1img.img
fastboot flash md1img_b image/md1img.img
fastboot flash misc image/misc.img
fastboot flash pi_img_a image/pi_img.img
fastboot flash pi_img_b image/pi_img.img
fastboot flash scp_a image/scp.img
fastboot flash scp_b image/scp.img
fastboot flash spmfw_a image/spmfw.img
fastboot flash spmfw_b image/spmfw.img
fastboot flash sspm_a image/sspm.img
fastboot flash sspm_b image/sspm.img
fastboot flash super image/super.img
fastboot flash tee_a image/tee.img
fastboot flash tee_b image/tee.img
fastboot flash vbmeta_a image/vbmeta.img
fastboot flash vbmeta_b image/vbmeta.img
fastboot flash vbmeta_system_a image/vbmeta_system.img
fastboot flash vbmeta_system_b image/vbmeta_system.img
fastboot flash vbmeta_vendor_a image/vbmeta_vendor.img
fastboot flash vbmeta_vendor_b image/vbmeta_vendor.img
fastboot flash vcp_a image/vcp.img
fastboot flash vcp_b image/vcp.img
fastboot flash vendor_boot_a image/vendor_boot.img
fastboot flash vendor_boot_b image/vendor_boot.img
fastboot set_active a
fastboot reboot fastboot
fastboot flash preloader_raw_a image/preloader_raw.img
fastboot flash preloader_raw_b image/preloader_raw.img
fastboot reboot recovery
@echo off
echo complete!
echo WIPE DATA in Recovery
echo Press any key to exit...
pause >nul