android单独编译rec,Android recovery分析(一)---如何编译全量升级包

一、前言

recovery的最主要功能就是升级,而升级文件就是升级包了,那么升级包时如何编译出来的呢?文就这个问题做个简要的分析。

注:本文中的叙述纯属个人理解,欢迎批评指正。

二、升级包编译命令

1.source build/envsetup.sh

2.lunch (选择合适的配置)

3.make otapackage

注:有些平台可能没有将“recoveryimage”、“bootimage”等目标添加为“otapackage”目标的依赖,而otapackage目标必定会依赖“boot.img”和“recovery.img”这些文件,这时就需要先执行编译对应image文件的命令之后才能使“make otapackage”命令顺利执行,最终生成升级包。

三、从makefile分析升级包编译流程

寻找otapackage目标(我以正在进行的一个项目为例)

首先我们在makefile中找到otapackage目标,然后顺藤摸瓜来分析整个编译的过程。下面我贴出相关的makefile代码,代码路径:rootdir/build/core/Makefile$(BUILT_TARGET_FILES_PACKAGE):

$(INSTALLED_BOOTIMAGE_TARGET)    -------------------------------(1)

$(INSTALLED_RADIOIMAGE_TARGET)

$(INSTALLED_RECOVERYIMAGE_TARGET)

$(INSTALLED_SYSTEMIMAGE)

$(INSTALLED_USERDATAIMAGE_TARGET)

$(INSTALLED_CACHEIMAGE_TARGET)

$(INSTALLED_VENDORIMAGE_TARGET)

$(INSTALLED_CUSTOMIMAGE_TARGET)

$(INSTALLED_ANDROID_INFO_TXT_TARGET)

$(SELINUX_FC)

$(built_ota_tools)

$(APKCERTS_FILE)

$(HOST_OUT_EXECUTABLES)/fs_config

| $(ACP)                                      -----------------(2)

@echo "Package target files: $@"

$(hide) rm -rf $@ $(zip_root)

$(hide) mkdir -p $(dir $@) $(zip_root)                  --------------(3)

@# Components of the recovery image

$(hide) mkdir -p $(zip_root)/RECOVERY

$(hide) $(call package_files-copy-root,                 -------------(4)

$(TARGET_RECOVERY_ROOT_OUT),$(zip_root)/RECOVERY/RAMDISK)

$(hide) mkdir -p $(zip_root)/OTHER

$(hide) $(ACP)

$(INSTALLED_UBOOT_TARGET) $(zip_root)/OTHER/bootloader     ---(5)

$(hide) $(ACP)

$(INSTALLED_DTB_TARGET) $(zip_root)/OTHER/dtb

$(hide) $(ACP)

$(INSTALLED_BOOTIMAGE_TARGET) $(zip_root)/OTHER/boot.img

$(hide) $(ACP)

$(INSTALLED_LDFW_TARGET) $(zip_root)/OTHER/ldfw

$(hide) $(ACP)

$(INSTALLED_RECOVERY_TARGET) $(zip_root)/OTHER/recovery.img

ifdef BOARD_KERNEL_BASE

