Android Makefile编译流程
★★★ 友情鏈接 : 個人博客導讀首頁—點擊此處 ★★★
1、整編譯
當中android根目錄下敲擊make時候,根目錄下的Makefile就一句話include build/core/main.mk,即調用main.mk,以下為main.mk的依賴規則
2、模塊編譯
模塊編譯依賴各個模塊目標。
3、recovery.img
(1)在TARGET_NO_RECOVERY=false,TARGET_NO_KERNEL=false時候
INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img
依賴關系如下,則會生成revovery.img
(2)在AB分區功能打開,即TARGET_NO_KERNEL=true時,INSTALLED_RECOVERYIMAGE_TARGET等于空,則后面的依賴關系不復存在,也就不會生成revovery.img了
4、boot.img
.PHONY: bootimage
bootimage: $(INSTALLED_BOOTIMAGE_TARGET)
INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img
(1)無AB分區功能時的boot.img的依賴規則如下
(2)啟用AB分區時候,BOARD_USES_RECOVERY_AS_BOOT=true,此時的依賴規則變成如下:
可以看出,此時boot.img的生成規則,與無AB分區時生成revovery.img時候的規則一樣。即現在的boot.img就是以前的recovery.img
5、system.img
system.img的依賴關系
build-systemimage-target函數最終調用到build_image.py用戶創建鏡像
此前boot.img里面的ramdisk是recovery系統的recovery ramdisk,那之前boot.img里的ramdisk呢?系統如何來掛著system分區的呢??? 看下面代碼,可知,原boot.img里的ramdisk挪到system.img里面了。
build_image.py 調用了BuildImage函數
BuildImage函數部分內容如下:
6、userdateimage
7、cache.img
啟用AB分區時候,BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 沒有定義,這里條件不能滿足,所以不會生成cache.img
8、vendor.img
和BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE宏是否定義相關。
9、有關AB分區的總結如下:
recovery.img,不再單獨生成,傳統方式的recovery.img現在叫做boot.img
boot.img,包含kernel和recovery模式的ramdisk
system.img,傳統方式下system.img由(PRODUCTOUT)/system文件夾打包而成,A/B系統下,制作時將(PRODUCT_OUT)/system文件夾打包而成,A/B系統下,制作時將(PRODUCTO?UT)/system文件夾打包而成,A/B系統下,制作時將(PRODUCT_OUT)/root和(PRODUCTOUT)/system合并到一起,生成一個完整的帶有rootfs的system.imguserdata.img,跟原來一樣,打包(PRODUCT_OUT)/system合并到一起,生成一個完整的帶有rootfs的system.img userdata.img,跟原來一樣,打包(PRODUCTO?UT)/system合并到一起,生成一個完整的帶有rootfs的system.imguserdata.img,跟原來一樣,打包(PRODUCT_OUT)/data文件夾而成
cache.img,A/B系統下不再單獨生成cache.img
vendor.img,文件的生成跟是否A/B系統無關,主要有廠家決定
總結
以上是生活随笔為你收集整理的Android Makefile编译流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: crypto-RSA-常用解密代码块
- 下一篇: [crypto]-52-python3中