博客
关于我
NuttX 构建系统
阅读量:794 次
发布时间:2023-02-17

本文共 2263 字,大约阅读时间需要 7 分钟。

NuttX嵌入式实时操作系统的Makefile构建详解

NuttX是一个基于Makefile文件的嵌入式实时操作系统构建工具。与Autoconf、Automake等自动生成化编译工具不同,NuttX的Makefile文件手工编写,易于阅读和理解,能够清晰地反映软件编译过程。

Makefile文件组织结构

NuttX的Makefile组织结构分为多个层次:

  • 顶层Makefile:位于nuttx/目录下,定义了针对不同操作系统(如Linux和Windows)的编译规则。
  • 平台特定Makefile:分别为Linux(Makefile.unix)和Windows(Makefile.win)编写,包含了各自平台的编译器和工具链配置。
  • 配置文件Make.defs:从nuttx/config/<板卡>/<目标配置>/Make.defs复制而来,提供了架构和工具的特定编译选项。
  • 子文件夹下的Makefile:每个子文件夹都包含Makefile、Make.defs和Make.dep文件,用于定义特定子模块的编译规则。
  • Makefile文件的包含关系

    NuttX的Makefile文件包含关系较为复杂,顶层文件通过include命令加载相关配置文件和子文件夹的Makefile。需要注意的是,子文件夹下的Makefile并不通过include命令包含,而是在运行make命令时被调用。

    构建目标与选项

    NuttX的Makefile提供多种构建目标和选项,主要包括以下几种:

    1. 常用目标

    • all:默认目标,按已选择的输出格式构建NuttX可运行文件。
    • clean:移除派生对象文件、静态库文件、可运行文件和临时文件,但保留配置文件和上下文文件。
    • distclean:执行clean后,进一步移除所有配置和上下文文件,恢复原始文件夹结构。

    2. 应用程序处理目标

    • apps_clean:清理用户应用程序文件夹中的派生对象文件和临时文件。
    • apps_distclean:清理用户应用程序文件夹中的派生对象文件和临时文件,但保留配置文件。
    • export:打包NuttX库和头文件到可输出包。

    3. 内部目标

    • depend:生成Make.dep文件,建立构建依赖关系。
    • context:确保NuttX正确配置,创建config.h和version.h头文件,并建立符号链接。
    • clean_context:移除context目标生成的头文件和符号链接。

    4. 构建选项

    • V=1:启用详细日志输出,显示具体编译命令,适合调试和追踪错误。

    all目标的依赖树

    all目标依赖树展示了NuttX构建的完整流程,主要包括以下步骤:

  • context目标:创建config.h和version.h头文件,并建立符号链接。
  • pass1dep目标:处理依赖关系,生成Make.dep文件。
  • $(USERLIBS)目标:编译用户定义的库文件。
  • pass2dep目标:处理深度依赖关系,生成更多Make.dep文件。
  • $(NUTTXLIBS)目标:编译NuttX的核心库文件。
  • pass1目标:平面构建,生成可执行文件。
  • pass2目标:最终构建和优化,生成多种输出格式(如hex、bin等)。
  • all目标的编译过程

    1. context目标

    运行make命令时,首先尝试编译context目标。这个目标会根据配置文件生成config.h,并在多个文件夹中创建符号链接,确保NuttX正确配置。

    2. pass1dep目标

    pass1dep目标处理依赖关系,生成Make.dep文件。平面构建时,$(USERDEPDIRS)为空,因此这个目标不会执行任何操作。

    3. $(USERLIBS)目标

    $(USERLIBS)目标负责编译用户定义的库文件。在平面构建时,$(USERLIBS)为空,因此这个目标也不会执行任何操作。

    4. pass2dep目标

    pass2dep目标处理深度依赖关系,生成Make.dep文件。这个目标会递归编译各个子文件夹下的Makefile,生成依赖关系文件。

    5. $(NUTTXLIBS)目标

    这个目标负责编译NuttX的核心库文件。例如,libarch.a目标会编译arch模块下的相关源文件,生成静态库文件。

    6. pass1目标

    pass1目标负责平面构建,将所有组件编译成一个单独的可执行文件。

    7. pass2目标

    pass2目标负责最终构建和优化,将静态库链接成可运行文件,并根据需要生成多种输出格式(如hex、bin、srec等)。

    nuttx/Make.defs文件

    NuttX的Make.defs文件是Makefile片断,用于定义平台和架构特定的编译规则。它从nuttx/config/<板卡>/<目标配置>/Make.defs复制而来,提供了工具链和编译选项。Make.defs文件会加载工具链(如CC、LD、AR等)和编译器标志(如CFLAGS、LDFLAGS),并根据配置文件中的设置进行调整。

    Make.defs文件还会包括一些通用Macro(如COMPILE、ASSEMBLE等),这些Macro会被子Makefile文件使用。需要注意的是,Make.defs文件会根据不同的架构和配置进行扩展和覆盖。

    总结

    通过以上详细介绍,可以看出NuttX的Makefile构建系统虽然简单,但功能强大。其基于手工编写的Makefile文件,不仅易于阅读和理解,还能通过灵活的配置和目标选择,满足不同开发需求。

    转载地址:http://ownfk.baihongyu.com/

    你可能感兴趣的文章
    NSGA-Ⅲ源代码
    查看>>
    nsis 安装脚本示例(转)
    查看>>
    NSJSON的用法(oc系统自带的解析方法)
    查看>>
    nslookup 的基本知识与命令详解
    查看>>
    NSNumber与NSInteger的区别 -bei
    查看>>
    NSOperation基本操作
    查看>>
    NSRange 范围
    查看>>
    NSSet集合 无序的 不能重复的
    查看>>
    NSURLSession下载和断点续传
    查看>>
    NSUserdefault读书笔记
    查看>>
    NS图绘制工具推荐
    查看>>
    NT AUTHORITY\NETWORK SERVICE 权限问题
    查看>>
    NT symbols are incorrect, please fix symbols
    查看>>
    ntelliJ IDEA 报错:找不到包或者找不到符号
    查看>>
    NTFS文件权限管理实战
    查看>>
    ntko web firefox跨浏览器插件_深度比较:2019年6个最好的跨浏览器测试工具
    查看>>
    ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
    查看>>
    ntp server 用法小结
    查看>>
    ntpdate 通过外网同步时间
    查看>>
    ntpdate同步配置文件调整详解
    查看>>