type
status
date
slug
summary
tags
category
created days
new update day
icon
password
Created_time
Aug 25, 2025 09:10 AM
Last edited time
Dec 15, 2025 09:16 AM
一、设备树诞生的根本原因:ARM生态的"碎片化困境"
传统BSP开发模式的问题:

典型问题案例:三星S3C2410 ARM9处理器在内核中的实现:
arch/arm/mach-s3c2410/mach-smdk2410.c(1500+行代码)
- 硬编码资源定义:
后果:内核中仅ARM架构就有200+个mach-目录,每次硬件变更都需要重新编译内核。
二、设备树设计框架:分层硬件描述模型
设备树框架架构图:

典型设备树结构示例:
三、设备树核心机制深度解析
1. 地址映射机制

实际案例:
2. 中断映射机制

代码实现:
四、设备树编译与运行时流程

关键步骤详解:
- 编译阶段:
- 启动阶段:
- 内核解析:
- 驱动匹配:
五、高级应用:设备树覆盖(Overlay)实战
Overlay框架图:

全志D1开发板添加PWM设备:
加载流程:
六、设备树与传统开发模式对比

开发流程对比表:
阶段 | 传统模式 | 设备树模式 |
硬件变更 | 修改内核源码,重新编译 | 修改.dts,单独编译DTB |
驱动获取参数 | 从platform_data结构体读取 | 通过OF API解析设备树节点属性 |
多板卡支持 | 每个板卡需独立内核镜像 | 单一内核+不同DTB文件 |
外设扩展 | 修改内核并重新编译 | 动态加载DT Overlay |
驱动代码对比:
- 分层设计原则:
- 兼容性声明规范:
- 引脚控制设计:
设备树通过结构化数据描述(DTS)、标准化编译链(DTC)、运行时解析框架(OF API)三位一体的设计,实现了:
- 硬件抽象层:

核心价值点:
- 解耦性
- 可扩展性
- 可维护性:减少80%板级特定代码
- 标准化
- 性能数据:
- 内核镜像大小减少:35-60%
- 启动时间减少:15-30% (省去硬编码初始化)
- 支持硬件变体数量:无限扩展
参考资料
- 作者:tangcuyu
- 链接:https://expoli.tech/articles/2025/12/15/In-Depth-Analysis-of-Linux-Device-Tree-(DTS)%3A-Design-Principles-Implementation-Framework-and-Case-Studies
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章
