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会做根文件系统制作方面的工作




  • 相关阅读:
    嵌入式整体框架——总结
    DSP Bios记忆
    三遥
    usb设备 配置 接口 端点
    ARM, MIPS, Power PC的比较
    STM32 IAP
    FSMC 总结
    BCD码与十进制的相互转换
    读 “cortexM3” 权威指南 小记(一)
    crc校验码的16 32位 查表法 算法记载
  • 原文地址:https://www.cnblogs.com/dakewei/p/10216294.html
Copyright © 2011-2022 走看看