boot.img的生成

 

在製作android燒寫鏡像時,boot.img是一個很重要的文件

boot.img在一般情況下包括了ramdisk、kernel,  KERNEL_CMDLINE, FLASH_PAGE_SIZE四個部分。

從Android/build/core/Makefile文件中可以看到boot.img的生成過程.

INSTALLED_BOOTIMAGE_TARGET:=$(PRODUCT_OUT)/boot.img  定義輸出文件名稱

INTERNAL_BOOTIMAGE_ARGS:=...\

   --kernel $(INSTALLED_KERNEL_TARGET)   \ 其實INSTALL_KERNEL_TARGET就是kernel下的Image文件

   --ramdisk $(INSTALLED_RAMDISK_TARGET) \ramdisk.img是mkbootfs工具用out/.../tcc8900/root目錄生成,並做了壓縮

...

ifdef BOARD_KERNEL_CMDLINE

   INTERNAL_BOOTIMAGE_ARGS+= --cmdline "$(BOARD_KERNEL_CMDLINE)"

tcc89xx的device/telechips/tcc8900/BoardConfig.mk包含了device/telechips/tcc92xx-common目錄中的

BoardConfigCommon.mk文件,tcc8900的BOARD_KERNEL_CMDLINE就被定義在這個BoardConfigCommon.mk中

endif

ifdef BOARD_KERNEL_BASE

  INTERNAL_BOOTIMAGE_ARGS+= --base  "$(BOARD_KERNEL_BASE)"

和BOARD_KERNEL_CMDLINE一樣,該宏也被定義在tcc9xx-common/BoardConfigCommon.mk中

endif

ifdef BOARD_FLASH_PAGE_SIZE

  INTERNAL_BOOTIMAGE_ARGS+= --pagesize "$BOARD_FLASH_PAGE_SIZE"

BOARD_FLASH_PAGE_SIZE可以在device/telechips/tcc8900/BoardConfig.mk文件中找到其定義

endif

......

$(INSTALLED_BOOTIMAGE_TARGET):$(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)

    $(hide)  $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS)  --output $@  使用mkbootimg工具生成最後boot.img

...

 其中INSTALLED_KERNEL_TARGET在Android/build/target/board/Android.mk內被定義:

INSTALLED_KERNEL_TARGET:=$(PRODUCT_OUT)/kernel  就是kernel源碼編譯後的Image文件

在boot.img生成過程中用到的諸如MKBOOTIMG,MKBOOTFS,MINIGZIP工具在build/core/config.mk中定義:

MKBOOTIMG:=$(HOST_OUT_EXECUTABLES)mkbootimg$(HOST_OUT_EXECUTABLE_SUFFIX)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章