這裡要說的是, android recovery image (在 u-boot 裡被載入啟動的那個) 這個東西, 預設是沒有任何 console output, 只有 log, 但它 log 會擺在 ramdisk (/tmp/recovery.log, /tmp 一開始是被掛成 tmpfs) 裡面, 所以如果 recovery 一半遇上什麼天災人禍, 您就什麼都看不到了.
以下這個改法是直接導到 console, console 不存在時再導回檔案. 而這個 code 我只能確定 android 4.3 & 4.4.3 的 recovery code 長這樣, 其它有被怎麼改過的我就不知道不保證.
google AOSP folder bootable/recovery/recovery.cpp
約 921 行
int
main(int argc, char **argv) {
time_t start = time(NULL);
- freopen(TEMPORARY_LOG_FILE, "a", stdout); setbuf(stdout, NULL);
- freopen(TEMPORARY_LOG_FILE, "a", stderr); setbuf(stderr, NULL);
+ {
+ char logf[PROPERTY_VALUE_MAX+6] = "/dev/";
+ property_get("ro.boot.console", logf + 5, TEMPORARY_LOG_FILE);
+ freopen(logf, "a", stdout); setbuf(stdout, NULL);
+ freopen(logf, "a", stderr); setbuf(stderr, NULL);
+ }
這樣就可以看的到 /sbin/recovery 運作時的錯誤訊息, 也可以埋 debug message 在 recovery 裡.
AOSP 裡做過 source build/envsetup.sh 與 lunch 後
make recovery recoveryimage
就可以重編 recovery 這個 binary, 及重做整個 recovery image.
.ps (20150527) android 2.3.4 code 一樣, ro.boot.console 要改成 ro.console
4.0 以上系統正常來講只有 ro.boot.console 沒有 ro.console, 除非特別修改 /system/core/init/init.c 中的內容把 ro.console 補上..
沒有留言:
張貼留言