上文已經對boot.img其中組成部分之一ramdisk.img做了分析,boot.img另外一個重要的組成部分就是kernel了,
這裡所說的kernel,可以只理解為位於out/target/product/tcc8800/中的kernel檔案,本文主要分析kernel的拷貝
過程以及如何被打包到boot.img中。經過分析得知位於out/target/product/tcc8800/中的kernel檔案其實就是核心
編譯後的Image檔案,位於kernel/arch/arm/boot目錄下,線索就是這個Image檔案,經過搜尋發現一處定義:
LOCAL_KERNEL := kernel/arch/arm/boot/Image
該定義位於devices/telechips/tcc88xx-common/BoardConfigCommon.mk中,緊接著,在同目錄的Android.mk中
有以下一段定義:
PRODUCT_COPY_FILES += \
$(LOCAL_KERNEL):kernel
意在將Image檔案拷貝且重新命名為kernel,隨後的拷貝設定是在build/core/Makefile中完成的,在此略掉。
那麼,拷貝完成後,kernel檔案如何被打包到boot.img中呢?同樣在build/core/Makefile中有以下一段內容:
INTERNAL_BOOTIMAGE_ARGS := ... --kernel $(INSTALLED_KERNEL_TARGET)
現在的問題就是查看 INSTALLED_KERNEL_TARGET的定義,該宏位於build/target/board/Android.mk中:
INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel
內容很明顯了,至此,核心Image算是到位了。
另外INSTALL_KERNEL_TARGET定義在build/target/board/Android.mk中有點怪怪的,
build/target/board/Android.mk在main.mk中通過subdir_makefiles抽取得到,並包含進main.mk中
作者“Weike的部落格”