news 2026/6/14 1:36:35

嵌入式Linux驱动开发指南 —— 设备树语法与编译工具 —— 读懂这张“藏宝图“(1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式Linux驱动开发指南 —— 设备树语法与编译工具 —— 读懂这张“藏宝图“(1)

上一章我们讲了设备树的历史背景和基本概念,现在手里应该有一个模糊的概念了:设备树是一种描述硬件的数据结构,内核通过它来了解板子上有什么设备。

这一章,我们先简单了解一下DTC编译器是如何把.dts文本变成内核能识别的.dtb二进制的,然后重点讲解设备树的语法规则 ——看到任何一个.dts文件,都能一眼看穿它的结构和含义

DTC编译器:文本到二进制的魔法

dts / dtsi / dtb三兄弟

在设备树的生态里,你会经常看到三种文件后缀,搞清楚它们的区别是第一步:

  • .dts

设备树源文件(Device Tree Source),给人看的文本格式。内核不会直接读取它,必须先编译。

  • .dtsi

设备树头文件(Device Tree Source Include),类似C语言中的.h文件,包含通用的硬件定义,被多个.dts引用。永远不要直接修改厂商的.dtsi文件!

  • .dtb

设备树二进制文件(Device Tree Blob),内核真正加载的格式,由DTC编译器从.dts生成。

DTC工作原理

DTC(Device Tree Compiler)本质上就是一个编译器,它的源码在内核的scripts/dtc目录下。和所有编译器一样,它分为三个阶段:

(1)词法分析

dtc-lexer.l:把文本切分成Token,比如把compatible = "fsl,imx6ull";识别为标识符赋值号字符串分号

(2)语法分析

dtc-parser.y:根据文法规则,把Token流构建成内存中的树形结构。

(3)代码生成

flattree.c:遍历语法树,“拍扁”成线性的DTB二进制格式。

DTB二进制结构

DTB文件由四部分组成:

+------------------+ | fdt_header | 文件头(40字节,含魔术数字 0xd00dfeed) +------------------+ | memory reserve | 内存保留区域 +------------------+ | structure block| 结构块(节点和属性,用 FDT_BEGIN_NODE / FDT_PROP 等标记) +------------------+ | strings block | 字符串块(属性名,共享存储以节省空间) +------------------+

DTB使用大端序(Big Endian),所以用hexdump看到的魔术数字是d0 0d fe ed

常用命令

# 编译 DTS → DTB dtc -I dts -O dtb -o output.dtb input.dts # 反编译 DTB → DTS(调试利器) dtc -I dtb -O dts /boot/imx6ull-14x14-evk.dtb > current.dts # 查看完整 DTB 信息 fdtdump output.dtb

在内核构建中,make dtbs会根据arch/arm/boot/dts/Makefile中的配置自动选择并编译对应的 DTS文件

以上就是DTC和DTB的核心要点。理解了编译链路,接下来我们进入正题 ——设备树的语法

更多内容请看下回。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 1:32:13

推荐一家太原团建包车公司

在太原,组织一场成功的团队建设活动,交通保障往往是决定体验感的关键一环。无论是去晋祠感受历史文化,还是前往崛围山徒步登山,一辆安全、舒适、准时的包车,能让参与者将精力集中在团队互动上。然而,推荐租…

作者头像 李华
网站建设 2026/6/14 1:31:55

UndertaleModTool终极指南:零基础掌握游戏修改的完整教程

UndertaleModTool终极指南:零基础掌握游戏修改的完整教程 【免费下载链接】UndertaleModTool The most complete tool for modding, decompiling and unpacking Undertale (and other GameMaker games!) 项目地址: https://gitcode.com/gh_mirrors/un/UndertaleMo…

作者头像 李华
网站建设 2026/6/14 1:25:54

保姆级教程:在PlatformIO环境下配置ESP32-S3双I2S接口驱动麦克风和功放

从零开始:ESP32-S3双I2S接口驱动麦克风与功放全流程解析在嵌入式音频开发领域,ESP32-S3凭借其双I2S接口和强大的处理能力,成为实现实时音频采集与播放的理想选择。本文将带领初学者完成从开发环境搭建到双I2S设备联调的完整过程,重…

作者头像 李华
网站建设 2026/6/14 1:25:50

企业网络实战:如何用一台三层交换机替代多台路由器,低成本实现部门间网络隔离与互通?

企业网络实战:用三层交换机低成本实现多部门网络隔离与互通在中小企业网络架构中,随着业务规模扩大,财务、研发、市场等部门往往需要独立的网络环境。传统方案为每个部门部署独立路由器,但成本高昂且管理复杂。本文将分享如何利用…

作者头像 李华
网站建设 2026/6/14 1:24:13

OpenCore Legacy Patcher完整指南:让旧Mac焕然一新的神奇工具

OpenCore Legacy Patcher完整指南:让旧Mac焕然一新的神奇工具 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台老旧的Mac电脑&#xf…

作者头像 李华
网站建设 2026/6/14 1:23:39

用STM32CubeMX HAL库搞定DDSM210伺服电机:从Cube配置到串口通信的保姆级教程

STM32CubeMX与HAL库驱动DDSM210伺服电机全流程解析在机器人关节、AGV驱动轮等精密运动控制场景中,直驱伺服电机因其高集成度和精准控制特性成为首选。本文将完整展示如何通过STM32CubeMX可视化工具和HAL硬件抽象层库,快速构建DDSM210伺服电机的控制系统。…

作者头像 李华