日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

剖析boot.img的制作流程

發布時間:2025/3/21 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剖析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)endifINTERNAL_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

如有不足,歡迎指教!

總結

以上是生活随笔為你收集整理的剖析boot.img的制作流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。