【Zephyr开发系列-8】Zephyr CMake构建解析

Zephyr CMake构建解析

  • 1 概述
    • 1.1 配置阶段
      • 1.1.1 devicetree
      • 1.1.2 Kconfig
    • 1.2 构建阶段
      • 1.2.1 Pre-build
      • 1.2.2 Intermediate binaries
      • 1.2.3 Intermediate binary post-processing
      • 1.2.4 Final binary 和 Post-processing
  • 2 核心要点总结

1 概述

Zephyr构建过程分成配置阶段(由 CMake 驱动)和 构建阶段(由 Make 或 Ninja 驱动)。配置完成后,CMake 拥有这次构建的内部模型,并生成原生的构建脚本;Zephyr支持的生成器是 Ninja 和 Make。整个构建是从应用出发,再把 Zephyr 内核、模块、板级配置一起纳入,最后编成一个完整镜像。

1.1 配置阶段

CMake会从应用目录开始处理CMakeLists.txt,再进入Zephyr顶层和整棵构建树中的其他CMakeLists.txt,其主要输出是一套Makefiles或Ninja files;同时,CMake脚本还会处理devicetree和Kconfig。

1.1.1 devicetree

1)收集目标架构、soc、board、应用目录下的*.dts*.dtsi
2)用C预处理器把*.overlay合并进去,并展开*.dts*.dtsi*.overlay中的宏,预处理输出写到zephyr.dts.pre
3)由gen_defines.py解析预处理结果,生成devicetree_generated.h
4)gen_defines.py还会把最终设备树文本写到