日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android OTA 升级之三:生成recovery.img

發布時間:2025/4/16 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android OTA 升级之三:生成recovery.img 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android OTA?升級之三:生成recovery.img

作者: 宋立新

Email:zjujoe@yahoo.com

前言

???????得到了ota升級包后,我們就可以用它來升級系統了。Android?手機開機后,會先運行?bootloader。?Bootloader?會根據某些判定條件(比如按某個特殊鍵)決定是否進入?recovery?模式。Recovery?模式會裝載?recovery?分區,?該分區包含recovery.img。recovery.img?包含了標準內核(和boot.img中的內核相同)以及recovery?根文件系統。下面我們看一下它是如何生成的。

?

recovery.img生成過程

L630-L637?依賴關系

(From: build/core/Makefile)

?

630 $(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) / 631???????????????? $(INSTALLED_RAMDISK_TARGET) / 632???????????????? $(INSTALLED_BOOTIMAGE_TARGET) / 633???????????????? $(recovery_binary) / 634???????????????? $(recovery_initrc) $(recovery_kernel) / 635???????????????? $(INSTALLED_2NDBOOTLOADER_TARGET) / 636???????????????? $(recovery_build_prop) $(recovery_resource_deps) / 637???????????????? $(RECOVERY_INSTALL_OTA_KEYS)

?

INSTALLED_RECOVERYIMAGE_TARGET?為我們的編譯目標:

584 INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img

?

它依賴很多其它目標:

1.MKBOOTFS, MINIGZIP, MKBOOTIMG,PC端工具軟件: (From build/core/config.mk) 265 MKBOOTFS := $(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX) 266 MINIGZIP := $(HOST_OUT_EXECUTABLES)/minigzip$(HOST_EXECUTABLE_SUFFIX) 267 MKBOOTIMG := $(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX)

?

2.INSTALLED_RAMDISK_TARGET,標準根文件系統?ramdisk.img:

326 BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img 328 # We just build this directly to the install location. 329 INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET) ? 3.INSTALLED_BOOTIMAGE_TARGET, 即boot.img,標準內核及標準根文件系統: 362 INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img

?

4. recovery_binary, Recovery可執行程序,源碼位于:bootable/recovery

590 recovery_binary := $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery

?

5. recovery_initrc,recovery模式的init.rc,?位于?bootable/recovery/etc/init.rc

586 recovery_initrc := $(call include-path-for, recovery)/etc/init.rc

?

6. recovery_kernel, recovery?模式的kernel,?同標準內核

587 recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery system

?

7.INSTALLED_2NDBOOTLOADER_TARGET,我們不用。

?

8. recovery_build_prop, recovery 模式的build.prop, 同標準模式。 589 recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET)

?

9. recovery_resource_deps,?recovery?模式使用的res,?位于:recovery/custom/{product_name}/res,?以及設備自定義部分(我們沒用到)

591 recovery_resources_common := $(call include-path-for, recovery)/custom/$(TARGET_PRODUCT)/res 592 recovery_resources_private := $(strip $(wildcard $(TARGET_DEVICE_DIR)/recovery/res)) 593 recovery_resource_deps := $(shell find $(recovery_resources_common) 594?? $(recovery_resources_private) -type f) ?

10.??RECOVERY_INSTALL_OTA_KEYS, ota?密鑰:

618 # Generate a file containing the keys that will be read by the 619 # recovery binary. 620 RECOVERY_INSTALL_OTA_KEYS := / 621???????? $(call intermediates-dir-for,PACKAGING,ota_keys)/keys

L638-L655?準備內容

638???????? @echo ----- Making recovery image ------ 639???????? rm -rf $(TARGET_RECOVERY_OUT) 640???????? mkdir -p $(TARGET_RECOVERY_OUT) 641???????? mkdir -p $(TARGET_RECOVERY_ROOT_OUT) 642???????? mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/etc 643???????? mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/tmp

?

準備recovery目錄:out/target/product/{product_name}/recovery?及其子目錄:

./root

./root/etc

./root/tmp

?

644???????? echo Copying baseline ramdisk... 645???????? cp -R $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT) 646???????? echo Modifying ramdisk contents... 647???????? rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res

?

從標準根文件系統拷貝所有文件,?刪除其res?目錄。

? 648???????? cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/ 649???????? cp -f $(recovery_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/ ? 拷貝recovery 模式的核心文件 init.rc 及 recovery ? 650???????? cp -rf $(recovery_resources_common) $(TARGET_RECOVERY_ROOT_OUT)/ 651???????? $(foreach item,$(recovery_resources_private), / 652?????????? cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/) 653???????? cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys ? 拷貝資源文件及密鑰文件。 ? ? 654???????? cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) / 655???????????????? > $(TARGET_RECOVERY_ROOT_OUT)/default.prop ? 生成屬性文件 default.prop, 它包含了標準根文件系統的default.prop (out/target/product/{product_name}/root/default.prop)以及system分區的build.prop (out/target/product/{product_name}/system/build.prop) ?

L656-L661?最終生成recovery.img

656???????? $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk) ? 壓縮recovery根文件系統 ? 657???????? build/quacomm/mkimage $(PRODUCT_OUT)/ramdisk-recovery.img RECOVERY > $(PRODUCT_OUT)/ramdisk_recovery.img ? 加一個標識頭(RECOVERY) ? 658???????? mv $(PRODUCT_OUT)/ramdisk_recovery.img $(PRODUCT_OUT)/ramdisk-recovery.img 659???????? $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) --output $@ 660???????? @echo ----- Made recovery image -------- $@ 661???????? $(hide) $(call assert-max-image-size,$@,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE),raw)

?

和內核一起,生成recovery.img

?

附:Recovery?根文件系統目錄結構

?

$ tree

.

├──?advanced_meta_init.rc

├──?data

├──?default.prop

├──?dev

├──?etc

├──?init

├──?init.factory.rc

├──?init.goldfish.rc

├──?init.quacomm.rc

├──?init.rc

├──?meta_init.rc

├──?proc

├──?res

│???├──?images

│???│???├──?icon_error.png

│???│???├──?icon_installing.png

│???│???├──?indeterminate1.png

│???│???├──?indeterminate2.png

│???│???├──?indeterminate3.png

│???│???├──?indeterminate4.png

│???│???├──?indeterminate5.png

│???│???├──?indeterminate6.png

│???│???├──?progress_empty.png

│???│???└──?progress_fill.png

│???└──?keys

├──?sbin

│???├──?adbd

│???├──?advanced_meta_init

│???├──?meta_init

│???├──?meta_tst

│???└──?recovery

├──?sys

├──?system

└──?tmp

總結

以上是生活随笔為你收集整理的Android OTA 升级之三:生成recovery.img的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。