新闻详情

新闻详情

首页 / 资讯中心 / 详情

Zephyr BSP: 26-Devicetree 描述 Company SoC

发布时间:2026/9/29 3:50:36来源:尧图网络
Zephyr BSP: 26-Devicetree 描述 Company SoC
摘要:本文讲解 Zephyr Devicetree 的核心概念与实战用法。你将理解 Devicetree 如何描述 SoC 硬件、.dtsi与.dts的分工、compatible如何连接驱动、reg/interrupts/clocks等关键属性,以及 Devicetree 如何最终生成 C 宏进入驱动代码。文章从最小 Company SoC 示例出发,串联 Kconfig、DTS、CMake 与 Driver Model,帮助你建立完整的 BSP 世界观。Devicetree:把 Company SoC 描述给 Zephyr到了这里,你已经把:BOARD → SOC → ARCH → CMake → SoC code → Clock/Reset → IRQ这条链路基本打通了。下一步非常关键:Zephyr 怎么知道你的 Company SoC 里面到底有什么硬件?答案就是:Devicetree可以把它理解成:Kconfig 决定"编译哪些东西",Devicetree 决定"你的 SoC 上有哪些硬件,以及它们在哪里、怎么连接"。1. 先建立整个 BSP 的世界观假设你的公司做了一颗 SoC:Company SoC │ ├── CPU │ └── Cortex-M4 │ ├── Clock Controller │ └── 0x4000_0000 │ ├── Reset Controller │ └── 0x4000_1000 │ ├── GPIO │ └── 0x4800_0000 │ ├── UART0 │ └── 0x4001_0000 │ ├── UART1 │ └── 0x4001_1000 │ ├── Timer0 │ └── 0x4002_0000 │ └── Interrupt Controller └── CPU private/system interrupt你当然可以直接在 C 代码里写:# define UART0_BASE 0x40010000# define UART0_IRQ 5但这不是 Zephyr 推荐的方式。Zephyr 希望你描述成:Devicetree │ ▼ UART0node│ ├── reg ├── interrupts ├── clocks ├── status └── compatible │ ▼ UART Driver也就是说:硬件描述和驱动代码分离。2. Company SoC 的 Devicetree 放在哪里?典型结构:zephyr/ └── dts/ ├── arm/ ├── riscv/ ├── x86/ └── bindings/ soc/ └── company/ └── my_soc/ ├── my_soc.dtsi └──... boards/ └── company/ └── my_board/ ├── my_board.dts ├── my_board.yaml └──...一个很重要的原则:SoC hardware ↓ SoC .dtsi Board hardware ↓ Board .dts例如:my_soc.dtsi描述:CPU UART0 UART1 GPIO CLOCK RESET TIMER PLIC/GIC/IRQ而:my_board.dts描述:LED Button Board connector External crystal Board-specific peripherals chosen aliases3. .dtsi 和 .dts 到底是什么关系?这是学习 Zephyr Devicetree 时必须彻底理解的一点。假设:Company SoC有:UART0 UART1 GPIO0 TIMER0那么可以建立:my_soc.dtsi例如:/{cpus{cpu0: cpu@0{compatible="company,my-cpu";device_type="cpu";};};soc{uart0: uart@40010000{compatible="company,my-uart";reg=0x40010000 0x1000;status="disabled";};uart1: uart@40011000{compatible="company,my-uart";reg=0x40011000 0x1000;status="disabled";};gpio0: gpio@48000000{compatible="company,my-gpio";reg=0x48000000 0x1000;status="disabled";};};};注意:status="disabled";这并不是说硬件不存在。而是:这个 SoC 提供了这个硬件,但具体 Board 是否使用,由 Board DTS 决定。4. Board DTS 再打开它例如:#include company/my_soc.dtsi/{model="Company MyBoard";compatible="company,my-board";};uart0{status="okay";};gpio0{status="okay";};最终形成:│ │ ┌────────▼────────┐ │ Company SoC │ │ │ │ UART0 disabled │ │ UART1 disabled │ │ GPIO0 disabled │ └────────┬────────┘ │ │ include ▼ my_board.dts │ ┌─────┴─────┐ │ │ UART0 GPIO0 okay okay所以:SoC DTSI 描述"芯片有什么",Board DTS 决定"这块板子用了什么"。5. compatible 是 Devicetree 最重要的字段之一例如:uart0: uart@40010000{compatible="company,my-uart";reg=0x40010000 0x1000;};这里:compatible="company,my-uart";实际上是在告诉 Zephyr:“这个节点应该由哪一种 driver 来处理?”对应 binding:dts/bindings/ serial/ company,my-uart.yaml例如:compatible:"company,my-uart"include: - base.yaml properties: reg: required:trueinterrupts: required:true于是关系变成:DTS │ │ compatible ▼"company,my-uart"│ ▼ Binding │ ▼ Driver6. Devicetree Binding 到底是什么?可以把 Binding 理解成:Devicetree 节点的"类型定义"。比如 C:structuart{uintptr_tbase;intirq;uint32_tclock;}
网站建设高端定制企业官网
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
📞 ✉