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

2024-09-08 06:38

本文主要是介绍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.imgout/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来刷机验证了。

这篇关于Android P/Q MTK平台无依赖打包boot.img的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147396

相关文章

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp