答:分析以下makefile即可獲取整個過程
以nxp layerscape系統的編譯過程為例
1.分析target/linux/layerscape/image/makefile的最後一句,這是乙個好的開端
$(eval $(call buildimage))
2.巨集buildimage定義在**呢?定義在include/image.mk中,簡化後如下
define buildimage...$(
foreach
device,$(target_devices),$(call device,$(device))
install-images: kernel_prepare $(foreach fs,$(filter-out $(if $(ubifs_opts),,ubifs),$(target_filesystems) $(fs-subtypes-y)),$(kdir)/root.$(fs))
$(foreach
fs,$(target_filesystems),
$(call image/build,$(fs))
)...
endef
3.在巨集定義buildimage中會由上到下根據依賴依次執行,我們首先關注
$(foreach device,$(target_devices),$(call device,$(device))
4.巨集device又定義在**呢?同樣定義在include/image.mk檔案中,定義簡化後如下
define device...$(call device/$(if $(dump),dump,build),$(1
))endef
5.此時會執行巨集device/dump或巨集device/build,那麼以執行巨集device/build為例,巨集device/build簡化後如下
define device/build...$$(eval $$(
foreach
compile,$$(compile), \
$$(call device/build/compile,$$(compile),$(1
))))
$$(eval $$(
foreach
image,$$(images), \
$$(foreach
fs,$$(filter $(target_filesystems),$$(filesystems)), \
$$(call device/build/image,$$(fs),$$(image),$(1
)))))
endef
6.接著執行巨集device/build/compile和device/build/image,這兩個巨集都定義在include/image.mk中,在device/build/image會做根檔案系統製作方面的工作
OpenWRT系統編譯
openwrt系統編譯完成之後在bin ramips目錄下存放系統映象,如下圖所示,其中openwrt ramips mt7688 root.squashfs檔案是根檔案系統 squashfs 是一套基於linux核心使用的壓縮唯讀檔案系統。該檔案系統能夠壓縮系統內的文件,inode 以及目錄,檔案...
openwrt系統mt7621韌體編譯
openwrt 原始碼編譯操作 mtk openwrt 3.10.14 proc.tar.gz 第二步,解壓原始碼包 tar zxvf mtk openwrt 3.10.14 proc.tar.gz 第三步,設定環境變數 source etc profile 第四步,開始編譯 make j 3 v ...
C 是如何編譯的
c 是如何編譯的?net的程式是由多種語言編譯的,如c vb c j 等,但是最後都會由各自的編譯器編譯為一致的中間語言 il 最後由 clr提供執行環境 將中間語言編譯為 機器碼 供cpu執行。為了儘量減少中間 編譯為機器 的效能損失,中間語言採用 即使編譯 也被稱為 jit編譯 這種編譯方式只編...