Zephyr SDK 简介
本文所称 Zephyr SDK,指 Realtek 为 Ameba 平台提供的完整 Zephyr 开发工作区(west 多仓库环境),与 Zephyr 官方发布的 Zephyr SDK 工具链(编译器等)不是同一概念。
SDK 由以下几个部分组成:
SDK west 顶层目录
├── .west west 根据 .west/config 找到顶层的 west.yml 所在位置
├── bootloader 存放 MCUboot 安全引导程序源码
├── manifests 包含 west 管理的仓库清单文件 west.yml
├── modules 必要的一些模组,包括:Ameba 外设驱动库、crypto/mbedtls 库等
├── nuwa.py -> tools/meta_tools/nuwa.py 快捷方式,SDK 对 west 命令的封装
├── tools 包含 meta boot 以及 bin 拼接处理的 .py 脚本,以及 imagetool 下载工具
└── zephyr zephyr 主文件夹,包括:zephyr OS Kernel、板级适配、演示例程、测试用例等
SDK 目录结构
Zephyr 目录同步自 GitHub 上的开源实时操作系统 Zephyr OS (目前使用的 Zephyr 内核版本为 v4.4.1),源码树结构如下:
SDK/zephyr
├── arch 存放芯片 CPU 架构级信息,如 ARM/RISC-V 架构信息
├── boards 存放板级信息,比如 Ameba 各种 EVB 开发板
├── cmake 存放 CMake 编译 Zephyr App 所需的相关配置和脚本文件
├── doc Zephyr 官方文档(离线副本)
├── drivers 存放设备驱动代码,例如 Ameba spi 驱动文件
├── dts 存放 DeviceTree(芯片硬件初始化配置) 信息
├── include 存放 Zephyr 公开的 API 头文件
├── kernel 存放 Zephyr OS 内核代码
├── lib 存放库文件,包含一个简单的标准 C 语言库等
├── misc 存放一些零散的模块代码
├── modules 存放关联第三方文件和目录的 modules 目录,提供第三方模块 Kconfig 相关定义途径(非 west 模块)
├── samples 存放 Zephyr 官方提供的示例代码
├── scripts 存放编译测试相关的脚本文件
├── share 存放一些额外的架构无关的数据,目前包含 Zephyr CMake Package
├── soc 存放芯片 SoC 级信息及一些默认配置
├── subsys Zephyr 子系统,包括:USB Device Stack(USB 设备栈)、File System(文件系统)等实现代码
└── tests 存放 Zephyr 官方提供的测试代码
boards
目前 SDK 提供了 5 种板级信息,用于适配不同型号的 Ameba 系列 EVB 开发板,其结构树如下:
SDK/zephyr/boards
├── realtek
├── rtl8721f_evb
├── rtl872xda_evb
├── rtl872xd_evb
├── pke8721daf_c13_f10
└── rtl8730e_evb
drivers
SDK 适配的 zephyr 驱动结构树如下:
SDK/zephyr/drivers
├── adc
├── audio
├── can
├── clock_control
├── console
├── counter
├── display
├── dma
├── entropy
├── ethernet
├── flash
├── gpio
├── hwinfo
├── i2c
├── i2s
├── input 电容触摸(captouch)输入驱动
├── led_strip
├── mipi_dbi
├── pinctrl
├── pwm
├── rtc
├── sdhc
├── sensor 温度(thermal)传感器驱动
├── serial
├── spi
├── usb
├── watchdog
└── wifi
dts
SDK DeviceTree 初始化配置信息结构树如下:
SDK/zephyr/dts
├── arm
│ └── realtek
│ ├── amebad rtl872xd_evb 对应的芯片硬件初始化配置信息
│ ├── amebadplus rtl872xda_evb、pke8721daf_c13_f10 对应的芯片硬件初始化配置信息
│ ├── amebag2 rtl8721f_evb 对应的芯片硬件初始化配置信息
│ └── amebasmart rtl8730e_evb 对应的芯片硬件初始化配置信息
├── bindings bindings 中包含一系列 .yaml 格式的文件,其中描述了 dts 各个节点中各个属性的实际含义
有关 DeviceTree 的更多内容请参考 Zephyr 开发章节中的 DTS 介绍。
samples
SDK 提供驱动及应用相关例程的官方源码,其结构树如下:
SDK/zephyr/samples
├── basic 存放基础例程源码
├── drivers 存放外设驱动例程源码
├── hello_world Zephyr 最经典的入门例程
└── subsys 存放 Zephyr 子系统(如 USB)相关例程源码
以 hello_world 为例:
hello_world
├── CMakeLists.txt CMake 编译脚本
├── prj.conf 工程配置文件
├── README.rst 工程说明文档
└── src
└── main.c 工程源码
tests
SDK 提供 Zephyr 相关接口 API 的测试例程,其结构树如下:
SDK/zephyr/tests
├── benchmarks 存放 OS 内核相关 API 的性能评估测试代码
├── drivers 存放外设驱动 API 测试代码
├── kernel 存放 OS 内核 API 测试代码
└── subsys 存放 Zephyr 子系统(如 power management、storage 等)API 测试代码
modules 目录结构
modules 目录是 west 多仓库管理机制的产物,主要用于存放由 west 管理的外部模块。这些模块是独立的 Git 仓库,由 manifests/west.yml 及其导入的 zephyr/west.yml 等清单文件共同定义。
其中包含 hal_*(硬件抽象层)、crypto/mbedtls、fs/fatfs 等第三方或 Zephyr 社区维护的独立子系统,结构树如下:
SDK/modules
├── crypto
│ └── mbedtls mbedtls 加密库
├── fs
│ ├── fatfs FatFs 文件系统
│ └── littlefs littlefs 文件系统
├── hal
│ ├── cmsis CMSIS 库
│ └── realtek realtek 外设驱动库
├── lib
│ ├── gui LVGL 图形库
│ └── zcbor CBOR 编解码库
└── tee
├── tf-a ARM Trusted Firmware-A(安全启动固件)
└── tf-m ARM Trusted Firmware-M(安全固件框架)
SDK/modules/hal/realtek 目录对应 west 管理的 hal_realtek 仓库,实际检出路径由 west.yml 中的 path 字段决定。该仓库包含 Ameba 系列芯片的外设驱动库,其中 Ameba 目录下的文件源自 ameba-rtos ,并定期同步至 hal_realtek 仓库。
其结构树如下:
SDK/modules/hal/realtek
├── ameba
│ ├── amebaxxx
│ │ ├── include 存放 platform_autoconf.h 等公共头文件
│ │ ├── ld 存放 linker script 文件
│ │ └── source 存放该芯片的外设驱动源代码
│ ├── common
│ │ ├── bluetooth 蓝牙协议栈源码
│ │ ├── include 存放 Ameba 公共头文件
│ │ ├── loader Loader 相关源码
│ │ ├── os_wrapper OS 适配层代码
│ │ ├── rtk_coex 蓝牙与 Wi-Fi 共存源码
│ │ ├── usb USB 设备栈源码
│ │ └── wifi Wi-Fi 协议栈源码
│ ├── scripts 存放工具链安装、二进制库更新等辅助脚本
│ └── usrcfg
│ ├── amebaxxx 存放 Ameba 各型号芯片的默认配置文件
│ └── common 存放 Ameba 公共配置文件
└── zephyr
└── module.yml zephyr 模块的描述文件,告诉 Zephyr 编译系统(CMake)如何找到、包含和编译这个特定模块的代码