新闻详情

新闻详情

首页 / 资讯中心 / 详情

Zephyr BSP: 27-Binding定义硬件

发布时间:2026/9/29 3:50:36来源:尧图网络
Zephyr BSP: 27-Binding定义硬件
摘要:本文是 Zephyr BSP 开发系列的第 27 篇,深入讲解 Devicetree Binding 的核心概念。Binding 是硬件在 Zephyr 中的"数据结构定义",它规定了compatible对应的硬件节点允许哪些属性、每个属性的类型与是否必填。文章从 Binding 与 DTS 的"类型与对象"关系讲起,逐步展开compatible的匹配机制、properties与required的语义、属性类型约束、include继承复用,以及 Binding 如何通过 DT macros 最终影响 Driver 的 C 代码生成。理解 Binding,是建立"数据驱动" BSP 开发思想、完成从硬件规格到软件驱动契约的关键一步。Binding:告诉 Zephyr “我的硬件是什么”在上一篇26 — Devicetree:把 Company SoC 描述给 Zephyr之后,我们已经能写:uart0: uart@40000000{compatible="company,uart";reg=0x40000000 0x1000;interrupts=50;status="okay";};但这里有一个关键问题:Zephyr 怎么知道 company,uart 允许哪些属性?reg 是什么?interrupts 是什么?clock-frequency 能不能写?current-speed 是不是合法?compatible = “company,uart” 到底对应什么硬件?答案就是:Devicetree BindingBinding 可以理解成:Devicetree Binding = 你的硬件在 Zephyr 中的"数据结构定义"。如果 Devicetree 是:“这块板子上有什么硬件?”那么 Binding 就是:“这种硬件应该长什么样、有哪些属性、每个属性是什么类型?”一、先把整个关系图建立起来到了 BSP 开发阶段,你应该形成这样一张脑图:Company SoC │ ▼ ┌──────────────────┐ │ Hardware IP │ │ │ │ UART / SPI / GPIO│ │ Timer / I2C... │ └────────┬─────────┘ │ │ 硬件规格 ▼ ┌──────────────────┐ │ Devicetree │ │ Binding │ │ │ │ company,uart │ │ company,spi │ │ company,timer │ └────────┬─────────┘ │ │ compatible ▼ ┌──────────────────┐ │ Board .dts │ │ │ │ uart0: uart@... │ │{│ │ compatible=│ │"company,uart";│ reg=... │ │interrupts=... │ │};│ └────────┬─────────┘ │ ▼ Devicetree Compiler │ ▼ generated devicetree │ ▼ C / C++ macros │ ▼ DEVICE_DT_DEFINE()│ ▼ struct device │ ▼ UART Driver所以:Binding ↓ 规定 DTS 节点可以描述什么 DTS ↓ 描述具体板子上的实例 Driver ↓ 真正操作硬件这三个东西不要混在一起。二、Binding 本质上是什么?一个最简单的 Binding:description: Company UART controller compatible:"company,uart"properties: reg: required:trueinterrupts: required:trueclock-frequency: type: int required:falsecurrent-speed: type: int required:false你可以把它理解成类似 C 的:struct company_uart_dt{reg;interrupts;clock_frequency;current_speed;};当然,Binding 并不是 C struct。它实际上是一个YAML schema。它告诉 Zephyr:compatible="company,uart"这种节点:必须有 reg 必须有 interrupts 可以有 clock-frequency 可以有 current-speed 为了帮你快速建立概念边界,这里把 **Binding、DTS、Driver** 三者放在一起对比:|维度|Binding|DTS|Driver||---|---|---|---||**作用**|定义某类硬件"允许有哪些属性、每个属性是什么类型、是否必填"|描述某块具体板子上"有哪些硬件实例、每个实例的具体配置值"|真正操作硬件寄存器,实现读写、初始化、中断处理等行为||**定义位置**
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

高速电路信号完整性分析:从原理到实战避坑指南 2026/9/29 4:41:51

高速电路信号完整性分析:从原理到实战避坑指南

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

阅读更多 →
Win7安装不识别USB 3.0?Intel_USB3_Win7驱动注入与排错指南 2026/9/29 4:41:51

Win7安装不识别USB 3.0?Intel_USB3_Win7驱动注入与排错指南

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

阅读更多 →
DDR协议、时序与PHY实战:MIG配置到AXI带宽优化 2026/9/29 4:41:51

DDR协议、时序与PHY实战:MIG配置到AXI带宽优化

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

阅读更多 →
Linux命令PATH溯源:三层定位法精准查找环境变量配置文件 2026/9/29 4:41:51

Linux命令PATH溯源:三层定位法精准查找环境变量配置文件

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

阅读更多 →
Ubuntu 安装搜狗输入法:Fcitx4、Xorg 与环境变量排错 2026/9/29 4:41:45

Ubuntu 安装搜狗输入法:Fcitx4、Xorg 与环境变量排错

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

阅读更多 →
右侧漂浮完美代码:定位、动画与性能优化的前端实践 2026/9/29 4:41:45

右侧漂浮完美代码:定位、动画与性能优化的前端实践

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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