360 Secure SkillHub
360 安全技能中心

device-tree

该 Skill 提供 Linux 设备树编写与排障指导,涵盖 DTS/DTSI 结构、compatible/reg/interrupts/clocks 等属性、phandle 引用、OF 匹配、DTB 编译检查及 configfs overlay 应用,并列出常见 probe 失败原因与修复思路。

mohitmishra786
热度 0.00
最近更新 2026-10-19 04:15:11
分类:开发依赖:代码执行 / 读写文件应用场景:代码生成 / 调试排错 / 概念解释

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add mohitmishra786/low-level-dev-skills/device-tree
Metadata
name
device-tree
description
Device tree skill for Linux hardware description. Use when writing DTS/DTSI, bindings, overlays, phandles, or debugging OF platform probe failures. Activates on queries about device tree, DTS syntax, phandle, devicetree bindings, DT overlay, or OF graph.

Device Tree (Devicetree)

Purpose

Guide agents through Linux device tree source (DTS): syntax, bindings, phandles, overlays, and how the kernel OF (Open Firmware) layer parses hardware description into platform_device instances.

When to Use

  • Platform driver not probing — DT mismatch
  • Adding a new board .dts or fragment overlay
  • Understanding compatible, reg, interrupts, clocks properties
  • Cross-checking hardware with skills/kernel-dev/platform-device-model

Workflow

1. DTS structure

/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. Key properties

Property Meaning
compatible Driver match string (most specific first)
reg MMIO address + length ( #address-cells, #size-cells )
interrupts IRQ specifier (interrupt parent defines cells)
clocks / clock-names phandle to clock provider
status "disabled" skips probe

3. Phandles

clk_uart0: clock-uart {
    compatible = "vendor,clk";
    #clock-cells = <0>;
};

serial@... {
    clocks = <&clk_uart0>;  /* phandle reference */
};

4. Kernel parsing

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. Compile and inspect

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/

Bindings live at devicetree.org — always cite binding name in commits.

6. Overlays (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 usage

/device-tree Write DTS fragment for I2C sensor on i2c1 with interrupt on GPIO5

Common Problems

Symptom Cause Fix
Driver not bound compatible typo Match driver's of_match_table
Wrong MMIO #address-cells mismatch Follow SoC .dtsi
IRQ not firing Wrong interrupt parent/cells Copy from working board DTS
Probe defer loop Clock/regulator missing -EPROBE_DEFER supplier in DT
Overlay fails Symbol unresolved __fixups__ / label exports

Related Skills

  • skills/kernel-dev/platform-device-model — probe and sysfs
  • skills/kernel/device-drivers — devm_of_iomap
  • skills/baremetal/datasheet-and-refmanual-reading — HW to DT mapping
  • skills/embedded/zephyr — Zephyr devicetree (different tooling)
  • skills/kernel-dev/bus-drivers-i2c-spi — bus node children