Android OTA 升级之三:生成recovery.img
2014-08-27 14:32
120 查看
AndroidOTA升级之三:生成recovery.img
作者:宋立新
Email:zjujoe@yahoo.com
INSTALLED_RECOVERYIMAGE_TARGET为我们的编译目标:
它依赖很多其它目标:
2.INSTALLED_RAMDISK_TARGET,标准根文件系统ramdisk.img:
4.recovery_binary,Recovery可执行程序,源码位于:bootable/recovery
5.recovery_initrc,recovery模式的init.rc,位于bootable/recovery/etc/init.rc
6.recovery_kernel,recovery模式的kernel,同标准内核
9.recovery_resource_deps,recovery模式使用的res,位于:recovery/custom/{product_name}/res,以及设备自定义部分(我们没用到)
10.RECOVERY_INSTALL_OTA_KEYS,ota密钥:
准备recovery目录:out/target/product/{product_name}/recovery及其子目录:
./root
./root/etc
./root/tmp
从标准根文件系统拷贝所有文件,删除其res目录。
和内核一起,生成recovery.img
.
├──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
作者:宋立新
Email:
前言
得到了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为我们的编译目标:
584INSTALLED_RECOVERYIMAGE_TARGET:=$(PRODUCT_OUT)/recovery.img
它依赖很多其它目标:
1.MKBOOTFS,MINIGZIP,MKBOOTIMG,PC端工具软件:
(Frombuild/core/config.mk)
265MKBOOTFS:=$(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX)
266MINIGZIP:=$(HOST_OUT_EXECUTABLES)/minigzip$(HOST_EXECUTABLE_SUFFIX)
267MKBOOTIMG:=$(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX)
2.INSTALLED_RAMDISK_TARGET,标准根文件系统ramdisk.img:
326BUILT_RAMDISK_TARGET:=$(PRODUCT_OUT)/ramdisk.img
328#Wejustbuildthisdirectlytotheinstalllocation.
329INSTALLED_RAMDISK_TARGET:=$(BUILT_RAMDISK_TARGET)
3.INSTALLED_BOOTIMAGE_TARGET,即boot.img,标准内核及标准根文件系统:
362INSTALLED_BOOTIMAGE_TARGET:=$(PRODUCT_OUT)/boot.img
4.recovery_binary,Recovery可执行程序,源码位于:bootable/recovery
590recovery_binary:=$(callintermediates-dir-for,EXECUTABLES,recovery)/recovery
5.recovery_initrc,recovery模式的init.rc,位于bootable/recovery/etc/init.rc
586recovery_initrc:=$(callinclude-path-for,recovery)/etc/init.rc
6.recovery_kernel,recovery模式的kernel,同标准内核
587recovery_kernel:=$(INSTALLED_KERNEL_TARGET)#sameasanon-recoverysystem
7.INSTALLED_2NDBOOTLOADER_TARGET,我们不用。
8.recovery_build_prop,recovery模式的build.prop,同标准模式。
589recovery_build_prop:=$(INSTALLED_BUILD_PROP_TARGET)
9.recovery_resource_deps,recovery模式使用的res,位于:recovery/custom/{product_name}/res,以及设备自定义部分(我们没用到)
591recovery_resources_common:=$(callinclude-path-for,recovery)/custom/$(TARGET_PRODUCT)/res
592recovery_resources_private:=$(strip$(wildcard$(TARGET_DEVICE_DIR)/recovery/res))
593recovery_resource_deps:=$(shellfind$(recovery_resources_common)
594$(recovery_resources_private)-typef)
10.RECOVERY_INSTALL_OTA_KEYS,ota密钥:
618#Generateafilecontainingthekeysthatwillbereadbythe
619#recoverybinary.
620RECOVERY_INSTALL_OTA_KEYS:=/
621$(callintermediates-dir-for,PACKAGING,ota_keys)/keys
L638-L655准备内容
638@echo-----Makingrecoveryimage------
639rm-rf$(TARGET_RECOVERY_OUT)
640mkdir-p$(TARGET_RECOVERY_OUT)
641mkdir-p$(TARGET_RECOVERY_ROOT_OUT)
642mkdir-p$(TARGET_RECOVERY_ROOT_OUT)/etc
643mkdir-p$(TARGET_RECOVERY_ROOT_OUT)/tmp
准备recovery目录:out/target/product/{product_name}/recovery及其子目录:
./root
./root/etc
./root/tmp
644echoCopyingbaselineramdisk...
645cp-R$(TARGET_ROOT_OUT)$(TARGET_RECOVERY_OUT)
646echoModifyingramdiskcontents...
647rm-rf$(TARGET_RECOVERY_ROOT_OUT)/res
从标准根文件系统拷贝所有文件,删除其res目录。
648cp-f$(recovery_initrc)$(TARGET_RECOVERY_ROOT_OUT)/
649cp-f$(recovery_binary)$(TARGET_RECOVERY_ROOT_OUT)/sbin/
拷贝recovery模式的核心文件init.rc及recovery
650cp-rf$(recovery_resources_common)$(TARGET_RECOVERY_ROOT_OUT)/
651$(foreachitem,$(recovery_resources_private),/
652cp-rf$(item)$(TARGET_RECOVERY_ROOT_OUT)/)
653cp$(RECOVERY_INSTALL_OTA_KEYS)$(TARGET_RECOVERY_ROOT_OUT)/res/keys
拷贝资源文件及密钥文件。
654cat$(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根文件系统
657build/quacomm/mkimage$(PRODUCT_OUT)/ramdisk-recovery.imgRECOVERY>$(PRODUCT_OUT)/ramdisk_recovery.img
加一个标识头(RECOVERY)
658mv$(PRODUCT_OUT)/ramdisk_recovery.img$(PRODUCT_OUT)/ramdisk-recovery.img
659$(MKBOOTIMG)$(INTERNAL_RECOVERYIMAGE_ARGS)--output$@
660@echo-----Maderecoveryimage--------$@
661$(hide)$(callassert-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
- Android OTA 升级(三):生成recovery.img .
- Android OTA 升级(三):生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级(三):生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级(三):生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级之三:生成recovery.img
- Android OTA 升级(三):生成recovery.img
- Android OTA升级原理和流程分析(四)---Android系统Recovery模式的工作原理