mcpField
D
device-tree

device-tree

github.com/mohitmishra786开发269326 次安装18 周前更新
代码仓库

关于 device-tree

device-tree 是面向处理 Linux 设备树源文件(DTS)的 Agent 技能,涵盖语法、内核解析、叠加层、编译和硬件描述不匹配的排查。

主要功能

  1. 01DTS 结构与关键属性
  2. 02phandle 与设备引用
  3. 03内核 OF 解析流程
  4. 04DTS 编译与检查
  5. 05configfs 叠加层
  6. 06常见探测问题排查

适用场景

  1. 01为新板卡编写 DTS
  2. 02排查驱动未绑定或未探测
  3. 03检查中断、时钟和 MMIO 配置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill device-tree

安装后在 Claude Code 中输入/device-tree确认已加载。

详细介绍

Device Tree(设备树)

用途

指导 Agent 使用 Linux 设备树源文件(DTS):语法、绑定、phandle、覆盖层,以及内核 OF(Open Firmware)层如何将硬件描述解析为 platform_device 实例。

适用场景

  • 平台驱动未能探测到设备——DT 不匹配
  • 添加新的板级 .dts 或片段覆盖层
  • 理解 compatible、reg、interrupts、clocks 属性
  • 将硬件信息与 skills/kernel-dev/platform-device-model 交叉核对

工作流

1. DTS 结构
/dts-v1/;
#include "soc.dtsi"

/ {
    model = "My Board";
    compatible = "vendor,my-board", "vendor,soc-family";

    soc {
        uart0: serial@40011000 {
            compatible = "vendor,uart";
            reg = <0x40011000 0x400>;
            interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&clk_uart0>;
            status = "okay";
        };
    };
};
2. 关键属性
属性含义
compatible驱动匹配字符串(按具体程度从高到低排列)
regMMIO 地址 + 长度( #address-cells、#size-cells )
interruptsIRQ 说明符(中断父节点定义单元格)
clocks / clock-names指向时钟提供方的 phandle
status"disabled" 会跳过探测
3. Phandle
clk_uart0: clock-uart {
    compatible = "vendor,clk";
    #clock-cells = <0>;
};

serial@... {
    clocks = <&clk_uart0>;  /* phandle reference */
};
4. 内核解析
OF core reads DTB at boot
├── of_platform_populate() creates platform_devices
└── driver `.of_match_table` matches `compatible`
static const struct of_device_id my_of_match[] = {
    { .compatible = "vendor,uart" },
    { }
};
MODULE_DEVICE_TABLE(of, my_of_match);
5. 编译和检查
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——提交时务必注明绑定名称。

6. 覆盖层(configfs)
# Runtime overlay apply (when CONFIG_OF_OVERLAY)
mkdir -p /config/device-tree/overlays/my-overlay
cat my-overlay.dtbo > /config/device-tree/overlays/my-overlay/dtbo
7. Agent 用法
/device-tree Write DTS fragment for I2C sensor on i2c1 with interrupt on GPIO5

常见问题

现象原因修复方法
驱动未绑定compatible 拼写错误与驱动的 of_match_table 匹配
MMIO 地址错误#address-cells 不匹配遵循 SoC .dtsi
IRQ 未触发中断父节点或单元格错误从正常工作的板级 DTS 复制
探测延迟循环缺少时钟/稳压器DT 中的 -EPROBE_DEFER 供应方
覆盖层失败符号未解析__fixups__ / 标签导出

相关技能

  • skills/kernel-dev/platform-device-model — 探测和 sysfs
  • skills/kernel/device-drivers — devm_of_iomap
  • skills/baremetal/datasheet-and-refmanual-reading — 从硬件映射到 DT
  • skills/embedded/zephyr — Zephyr 设备树(工具链不同)
  • skills/kernel-dev/bus-drivers-i2c-spi — 总线节点子节点

评论

支持 Markdown