一、架构层(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 芯片做一个 “智能灯开发板”,三层架构如何分工?

  1. 架构层(ARMv7-M)

    • 提供基础的寄存器操作函数(如write_reg()
    • 实现中断向量表的框架
    • 定义上下文切换的核心逻辑
      → 相当于提供了一块 “通用 ARM 主板芯片组”
  2. 芯片层(STM32F407)

    • 配置 STM32F407 的时钟树(从 8MHz 到 168MHz)
    • 实现 USART 串口驱动(用于调试输出)
    • 编写 GPIO 控制函数(如gpio_set_mode()
      → 相当于把芯片组和 STM32F407 CPU 结合,做出一块 “STM32F407 核心板”
  3. 板级层(智能灯开发板)

    • 定义 LED 接 PB5 引脚,按键接 PC13
    • 初始化 LED 为 PWM 输出(用于调光)
    • 配置按键中断(按下时切换 LED 状态)
      → 相当于在核心板上加上 LED 和按键,做成 “智能灯开发板”

五、为什么要分层?—— 为了 “复用” 和 “解耦”

分层的最大好处是复用

  • 架构层复用:ARMv7-M 架构代码可用于所有 ARMv7-M 芯片
  • 芯片层复用:STM32F407 代码可用于所有基于该芯片的开发板
  • 板级层复用:同一开发板的代码可用于不同应用场景(如智能灯 vs 温湿度监测)

举例

  • 从 STM32F407 换到 STM32H743(同架构不同芯片):只需换芯片层,架构层和板级层基本不变
  • 从 “智能灯开发板” 换成 “无人机开发板”(同芯片不同外设):只需换板级层,芯片层和架构层不变

就像组装电脑:

  • 换 CPU(如从 i5 换 i7),只需换主板(芯片层),机箱和外设(板级层)不用动
  • 换显卡(如从 GTX1660 换 RTX4090),只需改显卡驱动(板级层),主板和 CPU(芯片层 + 架构层)不用动

总结:三层架构 = 从 “地基” 到 “装修”

  • 架构层:电脑的 “芯片组”(地基),提供最基础的 CPU 支持
  • 芯片层:预装 CPU 的 “主板”(主体框架),实现芯片特有的外设驱动
  • 板级层:组装好的 “整机”(装修 + 家具),定义外设连接和初始化逻辑
Logo

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

更多推荐