zoukankan      html  css  js  c++  java
  • 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会做根文件系统制作方面的工作




  • 相关阅读:
    AngularJS入门教程
    mobile web retina 下 1px 边框解决方案
    Python字典猜解
    20145313exp9
    20145313张雪纯Exp8 Web基础
    20145313张雪纯exp7
    20145313张雪纯信息搜集与漏洞扫描
    计算机病毒静态分析2
    计算机病毒静态分析1
    20145313张雪纯MSF基础应用实验
  • 原文地址:https://www.cnblogs.com/dakewei/p/10216294.html
Copyright © 2011-2022 走看看