详细拆解 openvela 的三层架构
本文介绍了计算机系统的三层架构模型:架构层(底层CPU指令集)、芯片层(具体芯片外设驱动)和板级层(开发板外设配置)。架构层提供基础CPU操作如中断处理,芯片层实现特定芯片的时钟和外设控制,板级层定义外设连接方式。这种分层设计实现了高度复用性:更换芯片只需修改芯片层代码,更换开发板只需调整板级层。类比电脑组装,架构层相当于主板芯片组,芯片层是带CPU的主板,板级层则是组装好的整机。分层架构有效解耦
一、架构层(Architecture):电脑的 “地基”
定位:最底层,定义 CPU 核心指令集和基本运行机制,类似电脑的 “主板芯片组”(如 Intel Z790 芯片组)。
作用:
- 提供最基础的 CPU 操作(如寄存器读写、中断处理)
- 定义内存管理单元(MMU)的工作方式
- 实现上下文切换(进程 / 线程切换)的核心逻辑
类比:
架构层就像电脑主板的芯片组,决定了:
- 支持什么 CPU(如 ARMv7-M、RISC-V)→ 类似主板支持 Intel 还是 AMD CPU
- 内存插槽怎么工作(DDR4 还是 DDR5)→ 类似架构层定义 MMU 如何管理内存
- 基本输入输出(USB、PCIe)的通信协议 → 类似架构层定义中断控制器如何工作
代码位置:nuttx/arch/<架构名>
,如 ARMv7-M 架构在nuttx/arch/arm/src/armv7-m
特点:
- 通用性强:同一架构(如 ARMv7-M)可支持多个芯片(如 STM32F103、STM32F407)
- 修改少:除非换架构(如从 ARM 换 RISC-V),否则无需改动
二、芯片层(Chip/SoC):电脑的 “主板 + 核心组件”
定位:中间层,基于架构层,针对具体芯片型号的硬件特性做适配,类似电脑的 “主板 + CPU + 内存 + 显卡” 组合(如 “Z790 主板 + i9-13900K+32G 内存 + RTX4090”)。
作用:
- 实现芯片特有的外设驱动(如 STM32 的 TIM 定时器、USART 串口)
- 配置芯片的时钟树(如把 CPU 主频从 8MHz 提到 168MHz)
- 实现中断控制器的具体逻辑(如 STM32 的 NVIC)
类比:
芯片层就像一块预装了 CPU、内存、显卡的主板,需要:
- 针对特定型号的 CPU 优化散热(如给 i9-13900K 装水冷)→ 类似芯片层配置芯片时钟
- 让显卡和主板通信(PCIe 协议)→ 类似芯片层实现 SPI/I2C 等通信协议
- 配置内存时序(如 DDR5-6000 16-16-16)→ 类似芯片层初始化内存控制器
代码位置:vendor/<厂商>/chips/<芯片名>
,如 STM32F407 在vendor/st/chips/stm32f407
关键文件:
stm32f407_irq.c
:中断处理(类似主板的 “中断请求线”)stm32f407_clock.c
:时钟配置(类似 CPU 的 “倍频设置”)stm32f407_gpio.c
:GPIO 控制(类似主板的 “IO 接口”)
特点:
- 芯片特定:不同芯片(如 STM32F4 vs STM32H7)代码不同
- 复用性低:很难直接用于其他芯片型号
三、板级层(Board):电脑的 “整机配置”
定位:最上层,基于芯片层,针对具体开发板(芯片 + 外设)做适配,类似电脑的 “整机配置”(如 “联想拯救者 Y9000P 笔记本”)。
作用:
- 定义外设与芯片的连接关系(如 LED 接 PA5 引脚)
- 初始化板载外设(如启动加速度传感器、配置 WiFi 模块)
- 提供板级特定功能(如开发板的复位按钮逻辑)
类比:
板级层就像一台组装好的笔记本电脑,需要:
- 把键盘、屏幕、触摸板连到主板(定义引脚连接)→ 类似板级层定义 LED、按键接哪个 GPIO
- 预装显卡驱动、网卡驱动(初始化外设)→ 类似板级层初始化 SPI/I2C 设备
- 设置电源键功能(长按强制关机)→ 类似板级层实现复位按钮逻辑
代码位置:vendor/<厂商>/boards/<开发板名>
,如 STM32F4 Discovery 在vendor/st/boards/stm32f4discovery
关键文件:
board.h
:引脚定义(如LED_GREEN_PIN=13
)→ 类似笔记本的 “内部排线图”board_init.c
:板级初始化(如先开 LED 电源,再初始化传感器)→ 类似笔记本 “开机自检”Kconfig
:配置选项(如 “启用板载 LED”)→ 类似笔记本的 “功能开关”
特点:
- 开发板特定:同一芯片的不同开发板(如 STM32F4 Discovery vs Nucleo-F407)代码不同
- 易修改:新增外设或调整引脚时,只需改板级层代码
四、三层架构的协作:从 “零件” 到 “整机”
举例:用 STM32F407 芯片做一个 “智能灯开发板”,三层架构如何分工?
-
架构层(ARMv7-M):
- 提供基础的寄存器操作函数(如
write_reg()
) - 实现中断向量表的框架
- 定义上下文切换的核心逻辑
→ 相当于提供了一块 “通用 ARM 主板芯片组”
- 提供基础的寄存器操作函数(如
-
芯片层(STM32F407):
- 配置 STM32F407 的时钟树(从 8MHz 到 168MHz)
- 实现 USART 串口驱动(用于调试输出)
- 编写 GPIO 控制函数(如
gpio_set_mode()
)
→ 相当于把芯片组和 STM32F407 CPU 结合,做出一块 “STM32F407 核心板”
-
板级层(智能灯开发板):
- 定义 LED 接 PB5 引脚,按键接 PC13
- 初始化 LED 为 PWM 输出(用于调光)
- 配置按键中断(按下时切换 LED 状态)
→ 相当于在核心板上加上 LED 和按键,做成 “智能灯开发板”
五、为什么要分层?—— 为了 “复用” 和 “解耦”
分层的最大好处是复用:
- 架构层复用:ARMv7-M 架构代码可用于所有 ARMv7-M 芯片
- 芯片层复用:STM32F407 代码可用于所有基于该芯片的开发板
- 板级层复用:同一开发板的代码可用于不同应用场景(如智能灯 vs 温湿度监测)
举例:
- 从 STM32F407 换到 STM32H743(同架构不同芯片):只需换芯片层,架构层和板级层基本不变
- 从 “智能灯开发板” 换成 “无人机开发板”(同芯片不同外设):只需换板级层,芯片层和架构层不变
就像组装电脑:
- 换 CPU(如从 i5 换 i7),只需换主板(芯片层),机箱和外设(板级层)不用动
- 换显卡(如从 GTX1660 换 RTX4090),只需改显卡驱动(板级层),主板和 CPU(芯片层 + 架构层)不用动
总结:三层架构 = 从 “地基” 到 “装修”
- 架构层:电脑的 “芯片组”(地基),提供最基础的 CPU 支持
- 芯片层:预装 CPU 的 “主板”(主体框架),实现芯片特有的外设驱动
- 板级层:组装好的 “整机”(装修 + 家具),定义外设连接和初始化逻辑

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
所有评论(0)