SDK 简介

SDK 由以下几个部分组成:

SDK       west topdir
├── .west      west 根据 ./west/config 找到顶层的 west.yml 所在位置
├── 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.1.0),源码树结构如下:

SDK/zephyr
├── arch     存放芯片 CPU 架构级信息,如 ARM/RSIC-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 提供了 3 种板级信息,用于适配不同型号的 EVB 开发板,其结构树如下:

SDK/zephyr/boards
├── realtek
    ├── rtl8721f_evb
    ├── rtl872xda_evb
    └── rtl872xd_evb

有关 Ameba 板级信息配置的更多内容请参考:Zephyr Board 配置指南(TODO)。

drivers

SDK 适配的 zephyr 驱动结构树如下:

SDK/zephyr/drivers
├── adc
├── audio
├── can (TOOD)
├── clock_control
├── console
├── counter
├── display
├── dma
├── entropy
├── ethernet (TOOD)
├── flash
├── gpio
├── hwinfo
├── i2c
├── i2s
├── input (captouch)
├── led_strip
├── mdio (TOOD)
├── 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 对应的芯片硬件初始化配置信息
│       └── amebaG2     rtl8721f_evb 对应的芯片硬件初始化配置信息
├── bindings            bindings 中包含一系列 .yaml 格式的文件,其中描述了 dts 各个节点中各个属性的实际含义

有关 DeviceTree 的更多内容请参考:Zephyr 配置系统指南的 Devicetree 配置部分介绍。(TODO)

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      工程源码

有关例程的更多内容请参考:AMEBA 例程介绍(TODO)。

tests

SDK 提供 Zephyr 相关接口 API 的测试例程,其结构树如下:

SDK/zephyr/tests
├── benchmarks    存放 OS 内核相关 API 的性能评估测试代码
├── drivers       存放外设驱动 API 测试代码
├── kernel        存放 OS 内核 API 测试代码
└── subsys        存放 Zephyr 子系统(如 power management、storage 等)API 测试代码

modules 目录结构

modules 目录是 West 多仓库管理的产物。它包含了 Zephyr 主项目(zephyr)所依赖的所有外部模块(external modules)。这些模块是独立的 Git 仓库,由 west.yml 清单文件定义。 包含 hal_* (硬件抽象层), lib/mbedtls, fs/fatfs 等第三方或 Zephyr 社区维护的独立子系统。其结构树如下:

SDK/modules
├── crypto
│   └── mbedtls    mbedtls 加密库
├── fs
│   └── littlefs   littlefs 文件系统
└── hal
   ├── cmsis       CMSIS 库
   └── realtek     realtek 外设驱动库

其中 hal_realtek 中包含了 Ameba 系列芯片的外设驱动库,Ameba 目录下的文件源自 ameba-rtos ,并且定期同步至 zephyr 的 hal_realtek 仓库。 其结构树如下:

SDK/modules/hal/realtek
├── ameba
│   ├── amebaxxx
│   │   ├── bin         存放除了 KM4 使用 zephyr os 编译生成的 image2 固件外,其他 CPU 的 image2 固件和 bootloader 固件
│   │   ├── include     存放 platform_autoconf.h 等公共头文件
│   │   ├── ld          存放 KM4 的 linker script 文件
│   │   ├── lib         与硬件涉及强相关的一些未开源的静态库文件
│   │   └── source      除了上述 lib 文件夹的模块,其余所有源代码都开源
│   ├── common
│   │   ├── bluetooth   蓝牙协议栈源码
│   │   ├── include     存放 Ameba 公共头文件
│   │   ├── os_wrapper  OS 适配层代码
│   │   ├── rtk_coex    蓝牙与 WiFi 共存源码
│   │   ├── usb         USB 设备栈源码
│   │   └── wifi        WiFi 协议栈源码
│   └── usrcfg
│       ├── amebaxxx    存放 Ameba 各型号芯片的默认配置文件
│       └── common      存放 Ameba 公共配置文件
└── zephyr
   └── module.yml       zephyr 模块的描述文件,告诉 Zephyr 编译系统(CMake)如何找到、包含和编译这个特定模块的代码