Edit online

Luban-Lite SDK 简述

Luban-Lite设计简单易用且支持大众化需求,与此同时支持最新的实时系统,具体以下几个功能特点

  • 兼容市面上最流行的 RTOS 内核,包括 RT-Thread、FreeRTOS 等。

  • 支持 baremetal 模式。

  • 提供完整的软件栈生态资源。

根据是否使用 OS,Luban-Lite 架构分为两种情况:

RTOS 框架

对上层应用来讲,在 RT-Thread kernel 的基础上封装了 RT-Thread 和 Free-RTOS 两类 API, 因此应用层支持两种实时系统

Baremetal 框架

目录和代码结构

Luban-Lite SDK 目录结构总览如下:
aic1602 $ tree -L 2
├── application     // 存放 APP 代码
│   ├── baremetal
│   └── os
├── bsp // 存放 BSP 代码,和 Thread 原生的 bsp 目录功能相同
│   ├── artinchip // ArtInChip SoC 内部的 driver、hal 以及最小系统 sys 代码
│   ├── common    // 公共头文件
│   ├── peripheral       // 一些外设模块的驱动
│   ├── examples_bare    // 各模块在裸机环境的示例代码
│   └── examples         // 各模块在 RTOS 环境的示例代码
│       ├── test-alarm
│       ├── test-audio
│       ├── test-can
│       ├── test-dma
│       ├── test-qspi
│       ├── test-touch
│       └── test-uart
├── doc // Luban-Lite SDK 的介绍文档
│   ├── luban-lite_driver_development_guid.md  // 设备驱动开发指南
│   ├── luban-lite_sdk_design.md // SDK 设计说明
│   ├── luban-lite_user_guid_linux.md // Linux 环境的用户使用说明
│   └── luban-lite_user_guid_windows.md // Windows 环境的用户使用说明
├── win_env.bat // 启动 Thread 的 env 工具,用于 Windows 环境的开发
├── win_cmd.bat // 启动 exe,用于 Windows 环境的开发
├── kernel // 存放各种 RTOS 内核
│   ├── common
│   ├── freertos
│   └── rt-thread
├── output // SDK 的编译输出
├── packages // 组件包
│   ├── artinchip // ArtInChip 开发的组件包
│   └── third-party // 第三方的组件包
├── target // 方案(板)级的代码和配置
│   ├── configs // 整个方案的 SDK 配置文件
│   └── d21x // d21x 芯片对应的板级代码(见子目录)
│      ├── demo100-nand
│      ├── per2-nand
│      └── per2-nor
├── toolchain // 解压后的工具链存放目录
└── tools // 一些工具
    ├── onestep.sh  // ArtInChip 开发的 OneStep 命令行增强工具
    └── toolchain // 工具链的压缩包
以下是部分目录结构详细说明:
  1. application:存放应用和各种示例
    ├── baremetal           //baremetal 裸机
    │   ├── bootloader      //系统的引导加载程序
    │   └── helloworld      //系统示例
    └── os
        └── helloworld      //系统示例
  2. bsp:SoC 的核心,封装了该 SoC 的所有接口和驱动
    ├── artinchip
    │   ├── drv                 //驱动
    │   ├── hal                 //硬件抽象
    │   ├── include
    │   ├── SConscript
    │   └── sys                 //最小系统
    ├── common
    │   ├── include
    │   └── SConscript
    ├── Kconfig
    ├── peripheral              //三方外设驱动封装
    │   ├── Kconfig
    │   ├── SConscript
    │   ├── touch               //触控
    │   └── wireless            //无线
    └── SConscript
  3. doc:遵从 RT-Thread 原始建议使用 Markdown 编写的 SDK 的简单设计和使用文档。

  4. Kernel:RTOS 系统的核心,实现了 Luban-Lite 支持的三种运行方式的内核。
    1. baremetal:裸机系统的接口封装。

    2. freertos:FreeRTOS 内核的实现。

    3. rt-thread:RT-Thread 内核的实现。

    4. common:AIC 公共接口的封装。

  5. package:组件包,包括 ArtInChip 开发的组件和 三方组件,支持从 RT-Thread online 下载。
    ├── artinchip           //ArtInChip 开发
    │   ├── Kconfig
    │   ├── mpp
    │   └── SConscript
    ├── Kconfig
    ├── SConscript
    └── third-party         //三方组件
        ├── bonnie
        ├── cherryusb
        ├── cpu_usage
        ├── Kconfig
        ├── littlefs
        ├── lvgl
        ├── lwip
        ├── mklittlefs
        ├── ramdisk
        ├── SConscript
        └── uffs
  6. target:存储方案(开发板)的配置信息。
    1. configs。文件示例如下:

      cat d21x_demo88-nor_baremetal_helloworld_defconfig
      CONFIG_SOC_THEAD_SMART=y
      # CONFIG_QEMU_RUN is not set
      CONFIG_PRJ_CUSTOM_LDS=""
      CONFIG_AIC_CHIP_D21X=y
      CONFIG_CACHE_LINE_SIZE=64
      CONFIG_AIC_CMU_DRV=y
      CONFIG_AIC_CMU_DRV_V10=y
      CONFIG_AIC_CMU_DRV_VER="10"
    2. d21x

      ├── demo100-nand
      │   ├── board.c
      │   ├── include
      │   ├── Kconfig.board
      │   ├── pack
      │   ├── pinmux.c
      │   ├── SConscript
      │   └── sys_clk.c
      ├── demo100-nor
      ├── demo88-nand
      ├── demo88-nor
  7. toolchain:原始为空目录,用于存放解压后的工具链。

  8. 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 工具链

四级抽象模型

Luban-Lite是一个跨软/硬件平台的 SDK, 支持多种应用场景:

  • 多个 SoC 芯片,需要做好驱动和设备的分离、驱动实例化等
  • 多块单板,每块板子的外设、IO、性能配置各不相同
  • 多种应用,一块板子可能支持多个应用
  • 若干组件,驱动、组件、应用的对应存在一对多的依赖

以上元素形成了 N x N x N 的多对多组合关系。

SDK 既满足了复杂映射关系的基础,又在设计中坚持了易用性的主旨:
  • 用高内聚提供复用:减少代码冗余,减少维护工作量
  • 用低耦合应对变化:针对某个方案又能灵活配置,满足客户的多元化使用

Luban-Lite SDK 框架中抽象出四个层级的元素:

在具体的 Luban-Lite 设计中,以上四级基本元素和 SDK 目录的对应关系如下图: