核心概念hardware-interfaces
设备树
理解设备树节点、属性、DTS、DTB 和 overlay,以及 Linux 如何用硬件描述匹配驱动。
**设备树(Devicetree,DT)**是以树形节点和属性描述系统硬件的数据结构。它主要表达不能由操作系统可靠自动发现的硬件,使内核不必把每块板卡的细节硬编码在程序中。
serial@1000 { compatible = "vendor,uart"; reg = <0x1000 0x100>; status = "okay";};compatible 用于设备与驱动匹配;reg、interrupts 等属性的具体格式由父节点和对应 binding 共同规定。
从源码到运行时
Section titled “从源码到运行时”DTS / DTSI 源文件 ↓ Device Tree Compiler(dtc)DTB 二进制 ↓ 固件或引导加载器选择,并可合并 overlay内核接收的 Flattened Devicetree ↓ Linux 解析/proc/device-tree 中的运行时视图在 Raspberry Pi 上,固件会把基础设备树与已启用的 overlay 组合后交给 Linux。因此 /proc/device-tree 反映的是本次启动实际收到的结果,不一定与某个原始 DTS 文件逐字一致。
- 字符串属性以空字符结尾,直接
cat时可能看不到换行。 compatible是按优先级排列的字符串列表。<u32>cell 在扁平设备树中使用大端编码;数值属性不应按普通文本解释。- 节点存在不等于设备一定可用,还要结合
status、驱动、时钟、中断和引脚配置判断。
- 设备树是硬件描述,不是驱动程序,也不是自动探测工具。
- overlay 是对基础树的有目标修改,不是完整设备树的替代品。
- 修改 DTS、DTB 或启动配置存在无法启动和硬件冲突风险;学习阶段应先只读检查运行时树。
- 不同板卡的
compatible、地址和中断不能照抄,即使外设型号相同也要查对应 binding。