在製作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)