外观
工程架构说明
2026-05-28
🏗️ App-Driver 双工程分离架构
本 SDK 采用 应用工程(App) 与 驱动工程(Driver) 相互独立的双工程架构设计。
此架构将业务逻辑开发和底层硬件驱动开发进行彻底解耦,使应用层与底层平台能够:
- 🔄 独立开发 - 应用和驱动团队可并行工作
- 🔧 独立维护 - 各层代码边界清晰,便于定位问题
- ⬆️ 独立升级 - 支持单独更新应用或驱动模块
💡 为什么需要工程分离?
在传统嵌入式开发中,通常会将应用代码、BSP、驱动代码、内核源码全部放在同一个工程中进行开发。
这种方式在项目初期虽然简单,但随着项目规模扩大,会逐渐暴露出以下问题:
| 问题 | 影响 |
|---|---|
| 📉 开发效率低 | 应用开发和驱动调试相互干扰,无法并行推进 |
| 🛠️ 维护困难 | 代码边界模糊,修改一处可能影响多个模块 |
| 🚫 复用性差 | 同一套驱动代码难以在不同应用项目中快速复用 |
| 🔄 升级复杂 | 任何改动都需要重新编译整个系统,增加测试工作量 |
尤其在中大型项目中,上述问题会显著降低开发效率与维护性。
✨ 设计目标
为了解决上述问题,本 SDK 引入了 App(应用) + Driver(驱动) 双工程分离架构,旨在实现:
| 优势 | 说明 |
|---|---|
| 🎯 职责分离 | 驱动层专注硬件抽象,应用层专注业务逻辑 |
| 📏 接口标准化 | 通过 RT-Thread 设备框架提供统一访问接口 |
| 📦 独立编译部署 | 两个工程可独立编译、调试和升级 |
| ♻️ 高复用性 | 驱动工程可在多个应用场景中复用 |
💡 核心价值
这种架构设计让开发者能够专注于各自领域,提高开发效率,同时保证系统的稳定性和可维护性。
📐 架构分层
┌─────────────────────────────────────┐
│ Application Engineering │ ← 应用工程(业务逻辑)
│ ┌───────────────────────────────┐ │
│ │ RT-Thread Device API │ │
│ └───────────────┬───────────────┘ │
└───────────────────┼─────────────────┘
│ rt_device API
┌───────────────────┼─────────────────┐
│ Driver Engineering │ ← 驱动工程(硬件抽象)
│ ┌───────────────┴───────────────┐ │
│ │ Device Drivers + Kernel │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘📂 工程目录结构
📱 应用工程
00_base_helloworld【应用工程】
app应用程序源码
main.c应用入口函数
SConscript应用层构建脚本
build编译中间文件
…
components应用层组件(中间件)
CherryECATEtherCAT 主站协议栈
…
dfs文件系统组件(FatFS、ROMFS 等)
…
ethercat_serviceEtherCAT 服务层
…
falFlash 抽象层
…
finsh命令行交互工具(MSH)
…
legacy遗留组件兼容层
…
libcC 标准库支持(POSIX 接口)
…
lwp轻量级进程支持
…
net网络协议栈(LwIP、Socket API)
…
utilities实用工具组件
…
vbus虚拟化支持组件
…
vmm虚拟化支持组件
…
Debug构建输出
app.img固件镜像
driver_framework驱动框架头文件(引用层)
include驱动框架公共头文件
…
...驱动框架模块
…
kernel内核 API 头文件引用
includeRT-Thread 核心 API 声明
…
lib应用层依赖库
…
libcpuCPU 架构相关代码
…
smodule_kpi应用模块接口
…
socSoC 配置和寄存器定义(只读引用)
…
tools构建工具脚本
…
rtconfig.h应用工程宏定义配置
app_link.lds/S应用链接脚本(内存布局)
🔧 驱动工程
tl3576_evm【驱动工程】
board板级初始化配置
board.c/h板级初始化(时钟、内存、外设使能)
iomux.c/h引脚复用配置(GPIO/UART/I2C 功能选择)
profile_init.c根据 Profile 动态加载驱动模块
Kconfig板级配置菜单(可视化配置选项)
SConscript板级构建脚本
components驱动层组件(中间件)
dfs文件系统组件
…
falFlash 抽象层
…
finsh命令行工具
…
legacy遗留组件
…
libcC 标准库支持
…
lwp轻量级进程
…
net网络协议栈
…
utilities实用工具
…
vbus虚拟化组件
…
vmm虚拟化组件
…
Debug编译中间文件
…
driver_framework驱动框架实现(通用模板)
audio音频驱动框架
…
canCAN 总线驱动框架
…
cputime/hwtimer定时器驱动框架
…
hwcrypto硬件加密驱动框架
…
i2cI2C 驱动框架实现
…
include驱动框架公共头文件和 API
…
interrupt/ipc中断和 IPC 框架
…
ipc虚拟化 IPC 框架
…
misc杂项设备驱动框架
…
mtdMTD 存储驱动框架
…
phyPHY 驱动框架
…
pm电源管理框架
…
rtc实时时钟驱动框架
…
sdioSDIO 驱动框架
…
sensors传感器驱动框架
…
serial串口驱动框架实现
…
spiSPI 驱动框架实现
…
touch触摸屏驱动框架
…
usbUSB 驱动框架(Host/Device)
…
watchdog看门狗驱动框架
…
wlanWiFi 驱动框架
…
Kconfig驱动框架配置菜单
SConscript驱动框架构建脚本
kernel内核 API 声明
…
lib驱动层依赖库
…
smodule_mpi驱动模块 API 接口
…
socSoC 层驱动(芯片通用驱动)
driversSoC 外设驱动接口定义
drv_uart.c/hUART 串口驱动
...SoC 其他外设驱动
…
libSoC HAL 层实现
…
tools构建工具脚本
…
rtconfig.h驱动工程宏定义配置
defconfig驱动层默认配置
driver_link.lds/S驱动链接脚本(内存布局)
profile.defconfigProfile 特定配置
核心文件说明
board/ 目录负责特定硬件板卡的初始化配置、引脚复用选择和驱动初始化。
| 文件名 | 功能描述 | 关键内容 |
|---|---|---|
| board.c/h | 板级初始化配置 | 系统时钟配置、内存控制器初始化、看门狗配置、外设电源使能 |
| iomux.c/h | 引脚复用配置 | GPIO 功能复用选择、引脚电气特性配置、外设引脚分配表 |
| profile_init.c | 配置文件动态加载 | 驱动初始化调用 |
soc/ 目录提供芯片级别的通用驱动实现,同一 SoC(如 RK3576)的所有开发板共享此目录。
| 文件名 | 功能描述 | 关键内容 |
|---|---|---|
| drivers/ | SoC 外设驱动实现 | SoC 串口、I2C、SPI 等外设框架层驱动实现 |
| lib/ | SoC HAL 层实现 | 提供底层硬件访问的基础库 |
| hal_conf.h | HAL 模块配置 | 通过宏配置启用/禁用 HAL 模块,优化代码体积,仅编译需要的模块 |
