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/mbedtlsfs/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)如何找到、包含和编译这个特定模块的代码