剖析boot.img的制作流程

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈

当用户敲击了make bootimage时,我看看是如何工作的
在build/core/main.mk中,我们发现bootimage依赖INSTALLED_BOOTIMAGE_TARGET

.PHONY: bootimage
bootimage: $(INSTALLED_BOOTIMAGE_TARGET)

随后转到build/core/Makefile中,我们可以看到INSTALLED_BOOTIMAGE_TARGET其实就是boot.img,其依赖关系如下

INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img

$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)
	$(call pretty,"Target boot image: $@")
	$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@
	$(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE))

看看简单吧,INSTALLED_BOOTIMAGE_TARGET依赖两个目标:MKBOOTIMG和INTERNAL_BOOTIMAGE_FILES。
INTERNAL_BOOTIMAGE_FILES是真正的linux kernel,对应的也就是zImage,MKBOOTIMG其实就是mkbootimg工具。
当着两个目标生成后(也就是工具已在out/host下生成了、linux kernel意见编译Ok了),随后会调用下面的命令,进行打包boot.img:

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

(1)MKBOOTIMG=$(HOST_OUT_EXECUTABLES)/mkbootimg 是制作boot.img的工具
(2)INTERNAL_BOOTIMAGE_ARGS 是制作boot.img的参数,它是一堆参数的集合,这里我们只看我们经常使用的:

    ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
    INTERNAL_BOOTIMAGE_ARGS += --ramdisk $(INSTALLED_RAMDISK_TARGET)
    endif
    
   INTERNAL_BOOTIMAGE_ARGS += --cmdline "$(INTERNAL_KERNEL_CMDLINE)"

也就是说,如果系统不带system_as_root功能(android9.0以前的基本都不带,android9.0后的google要求必须带),则会将ramdisk也加入到 INTERNAL_BOOTIMAGE_ARGS. 另外一个INTERNAL_KERNEL_CMDLINE对应的则是cmdline
由此我们就明白了,ramdisk到底是在system.img中,还是在boot.img中?(答:以往ramdisk都是在boot.img中,在开启了system_as_root功能以后,就在system.img中了),所以当你修改了device下面的init.xxxx.rc后,是该编译bootimage还是编译systemimg,这里就可以理解了吧

(3)BOARD_MKBOOTIMG_ARGS //google预留接口
在android默认release的版本中,这个参数其实是为空的,是芯片上在适配android代码时,有时会改变或定制boot.img的需求,比如android9.0要求将boot.img的header_version改为1(不然vts不过), 查阅google文档,需要在制作boot.img的命令行中,追加一个参数header_version=1,这里芯片上就可以把这个参数填入到BOARD_MKBOOTIMG_ARGS变量中

Q & A:
boot.img是如何制作的?
答:boot.img是通过mkbootimg工具,将linux kernel的binary zImage、内核的cmdline、ramdisk、dtbo…等一些信息,打包在了一起,做为boot.img

如有不足,欢迎指教!


在这里插入图片描述
《ARMv8/ARMv9架构学习系列课程》全系列,共计52节课,超16h的视频课程

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
小米手机系统boot.img提取工具,是一种专门用于提取小米手机系统分区中boot.img文件的工具。Boot.img文件是手机启动时加载的一个重要文件,其中包含了操作系统的内核和初始化程序。通过提取boot.img文件,我们可以获取到系统的内核配置和一些重要的启动参数。 使用这个提取工具,我们可以进行以下操作: 1.提取boot.img文件:通过选择合适的选项,我们可以将小米手机系统分区中的boot.img文件提取到电脑上。这对于开发者来说非常重要,因为他们可以通过分析这个文件来了解系统的配置,定位问题和进行修改。 2.分析boot.img文件:一旦我们成功提取了boot.img文件,我们还可以使用其他工具对其进行分析。通过分析boot.img文件,我们可以了解到系统适配信息、硬件相关驱动、启动脚本等重要内容,这对于定位问题和进行系统优化是非常有帮助的。 3.修改boot.img文件:在某些情况下,我们可能需要对boot.img文件进行修改。比如,我们可能需要添加一些自定义的内核模块或者修改一些启动参数。使用这个工具提取并修改boot.img文件,可以让我们对系统进行更深层次的定制。 总之,小米手机系统boot.img提取工具是一款非常实用的工具,它可以帮助我们提取、分析和修改小米手机系统中的boot.img文件。无论是开发者还是普通用户,都可以通过使用这个工具来更好地了解和定制小米手机的系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值