栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android P/Q MTK平台无依赖打包boot.img

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android P/Q MTK平台无依赖打包boot.img

背景:

       有时排查版本问题,需要用到替换img的方式来查找问题出现在哪个img,若出现在bootimg,那到底是kernel、DTB 还是ramdisk。此时就需要单独替换其中一个的方式来打包,之前直接make bootimage-nodeps就可以了,但现在发现执行这个命令无效了。下面就分析下新版本如何找到正确的打包命令。

一、找到编译boot的命令

之前Android编译log里就会把make boot等img的指令打印出来,现在这个log也没有了,那就只能自己修改Makefile 把指令打印出来

修改build/core/Makefile   找到类似下面的代码部分,注意这个文件有很多类似下面的部分,具体走哪一个if是跟进宏配置来的,如果不确认,也懒得确认就每个地方都改一下

$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(AVBTOOL) $(INTERNAL_BOOTIMAGE_FILES) $(BOARD_AVB_BOOT_KEY_PATH)
        $(call pretty,"Target boot image: $@")
        $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@
        $(hide) $(call assert-max-image-size,$@,$(call get-hash-image-max-size,$(BOARD_BOOTIMAGE_PARTITION_SIZE)))
        $(hide) $(AVBTOOL) add_hash_footer 
          --image $@ 
          --partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) 
          --partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) 
          $(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)

.PHONY: bootimage-nodeps
bootimage-nodeps: $(MKBOOTIMG) $(AVBTOOL) $(BOARD_AVB_BOOT_KEY_PATH)
        @echo "make $@: ignoring dependencies"
        $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET)
        $(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(call get-hash-image-max-size,$(BOARD_BOOTIMAGE_PARTITION_SIZE)))
        $(hide) $(AVBTOOL) add_hash_footer 
          --image $(INSTALLED_BOOTIMAGE_TARGET) 
          --partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) 
          --partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) 
          $(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)

$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@

改成

$(warning $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@)

$(hide) $(AVBTOOL) add_hash_footer
          --image $@
          --partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE)
          --partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS)
          $(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)

改成

$(warning $(AVBTOOL) add_hash_footer
          --image $@
          --partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE)
          --partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS)
          $(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS))

然后重新make bootimage 2>&1 | tee build.log

最好先把 out下  obj/KERNEL_OBJ删除防止不会重新编译生成

二、从log中提取打包指令

注意:上述修改可能会导致编译失败,但不影响我们提取打包指令

log中找到类似下面的log信息,注意不同配置可能会有差异。

out/host/linux-x86/bin/mkbootimg  --kernel out/target/product/$(PROJECT)/kernel --dtb out/target/product/$(PROJECT)/dtb.img --ramdisk out/target/product/$(PROJECT)/ramdisk.img --base 0x40000000 --cmdline "bootopt=64S3,32N2,64N2 buildvariant=userdebug" --os_version 10 --os_patch_level 2021-09-05 --kernel_offset 0x00080000 --ramdisk_offset 0x07C80000 --tags_offset 0x0BC80000 --header_version 2 --dtb_offset 0x0BC80000 --output out/target/product/$(PROJECT)/obj/PACKAGING/boot_intermediates/boot.img


out/host/linux-x86/bin/avbtool add_hash_footer --image out/target/product/$(PROJECT)/obj/PACKAGING/boot_intermediates/boot.img --partition_size 33554432 --partition_name boot --algorithm SHA256_RSA2048 --key device/mediatek/vendor/common/boot_prvk.pem --prop com.android.build.boot.os_version:10 --prop com.android.build.boot.security_patch:2019-06-06 --rollback_index 0

第一句就是生成初版boot.img,第二句生成最终版的boot.img

三、制作我们自己的boot

我们可以替换out/target/product/$(PROJECT)/kernel  或dt.img或ramdisk然后生成新的boot来刷机验证了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283964.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号