新闻详情

新闻详情

首页 / 资讯中心 / 详情

Zephyr BSP: 03-规划Zephyr BSP系列

发布时间:2026/9/29 10:48:25来源:尧图网络
Zephyr BSP: 03-规划Zephyr BSP系列
摘要:本文建议 Zephyr BSP 专栏不要急于创建 Board,而应先从 BSP 的整体组成、职责边界、启动链路与代码组织方式入手。核心观点是:BSP 不是"一个目录",而是 Architecture → SoC → Peripheral → Driver → Devicetree → Kconfig → Board → Build → Boot 的完整链路。在进入启动链路之前,先看一张「传统 MCU BSP vs Zephyr BSP」的对比表,帮助你理解 Zephyr 的 BSP 为什么不是"一个目录":维度传统 MCU BSPZephyr BSP目录组织方式一个集中目录,包含 startup、驱动、链接脚本等所有文件按 Architecture / SoC / Board / Driver 分层分散在多个目录硬件描述手段直接在 C 代码和头文件中硬编码寄存器地址用 Devicetree(dts / dtsi)描述硬件拓扑,代码与硬件解耦配置机制宏定义 + 条件编译,散落在各处统一由 Kconfig 管理编译开关与选项驱动抽象层级驱动直接操作寄存器,与具体芯片强耦合驱动基于 Zephyr Driver API 抽象,通过 Devicetree 绑定实例可移植性换芯片基本要重写大部分 BSP换 SoC 只需新增 SoC 层描述,驱动与上层代码可复用光看表格还不够直观,下面用一段「传统 MCU BSP vs Zephyr BSP」的目录结构实战对比,让你看清同一个功能在两种体系下分别落在哪里。传统 MCU BSP:一个目录装下所有传统 MCU 开发通常把启动、时钟、外设驱动、链接脚本全部塞进一个 BSP 目录:BSP ├── startup.s# 复位向量、中断向量表、启动入口(Reset_Handler)├── system_xxx.c# 系统时钟初始化、SystemInit()、全局时钟配置├── gpio.c# GPIO 驱动,直接操作寄存器(GPIOA-MODER 等)├── uart.c# UART 驱动,直接操作寄存器(USART1-BRR 等)├── clock.c# 时钟树配置(PLL、分频、倍频)└── linker.ld# 链接脚本,定义内存布局与段(FLASH / RAM)每个文件都直接面对具体芯片的寄存器地址,换一颗 SoC 基本要重写大半。Zephyr BSP:按职责分层分散到多个目录Zephyr 把同样的功能拆解到arch/、soc/、drivers/、dts/、boards/等目录,各司其职:zephyr/ ├── arch/arm/core/# Architecture 层:CPU 架构定义│ ├── reset.S# 复位向量与启动入口(对应传统 startup.s)│ ├── vector_table.S# 中断向量表│ └── prep_c.c# 启动早期 C 初始化(对应 system_xxx.c 的 SystemInit)│ ├── soc/arm/xxx_soc/# SoC 层:芯片级资源描述│ ├── soc.c# SoC 级初始化(时钟、电源,对应传统 clock.c)│ ├── soc.h# SoC 寄存器与内存映射定义│ └── Kconfig.soc# SoC 级 Kconfig 配置开关│ ├── drivers/# Driver 层:外设驱动实现(Zephyr Driver API)│ ├── gpio/gpio_xxx.c# GPIO 驱动,通过 Devicetree 绑定实例│ ├── serial/uart_xxx.c# UART 驱动,对应传统 uart.c│ └── clock_control/# 时钟控制驱动│ ├── dts/# Devicetree 层:硬件描述│ ├── arm/xxx_soc.dtsi# SoC 级硬件拓扑(外设节点、中断、时钟)│ ├── bindings/# Devicetree 绑定定义(节点属性 schema)│ └── arm/xxx_board.dts# Board 级引脚与设备实例化│ └── boards/arm/xxx_board/# Board 层:具体开发板组合├── xxx_board.dts# 板级 Devicetree(引脚、外设使能)├── xxx_board_defconfig# 板级 Kconfig 默认配置├── CMakeLists.txt# 板级构建配置└── Kconfig.defconfig# 板级 Kconfig 定义对应关系一目了然:startup.s → arch/arm/core/reset.S:启动入口与向量表由 Architecture 层统一提供,无需每个芯片重写。system_xxx.c → arch/arm/core/prep_c.c + soc/soc.c:早期初始化和 SoC 级时钟初始化分层承担。gpio.c / uart.c → drivers/gpio/、drivers/serial/:驱动基于 Zephyr Driver API 实现,通过 Devicetree 绑定实例,与具体芯片解耦。clock.c → soc/soc.c + drivers/clock_control/:时钟树配置下沉到 SoC 层,由时钟控制驱动统一管理。linker.ld → arch/arm/core + soc/ 的链接脚本:内存布局由架构与 SoC 共同定义,Board 只需声明存储分区。这就是「BSP 不是"一个目录"」的直观体现:传统 BSP 把一切堆在一起,Zephyr 则按 Architecture → SoC → Driver → Devicetree → Board 分层,每一层只关心自己的职责,换 SoC 时只需新增 SoC 层描述,驱动与上层代码可复用。| 扩展新 SoC 的工作量 | 大,需从零移植启动、时钟、外设驱动 | 小,主要工作是写 SoC 的 Devicetree 与 Kconfig,复用 Zephyr 生态驱动 |下面是 Zephyr BSP 从芯片到应用的完整启动链路图:
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Cherry Studio 工具介绍及调用 MCP 服务案例:用 TaoToken 统一 Key 打通 ModelScope API 2026/9/29 11:50:40

