用途
Device Tree 技能用于指导代理处理 Linux 设备树源码(DTS),包括语法、binding 绑定、phandle 引用、overlay 叠加,以及内核 OF(Open Firmware)层如何将硬件描述解析为 platform_device 实例。当平台驱动未能成功探测(probe)且怀疑是设备树不匹配、需要新增板级 .dts 或片段 overlay、需要理解 compatible/reg/interrupts/clocks 属性,或需要把硬件信息与 platform-device-model 相关内容交叉核对时,可使用本技能。
主要能力
DTS 结构
示例展示了 /dts-v1/ 版本声明、#include 引入 .dtsi、根节点中的 model 与 compatible,以及 soc 节点下带标签的 uart0 节点,包含 compatible、reg、interrupts、clocks、status 等属性。
关键属性
- compatible:驱动匹配字符串,最具体的写在最前。
- reg:MMIO 地址与长度,受 #address-cells、#size-cells 影响。
- interrupts:中断描述符,由中断父节点的 cells 定义。
- clocks / clock-names:指向时钟提供者的 phandle。
- status:为 "disabled" 时跳过探测。
Phandle
通过标签(如 clk_uart0: clock-uart)定义节点,并在其他节点中以 &clk_uart0 形式引用,实现节点间的引用关系。
内核解析流程
OF 核心在启动时读取 DTB,由 of_platform_populate() 创建 platform_device,驱动通过 .of_match_table 匹配 compatible。示例中给出 of_device_id 结构与 MODULE_DEVICE_TABLE(of, my_of_match) 的写法。
编译与查看
- dtc -I dts -O dtb -o board.dtb board.dts
- dtc -I fs -O dts /proc/device-tree 2>/dev/null | less
- ls /sys/firmware/devicetree/base/
绑定文档位于 devicetree.org,提交时应注明 binding 名称。
Overlay(configfs)
在支持 CONFIG_OF_OVERLAY 时,可运行时应用 overlay:创建 /config/device-tree/overlays/my-overlay 目录,并将 my-overlay.dtbo 写入其中的 dtbo 文件。
代理使用示例
/device-tree Write DTS fragment for I2C sensor on i2c1 with interrupt on GPIO5
常见问题
- 驱动未绑定:compatible 拼写错误,需与驱动的 of_match_table 匹配。
- MMIO 错误:#address-cells 不匹配,参照 SoC .dtsi。
- 中断不触发:中断父节点或 cells 错误,可从可用板级 DTS 复制。
- Probe 延迟循环:缺少时钟或稳压器,需在 DT 中提供 -EPROBE_DEFER 的供应者。
- Overlay 失败:符号未解析,涉及 fixups 与标签导出。
相关技能
- platform-device-model:探测与 sysfs
- device-drivers:devm_of_iomap
- datasheet-and-refmanual-reading:硬件到 DT 的映射
- zephyr:Zephyr devicetree(工具链不同)
- bus-drivers-i2c-spi:总线节点的子节点
限制
资料未提供该技能的收费方式、适用平台版本范围、安装命令及具体授权信息,暂未提供。