openwrt的編譯系統是如何制作根文件系統的


答:分析以下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會做根文件系統制作方面的工作

 

 

 

 

 

 

 

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM