openwrt的編譯系統是如何製作根檔案系統的

2022-06-11 15:42:11 字數 1497 閱讀 5401

答:分析以下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編譯 這種編譯方式只編...