Cherry Studio 工具介绍及调用 MCP 服务案例:用 TaoToken 统一 Key 打通 ModelScope API

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Linux命令入门1 2026/9/29 11:50:34

Linux命令入门1

可代替cattac:tac 是 Linux 下的一个有趣命令。它和 cat 类似,但会将文件内容的每一行倒序输出,最后一行会显示在第一行。比如:tac /tmp/flag.txt 有时候如果服务不允许 cat 命令,攻击者会尝试用 tac,因为 tac 实际上也…

阅读更多 →
KaiwuDB-lite实测:边缘时序数据库部署避坑与稳定性观察 2026/9/29 11:50:14

KaiwuDB-lite实测:边缘时序数据库部署避坑与稳定性观察

这个标题是我在群里随手留的。起因很简单:我这边有个工业现场的边缘节点要落地,需要一套轻量级的时序数据库来处理传感器数据,看到 KaiwuDB-lite 后我就直接上手测了。测完之后,脑子里就剩一句话——“你别挨骂了”。这六个字不是…

阅读更多 →
MCP协议实战:用Python+SQLite给AI Agent装上“手脚“,TaoToken统一Key接入 2026/9/29 11:50:08

MCP协议实战:用Python+SQLite给AI Agent装上“手脚“,TaoToken统一Key接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
MySQL索引下推:用两张B+树图讲清楚 2026/9/29 11:50:08

MySQL索引下推:用两张B+树图讲清楚

MySQL 索引下推:用两张 B 树图讲清楚 查询条件中明明写了“城市是杭州”,为什么数据库还会读取北京、上海用户的完整记录? 这正是理解索引下推的切入点。 索引下推(Index Condition Pushdown,简称 ICP)是一…

阅读更多 →
金融级测试开发实战:接口测试、P2P验证与JVM调优 2026/9/29 11:50:07

金融级测试开发实战:接口测试、P2P验证与JVM调优

1. 这不是“笔记”,是金融级测试开发的实战切片“测试开发笔记”这五个字,乍看平平无奇,像极了实习生随手记在Notepad里的碎片。但当你把“金融项目”“P2P”“接口测试”“OOM”这几个词叠加上去,它立刻变成一张高危操作现场的快…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