Zephyr 项目结构
zephyr主要有两部分组成: Zephyrproject 目录和 Zephyr SDK 目录。
zephyrproject 根目录
Zephyrproject 目录是利用 west update 过程中构建的。这是 Zephyr 的工作目录。其包含了:
.west/:存放了 west 的配置文件,记录当前工作空间引用的仓库信息等。zephyr/:是 Zephyr RTOS 的核心仓库。包含了 Zephyr RTOS Core(内核),驱动接口、构建系统等。modules/::存放外部的开源组件,包括芯片厂商的 HAL库(比如 hal_stm32)、文件系统(fatfs)等。bootloader/:包含了引导加载程序等(mcuboot)。tools/:一些辅助脚本和工具。
zephyr 核心目录
对于其中的 zephyr/ 仓库,有一系列需要关注的子目录:
arch/:包含了架构相关的代码,比如 ARM、x86、RISC-V、Xtensa 等处理器架构的底层实现(比如中断处理、上下文切换等)。soc/:包含了芯片级相关的适配代码,比如 stm32、nrf52、esp32 等,包含了对于特定芯片的外设描述逻辑,比如时钟、电源管理、引脚复用等。boards/:包含了部分开发板的定义。对于每一个板子,都包含了 DeviceTree(.dts 文件)用以描述其硬件资源,以及其他配置文件。drivers/:包含了设备驱动。其按照类别分类(如gpio/、i2c/等。其中包含了对于不同芯片厂商的外设驱动,并映射为一套通用的 API。include/:公共头文件。包含了一套通用的 API。kernel/:内核核心。包含了如任务调度、信号量、互斥锁等 RTOS 核心组件。samples/:示例代码。subsys/:子系统,包含对于网络协议栈(ip等),文件系统,shell,图形库等。scripts/: 用于构建调试等的脚本。dts/:包含了用于外设硬件描述的模板文件。lib/:包含了通用的 C 库实现,比如适配版本的 libc 等。misc/:杂项。
Zephyr SDK 目录
zephyr sdk 为独立的工具包,通常在 zephyrproject 之外。其提供了交叉编译器和调试工具。
其内部项目结构包含了独立的各架构工具链,如 arm—zephyr-eabi/,其中包含了gcc,gdb 等编译所用的工具等。