2011年1月27日 星期四

Android recovery 重點整理

Platform: Omap 4430
Android version: 2.2
因為工作的需求著手研究了一下recovery 但才看到一半,就被交代這要給別人搞。
所以寫一下自己看得重點。

1.原版從Ti 的網站抓 Android 2.2的code,但recovery 的部份只有對Nand Flash erase,但現在工作的是用Sandisk 的emmc ,就是把emmc當一般的file system, ex: ext4 ext3 fat32...
所幸發現google release Android 2.3 的recovery 有支援ext4。

Original sourece code
git clone git://android.git.kernel.org/platform/bootable/recovery.git
copy to mydroid/bootable

2.需要的library
git clone git://android.git.kernel.org/platform/system/extras.git
copy extras/ext4_utils to mydroid/system/extras
NOTE:如果沒有打算partition成ext4,則需要移除recovery source code format ext4部份,並實做ext3 format

3. Build recovery
source env.sh
cd mydroid
make recovery
build 完之後 recovery 再 out/target/product/blaze/system/bin/recovery
NOTE:
3.1 各Platfotm有不一樣的build 不一定相同。
3.2make recoveryimage 可以build 所需要的recovery partition,但目前build會有問題。

4.recovery 所需要的partition 目前已知的
misc <-- save recovery bootloader message,以fwrite/fread 方式 r/w,無partition type,所需要size待研究
cache <-- 存放 recovery command, log intent
sdcard <-- 讀取 updata.zip
data

5.建議規劃partition 方式

normal mode:
boot -> kernel -> mount root -> mount system
ex:
/dev/block/mmcblk1p4 / ext3
/dev/block/mmcblk1p3 system ext3
/dev/block/mmcblk1p8 data ext3
recovery mode:
ex:
boot -> kernel -> mount recovery -> mount system
/dev/block/mmcblk1p5 / ext3
/dev/block/mmcblk1p3 system ext3
/dev/block/mmcblk1p8 data ext3
/dev/block/mmcblk1p6 cache ext3

6. recovery partition 所需要檔案
6.1. copy mydroid/out/target/product/blaze/root
6.2. copy mydroid/bootable/recovery/etc/init.rc
6.3. copy mydroid/bootable/recovery/res
6.4. copy mydroid/out/target/product/blaze/system/bin/recovery /sbin
6.5. 自己產生recovery.fstab in /system/etc
ex:
NOTE:
make recoveryimage若可以build過,應該可以省略自己copy。

7.進入recovery方法,再 u-boot時 按下:
Home key(sw1) + Volume Up(sw2) -> recovery mode (更改開機參數)
Home key(sw1) + Volume Down(sw4) -> fastboot mode(執行fastboot)
NOTE:
7.1.u-boot讀取keypad完成,更改其他keypad可以到u-boot/include/configs/omap4430sdp.h
更改兩個define
#define MIX_KEY_RECOVERY (KEYPAD_SW1 | KEYPAD_SW2)
#define MIX_KEY_FASTBOOT (KEYPAD_SW1 | KEYPAD_SW4)
7.2.因目前partition規劃未確定&Svn未建置好,上述方式還不可使用。
u-boot/common/main.c -> main_loop 內有一段
#if (CONFIG_4430SDP_KEYPAD & CONFIG_RECOVERY)
if (bootmode == 1)
{
printf ("recovery\n");
run_command ("setenv bootargs console=ttyO2,115200n8 root=/dev/
mmcblk1p3 ....", 0); <===待填入正確partition
run_command("boot",0)
}
else
{
printf ("fastboot\n");
run_command ("fastboot", 0);
}
# endif

8.recovery 的 function
8.1.reboot system now
reboot command 可以reboot,但reboot之後無法開機,待TI解決。
8.2.apply update from sdcard
會抓取/sdcard/update.zip 並核對 /res/keys (make recoveryimage時會產生)
8.3.wipe data/factory reset
8.4.wipe cache partition
第三&四項可以成功format ext4
NOTE:
上述是開機到reocvery時會出現的UI供人選擇,有些功能像開機時可以自動update package或者再Android時設定參數再
reboot進入recovery mode都有待驗證。

1 則留言: