概述

zephyr项目是基于Cmake构建的。
构建系统以应用程序为中心,要求基于Zephyr的应用程序启动构建内核源树。应用程序构建控制应用程序Zephyr本身的配置和构建过程,将它们汇编成单个二进制文件。

  • Zephyr的基本目录包含了Zephyr自己的源代码、内核配置选项及其构建定义。
  • 应用程序目录中的文件将Zephyr与应用程序联系起来。此目录包含所有特定于应用程序的文件,如配置选项和源代码。

最简单的应用程序具有以下内容:
03.zephyr概述和源码结构 - 图1

  • CMakeLists.txt文件:此文件告诉构建系统在哪里可以找到应用程序源文件,并将应用程序目录与Zephyr的CMake构建系统链接。此链接提供了Zephyr构建系统支持的功能,例如:板子特定内核配置文件、在真实或模拟硬件上运行和调试编译二进制文件的能力等。
  • prj.conf内核配置文件:应用程序通常提供Kconfig配置文件,用于指定一个或多个内核配置选项的应用程序特定值。这些应用程序设置与特定于板的设置合并,以生成内核配置。
  • src目录包含应用程序源代码文件:应用程序通常提供一个或多个应用程序特定的文件,用C或C++语言编写。

    定义应用程序之后你可以使用Cmake编译应用程序,编译时默认会在当前目录下产生一个build构建目录。这称为生成目录。应用构建文件总是生成在生成目录中。

zephyr的源码结构

03.zephyr概述和源码结构 - 图2

  • CMakeLists.txt文件:CMake构建系统的顶级文件,包含构建Zephyr所需的大量逻辑。
  • Kconfig文件:顶层Kconfig文件,其中指定配置文件Kconfig.zephyr也位于顶层目录中。
  • west.yml文件:west工具配置文件,列出由west工具管理的外部存储库。
  • arch目录:包含特定于架构的文件,例如:ARMX86
  • soc目录:SoC相关代码和配置文件。
  • boards目录:板子相关代码和配置文件。
  • doc目录:Zephyr技术文档源文件。
  • drivers目录:设备驱动程序代码。
  • dts目录:用于描述特定硬件详细信息的设备树源文件。
  • include目录:包括所有公共API的头文件,但不包含库里的头文件。
  • kernel目录:架构独立的内核源代码。
  • lib目录:库代码,包括最低标准C库。
  • misc目录:不属于任何其他顶级目录的杂项代码。
  • samples目录:演示使用zephyr功能的示例应用程序。
  • scripts目录:用于构建和测试Zephyr应用程序的各种脚本文件。
  • cmake目录:构建Zephyr所需的其他cmake脚本。
  • subsys目录:zephyr子系统,包括:
    • USB设备堆栈代码。
    • 网络代码,包括蓝牙协议栈和网络协议栈。
    • 文件系统代码。
    • 蓝牙主机和控制器代码。
  • tests目录:Zephyr功能的测试代码。
  • share目录:其他架构独立数据。目前包含Zephyr CMake package