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