2.1. 代码结构

2.1.1. 目录总览

sdk $ tree -L 2
├── application     // 存放APP代码
│   ├── baremetal
│   └── os
├── bsp // 存放BSP代码,和RT-Thread原生的bsp目录功能相同
│   ├── zx // SoC内部的driver、hal以及最小系统sys代码
│   ├── common    // 公共头文件
│   ├── peripheral       // 一些外设模块的驱动
│   ├── examples_bare    // 各模块在裸机环境的示例代码
│   └── examples         // 各模块在RTOS环境的示例代码
│       ├── test-alarm
│       ├── test-audio
│       ├── test-can
│       ├── test-dma
│       ├── test-qspi
│       ├── test-touch
│       └── test-uart
├── win_env.bat // 启动RT-Thread的env工具,用于Windows环境的开发
├── win_cmd.bat // 启动CMD.exe,用于Windows环境的开发
├── kernel // 存放各种RTOS内核
│   ├── common
│   ├── freertos
│   └── rt-thread
├── output // SDK的编译输出
├── packages // 组件包
│   ├── zx // ZX开发的组件包
│   └── third-party // 第三方的组件包
├── target // 方案(板)级的代码和配置
│   ├── configs // 整个方案的SDK配置文件
│   └── m3 // m3 芯片对应的板级代码(见子目录)
├── toolchain // 解压后的工具链存放目录
└── tools // 一些工具
    ├── onestep.sh  // OneStep命令行增强工具
    └── toolchain // 工具链的压缩包

2.1.2. application

存放应用和各种示例

├── baremetal           //baremetal 裸机
│   ├── bootloader      //系统的引导加载程序
│   └── helloworld      //系统示例
└── os
    └── helloworld      //系统示例

2.1.3. bsp

bsp 目录是 SoC 的核心,封装了该 SoC 的所有接口和驱动

├── zx
│   ├── drv                 //驱动
│   ├── hal                 //硬件抽象
│   ├── include
│   ├── SConscript
│   └── sys                 //最小系统
├── common
│   ├── include
│   └── SConscript
├── Kconfig
├── peripheral              //三方外设驱动封装
│   ├── Kconfig
│   ├── SConscript
│   ├── touch               //触控
│   └── wireless            //无线
└── SConscript

2.1.4. doc

遵从 RT-Thread 原始建议使用 Markdown 编写的 SDK 的简单设计和使用文档

2.1.5. Kernel

Kernel 是 RTOS 系统的核心,该目录实现了 ZX-RTT 支持的三种运行方式的内核

2.1.5.1. baremetal

裸机系统的接口封装

2.1.5.2. freertos

FreeRTOS 内核的实现

2.1.5.3. rt-thread

RT-Thread 内核的实现

2.1.5.4. common

aic 公共接口的封装

2.1.6. package

组件包,包括 ZX 开发的组件和 三方组件,支持从 RT-Thread online 下载

├── zx           //ZX 开发
│   ├── Kconfig
│   ├── mpp
│   └── SConscript
├── Kconfig
├── SConscript
└── third-party         //三方组件
    ├── bonnie
    ├── cherryusb
    ├── cpu_usage
    ├── Kconfig
    ├── littlefs
    ├── lvgl
    ├── lwip
    ├── mklittlefs
    ├── ramdisk
    ├── SConscript
    └── uffs

2.1.7. target

存储方案(开发板)的配置信息

2.1.7.1. configs

存放某一个方案(开发板)的功能配置信息

ZX4D3_bootloader_defconfig
ZX4D3_rt-thread_defconfig
ZX7D0_bootloader_defconfig
ZX7D0_rt-thread_defconfig
ZXM37D0_bootloader_defconfig
ZXM37D0_rt-thread_defconfig
ZXM3C3D95_bootloader_defconfig
ZXM3C3D95_rtt_defconfig
ZXM47D0N_bootloader_defconfig
ZXM47D0N_rt-thread_defconfig

config文件的内容示例

cat ZXM47D0N_rt-thread_defconfig
CONFIG_SOC_THEAD_SMART=y
# CONFIG_QEMU_RUN is not set
CONFIG_PRJ_CUSTOM_LDS=""
CONFIG_AIC_CHIP_M4=y
CONFIG_CACHE_LINE_SIZE=64
CONFIG_AIC_CMU_DRV=y
CONFIG_AIC_CMU_DRV_V10=y
CONFIG_AIC_CMU_DRV_VER="10"

2.1.7.2. m4

存放某一个方案(开发板)的参数配置信息,以代码的方式存在

├── ZXM47D0N
│   ├── board.c
│   ├── include
│   ├── Kconfig.board
│   ├── pack
│   ├── pinmux.c
│   ├── SConscript
│   └── sys_clk.c
├── ZX9D35
├── ZX9D35N
  • Kconfig.board :提供方案的外设选择项

  • pinmux.c :该方案的 pinmux 配置

  • SConscript :该方案目录的编译配置

  • sys_clk.c : 该方案的clk配置

  • include :该方案特殊的include文件,主要是 board.c 的接口

  • pack :该方案在打包固件时的配置,如ddr,分区等配置信息

  • board.c:该方案的初始化运行接口

2.1.8. toolchain

原始为空目录,用于存放解压后的工具链

2.1.9. tools

该目录用于存放一些常用工具

  • onestep.sh : Linux 上使用的 onestep 脚本

  • env : 环境搭建和运行需要的三方工具

  • script: 编译和打包固件需要的脚本

  • toolchain: 工具链包

    • Xuantie-900-gcc-elf-newlib-x86_64-V2.6.1-20220906.tar.gz : Linux 工具链

    • Xuantie-900-gcc-elf-newlib-mingw-V2.6.1-20220906.tar.gz : Windows 工具链