Zephyr CMake构建解析1 概述1.1 配置阶段1.1.1 devicetree1.1.2 Kconfig1.2 构建阶段1.2.1 Pre-build1.2.2 Intermediate binaries1.2.3 Intermediate binary post-processing1.2.4 Final binary 和 Post-processing2 核心要点总结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 devicetree1)收集目标架构、soc、board、应用目录下的*.dts和*.dtsi;2)用C预处理器把*.overlay合并进去,并展开*.dts、*.dtsi、*.overlay中的宏,预处理输出写到zephyr.dts.pre;3)由gen_defines.py解析预处理结果,生成devicetree_generated.h;4)gen_defines.py还会把最终设备树文本写到
【Zephyr开发系列-8】Zephyr CMake构建解析
Zephyr CMake构建解析1 概述1.1 配置阶段1.1.1 devicetree1.1.2 Kconfig1.2 构建阶段1.2.1 Pre-build1.2.2 Intermediate binaries1.2.3 Intermediate binary post-processing1.2.4 Final binary 和 Post-processing2 核心要点总结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 devicetree1)收集目标架构、soc、board、应用目录下的*.dts和*.dtsi;2)用C预处理器把*.overlay合并进去,并展开*.dts、*.dtsi、*.overlay中的宏,预处理输出写到zephyr.dts.pre;3)由gen_defines.py解析预处理结果,生成devicetree_generated.h;4)gen_defines.py还会把最终设备树文本写到