☰
Zephyr BSP: 22-CPU Architecture 到底由谁负责?
2026/9/29 4:18:29 网站建设 项目流程

TL;DR:SoC 决定芯片内部采用的具体 CPU 核心,ARCH 决定 Zephyr 使用哪一套 CPU 架构实现,Toolchain 则负责将上述选择转换为 GCC/Clang 可识别的编译参数(如-mcpu=cortex-m4、-march=rv32im)。完整链路图见文末总图。

CPU / Architecture 到底由谁负责?
这一篇正好接在你前面的:
BOARD → SOC → ARCH
之后。
前面我们已经看到:

west build-bmy_board │ ▼ BOARD │ ▼ SOC │ ▼ ARCH

但这里有一个非常容易混淆的问题:
到底是谁决定"这是 Cortex-M4 / Cortex-M33 / RISC-V / ARM64"?

是 Board? 是 SoC? 是 Architecture? 还是 Toolchain?

答案是:
SoC 负责选择 CPU/CPU family 的具体实现;Architecture 负责告诉 Zephyr"CPU 属于哪一种 ISA/架构体系";Toolchain 则负责把这些选择变成真正的编译器参数。

可以先记住这张关系图:

Board │ │ selects ▼ SoC │ ┌────────┴────────┐ │ │ ▼ ▼ CPU / Core ARCH / ISA │ │ │ │ ▼ ▼ Cortex-M4 ARM Cortex-M33 RISC-V Cortex-A53 x86 │ └────────┬────────┘ ▼ Toolchain │ ▼-mcpu/-march/... │ ▼ gcc / clang

一、先把三个概念彻底分开

最容易混淆的是:

CPU SoC ARCH

先看一张对比表,把五个层次一次性理清:

层次定义职责典型示例Zephyr 配置项
Board具体的开发板/硬件平台描述板级外设(LED、Button、UART、Pinmux、Flash 等),并声明"我使用哪颗 SoC"NUCLEO-F303RECONFIG_BOARD
SoC把 CPU + 外设 + Memory Controller + Interrupt Controller + Timer + UART + GPIO 等集成起来的芯片硬件事实来源,决定"芯片里是什么 CPU"STM32F303RECONFIG_SOC_xxx(如CONFIG_SOC_STM32F303XE)
CPU芯片内部具体的处理器核心决定指令集与微架构细节,影响编译参数Cortex-M4CONFIG_CPU_CORTEX_M4
ArchitectureCPU 所属的 ISA/架构体系,以及 Zephyr 对这套架构的底层实现决定 Zephyr 进入哪一套arch/实现ARMCONFIG_ARM
Toolchain编译器及链接工具链把上述选择转换成 GCC/Clang 能识别的编译参数arm-none-eabi-gcctoolchain 配置(如-mcpu=cortex-m4)

它们不是一回事。

1. ARCH 是"大类"
例如:

ARM RISC-V x86 ARC Xtensa

在 Zephyr 中,ARCH 更接近:
CPU 指令集架构 + Zephyr 对这套架构的底层支持
例如:

ARCH=arm

意味着 Zephyr 会进入:

arch/arm/

这一套 architecture implementation。

二、CPU 又是什么?

CPU 是更具体的处理器核心。

例如 ARM 世界里面:

ARM │ ├── Cortex-M0 ├── Cortex-M3 ├── Cortex-M4 ├── Cortex-M7 ├── Cortex-M23 ├── Cortex-M33 ├── Cortex-M55 │ ├── Cortex-A53 ├── Cortex-A55 └── Cortex-A76

所以:

ARM └── Cortex-M4

是:

Architecture ↓ CPU Core

而不是:

ARM=Cortex-M4

三、SoC 又是什么?

SoC 是把 CPU + 外设 + Memory Controller + Interrupt Controller + Timer + UART + GPIO …… 集成起来的芯片。

例如:

STM32F303 │ ├── Cortex-M4 ├── Flash ├── SRAM ├── RCC ├── GPIO ├── USART ├── SPI ├── I2C ├── ADC └──...

所以:

SoC │ └── CPU │ └── Cortex-M4

这就是为什么在 Zephyr BSP 中:
SoC 是最重要的"硬件事实来源"。
Board 通常不应该自己决定 CPU 是什么。

四、一个非常重要的原则

假设我们有:

MyBoard │ ▼ MySoC │ ▼ Cortex-M4

那么:

Board

通常只需要说:
我使用的是 MySoC。
而:

MySoC

负责告诉 Zephyr:
我的 CPU 是 Cortex-M4。
然后:

ARCH

负责:
Cortex-M 系列属于 ARM architecture,我这里应该使用 arch/arm/。

所以逻辑实际上是:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询