$(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/RECOVERY/base

endif

ifdef BOARD_KERNEL_PAGESIZE

$(hide) echo "$(BOARD_KERNEL_PAGESIZE)" > $(zip_root)/RECOVERY/pagesize

endif

@# Components of the boot image

$(hide) mkdir -p $(zip_root)/BOOT

$(hide) $(call package_files-copy-root,

$(TARGET_ROOT_OUT),$(zip_root)/BOOT/RAMDISK)

ifdef INSTALLED_KERNEL_TARGET

$(hide) $(ACP) $(INSTALLED_KERNEL_TARGET) $(zip_root)/BOOT/kernel

endif

ifdef INSTALLED_2NDBOOTLOADER_TARGET

$(hide) $(ACP)

$(INSTALLED_2NDBOOTLOADER_TARGET) $(zip_root)/BOOT/second

endif

ifdef BOARD_KERNEL_CMDLINE

$(hide) echo "$(BOARD_KERNEL_CMDLINE)" > $(zip_root)/BOOT/cmdline

endif

ifdef BOARD_KERNEL_BASE

$(hide) echo "$(BOARD_KERNEL_BASE)" > $(zip_root)/BOOT/base

endif

ifdef BOARD_KERNEL_PAGESIZE

$(hide) echo "$(BOARD_KERNEL_PAGESIZE)" > $(zip_root)/BOOT/pagesize

endif

$(hide) $(foreach t,$(INSTALLED_RADIOIMAGE_TARGET),

mkdir -p $(zip_root)/RADIO;

$(ACP) $(t) $(zip_root)/RADIO/$(notdir $(t));)

@# Contents of the system image

$(hide) $(call package_files-copy-root,

$(SYSTEMIMAGE_SOURCE_DIR),$(zip_root)/SYSTEM)

@# Contents of the data image

$(hide) $(call package_files-copy-root,

$(TARGET_OUT_DATA),$(zip_root)/DATA)

ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE

@# Contents of the vendor image

$(hide) $(call package_files-copy-root,

$(TARGET_OUT_VENDOR),$(zip_root)/VENDOR)

endif

@# Extra contents of the OTA package

$(hide) mkdir -p $(zip_root)/OTA/bin

$(hide) $(ACP) $(INSTALLED_ANDROID_INFO_TXT_TARGET) $(zip_root)/OTA/

$(hide) $(ACP) $(PRIVATE_OTA_TOOLS) $(zip_root)/OTA/bin/

@# Files that do not end up in any images, but are necessary to

@# build them.

$(hide) mkdir -p $(zip_root)/META

@# imei.dat information of the OTA package

@echo "[imei.dat] Adding imei.dat to OTA package"

@echo "[imei.dat] path : bootable/recovery/etc/META-INF/imei.dat"

$(hide) $(ACP) bootable/recovery/etc/META-INF/imei.dat $(zip_root)/META/

@# machine_match information of the OTA package

@echo "[machine_match] Adding machine_match to OTA package"

$(hide) $(ACP) $(machine_match_binary) $(PRODUCT_OUT)/

$(hide) $(ACP) $(APKCERTS_FILE) $(zip_root)/META/apkcerts.txt

$(hide) if test -e $(tool_extensions)/releasetools.py; then $(ACP) $(tool_extensions)/releasetools.py $(zip_root)/META/; fi

$(hide) echo "$(PRODUCT_OTA_PUBLIC_KEYS)" > $(zip_root)/META/otakeys.txt

$(hide) echo "recovery_api_version=$(PRIVATE_RECOVERY_API_VERSION)" > $(zip_root)/META/misc_info.txt        -------------------------------------------------------------------------------------(6)

$(hide) echo "fstab_version=$(PRIVATE_RECOVERY_FSTAB_VERSION)" >> $(zip_root)/META/misc_info.txt

$(hide) -$(ACP) $(PRODUCT_OUT)/firmware_type $(zip_root)/META/

ifdef BOARD_FLASH_BLOCK_SIZE

$(hide) echo "blocksize=$(BOARD_FLASH_BLOCK_SIZE)" >> $(zip_root)/META/misc_info.txt

endif

ifdef BOARD_BOOTIMAGE_PARTITION_SIZE

$(hide) echo "boot_size=$(BOARD_BOOTIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt

endif

ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE

$(hide) echo "recovery_size=$(BOARD_RECOVERYIMAGE_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt

endif

ifdef BOARD_HAS_EXT4_RESERVED_BLOCKS

$(hide) echo "has_ext4_reserved_blocks=$(BOARD_HAS_EXT4_RESERVED_BLOCKS)" >> $(zip_root)/META/misc_info.txt

endif

ifdef TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS

@# TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS can be empty to indicate that nothing but defaults should be used.

$(hide) echo "recovery_mount_options=$(TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS)" >> $(zip_root)/META/misc_info.txt

else

$(hide) echo "recovery_mount_options=$(DEFAULT_TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS)" >> $(zip_root)/META/misc_info.txt

endif

$(hide) echo "tool_extensions=$(tool_extensions)" >> $(zip_root)/META/misc_info.txt

$(hide) echo "default_system_dev_certificate=$(DEFAULT_SYSTEM_DEV_CERTIFICATE)" >> $(zip_root)/META/misc_info.txt

ifdef PRODUCT_EXTRA_RECOVERY_KEYS

$(hide) echo "extra_recovery_keys=$(PRODUCT_EXTRA_RECOVERY_KEYS)" >> $(zip_root)/META/misc_info.txt

endif

$(hide) echo 'mkbootimg_args=$(BOARD_MKBOOTIMG_ARGS)' >> $(zip_root)/META/misc_info.txt

$(hide) echo "use_set_metadata=1" >> $(zi

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值