SuperAPI AI 工具集

device-tree

编程与开发

查看项目

更新于 10-15 15:11

技能介绍

用途

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:总线节点的子节点

限制

资料未提供该技能的收费方式、适用平台版本范围、安装命令及具体授权信息,暂未提供。