Tag: romdev


How to get recovery.img?

大部分的 Android 手機可以透過 dd 把 recovery partition dump 出來,比如 PadFone S 可以使用

dd if=/dev/block/platform/msm_sdcc.1/by-name/recovery of=/sdcard/recovery.img

取得 recovery.img。

但像 ZenFone 這種放在隱藏 partition 的該怎麼提取呢?其實可以透過 OTA package 或者原廠 ROM 的幾個檔案還原。

一般來說 recovery.img 不一定會完整包含在 OTA package,因為他的內容與 boot.img 相似,通常只差幾個小檔案,所以廠商大多透過 patch 的方式在升級後寫入新的 recovery。我們可以從 OTA package (或者 ROM) 裡面找到 boot.imgrecovery/etc/install-recovery.shrecovery/recovery-from-boot.p,這幾個便是主要產生 recovery 的檔案,透過對 boot.img 的 patch 可以讓 OTA package 省去不少空間。那我們要如何從這兩個檔案與 boot.img 還原 recovery.img 呢?Android 提供了一個工具叫 applypatch,參數如下:

applypatch     

origin_image_name 就是準備拿來 patch 的基礎檔案 boot.img,target_image_name 自然是我們想要的 recovery.img,而 target_image_sha1 為 recovery 的 SHA1 值,target_image_size 為 recovery 的大小 (bytes),patch_image_name 即是 recovery-from-boot.p 這份修補檔,而 patch_sha1 就是修補檔的 SHA1 值。而這些數值其實都可以在 install-recovery.sh 裡面找到,以 ZenFone 5 1.17.40.16 WW 版為例:

#!/system/bin/sh
update_recovery --check-sha1 0d46024fcdba65dc82ca5fb568eccf36885de815 \
                --src-sha1 d8d2bbfd8dd3eaa648073876a229ac030ebdc802 \
                --tgt-sha1 7cf95a376c8d8b0f47a9bd9062851161fac657d2 \
                --tgt-size 11332608 \
                --patch /system/recovery-from-boot.p

其中 tgt-sha1 為 recovery.img 的 SHA1,tgt-size 為 recovery.img 的大小,而 src-sha1 為 recovery-from-boot.p 的 SHA1,因此我們可以得到產生 ZenFone 5 1.17.40.16 WW 版的 recovery 命令為:

applypatch boot.img recovery.img 7cf95a376c8d8b0f47a9bd9062851161fac657d2 11332608 d8d2bbfd8dd3eaa648073876a229ac030ebdc802:recovery-from-boot.p

所以如果我們把 boot.img,recovery-from-boot.p 放在同個目錄下,那麼我們可以把手機接上,輸入下面的指令取得 recovery.img:

adb push boot.img /data/local/tmp
adb push recovery-from-boot.p /data/local/tmp
adb shell 'cd /data/local/tmp; applypatch boot.img recovery.img 7cf95a376c8d8b0f47a9bd9062851161fac657d2 11332608 d8d2bbfd8dd3eaa648073876a229ac030ebdc802:recovery-from-boot.p'
adb pull /data/local/tmp/recovery.img

至於拿出 recovery.img 可以幹嘛?切換不同區域的 ROM 或者在某些緊急狀況下可以還原原廠的 ROM。

CWM Recovery for ZenFone 5 (POC)

警告:這篇是給 DEV 參考用,如果沒有相關基礎知識,使用後手機無法開機,本人不會幫忙解決。
雖然說手機尚未 unlock,隱藏的 partition 也無法透過 dd 寫入,但很久以前用過 Xperia Mini Pro 也是類似的狀況,但 XDA 的大神們還是想辦法搞了個 CWM recovery,理論上 ZenFone 也可以透過同樣的方式使用 CWM Recovery,所以花了點時間做個 POC (Prove of concept)。

檔案在這:zenfone_5_cwm_installer.zip,另外有 zenfone_5_cwm_update.zip,可以在刷入原廠 ROM 之後再把這個 POC 刷回去,或者參考打包用。原始檔案我都放在 github:https://github.com/shakalaca/zenfone_5_cwm

先決條件:
- 手機有 root
- 電腦有裝 adb
安裝方式:
- 解開 zenfone_5_cwm_installer.zip
- 執行 install.bat
使用方式:
- 開機時注意手機上面的指示燈,當紅燈亮起時,按一下音量大或小,沒意外就可以看到 CWM recovery 的選單了
- 目前使用的版本為 6.0.2.8,這是從 Samsung Galaxy Tab 3 (P5210) 的 CWM Recovery 抓來的版本
操作上會有點 lag,太大的檔案也無法 apply,不過因為是 POC 也就不用太強求了,有興趣的可以想想看怎麼讓它變得可用。:)

TWRP recovery 2.7.1.1 for PadFone S

檔案在這:asus_t00n_twrp_2_7_1_1.img
手機得先 root,在 shell 把映像檔寫入

dd if=asus_t00n_twrp_2_7_1_1.img of=/dev/block/platform/msm_sdcc.1/by-name/recovery

接著重開至 recovery,重開機後,當 ASUS logo 消失時等 60 秒左右,再按一下 power 按鈕,就可以看到 TWRP 選單囉。我目前還沒有驗證所有功能,有空再來試試看,請有興趣的記得先備份好手機資料。

Parameters for packing boot.img for PadFone S

筆記一下,這邊是直接拆開原始的 recovery.img 後修改 ramdisk 再打包:
$MKBOOTIMG --base 0 \
--kernel recovery.img-zImage \
--ramdisk recovery.img-ramdisk.gz \
--cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3 UNLOCKED=Y’ \
--pagesize 2048 \
--ramdisk_offset 0x02500000 \
--dt recovery.img-dt \
-o new-recovery.img
cmdline 後面的 UNLOCKED=Y 加上去後再配合 default.prop 塞 service.adb.root=1 才可以讓 adb shell 進去時為 root 權限。