device-tree
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseDevice Tree (Devicetree)
设备树(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 instances.
platform_device指导Agent了解Linux设备树源码(DTS):语法、绑定、phandle、设备树覆盖,以及内核OF(Open Firmware)层如何将硬件描述解析为实例。
platform_deviceWhen to Use
使用场景
- Platform driver not probing — DT mismatch
- Adding a new board or fragment overlay
.dts - Understanding ,
compatible,reg,interruptspropertiesclocks - Cross-checking hardware with
skills/kernel-dev/platform-device-model
- 平台驱动未触发探测——设备树不匹配
- 添加新的单板或片段式设备树覆盖
.dts - 理解、
compatible、reg、interrupts属性clocks - 结合交叉验证硬件
skills/kernel-dev/platform-device-model
Workflow
工作流程
1. DTS structure
1. DTS结构
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";
};
};
};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. Key properties
2. 关键属性
| Property | Meaning |
|---|---|
| Driver match string (most specific first) |
| MMIO address + length ( |
| IRQ specifier (interrupt parent defines cells) |
| phandle to clock provider |
| |
| 属性 | 含义 |
|---|---|
| 驱动匹配字符串(最具体的放在前面) |
| MMIO地址 + 长度(由 |
| IRQ描述符(中断父节点定义格式) |
| 指向时钟提供者的phandle |
| 设置为 |
3. Phandles
3. Phandles
dts
clk_uart0: clock-uart {
compatible = "vendor,clk";
#clock-cells = <0>;
};
serial@... {
clocks = <&clk_uart0>; /* phandle reference */
};dts
clk_uart0: clock-uart {
compatible = "vendor,clk";
#clock-cells = <0>;
};
serial@... {
clocks = <&clk_uart0>; /* phandle引用 */
};4. Kernel parsing
4. 内核解析流程
OF core reads DTB at boot
├── of_platform_populate() creates platform_devices
└── driver `.of_match_table` matches `compatible`c
static const struct of_device_id my_of_match[] = {
{ .compatible = "vendor,uart" },
{ }
};
MODULE_DEVICE_TABLE(of, my_of_match);OF核心在启动时读取DTB
├── of_platform_populate() 创建platform_devices
└── 驱动的`.of_match_table`匹配`compatible`字段c
static const struct of_device_id my_of_match[] = {
{ .compatible = "vendor,uart" },
{ }
};
MODULE_DEVICE_TABLE(of, my_of_match);5. Compile and inspect
5. 编译与检查
bash
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.
bash
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. Overlays (configfs)
6. 设备树覆盖(configfs)
bash
undefinedbash
undefinedRuntime overlay apply (when CONFIG_OF_OVERLAY)
运行时应用设备树覆盖(需开启CONFIG_OF_OVERLAY配置)
mkdir -p /config/device-tree/overlays/my-overlay
cat my-overlay.dtbo > /config/device-tree/overlays/my-overlay/dtbo
undefinedmkdir -p /config/device-tree/overlays/my-overlay
cat my-overlay.dtbo > /config/device-tree/overlays/my-overlay/dtbo
undefined7. Agent usage
7. Agent使用示例
/device-tree Write DTS fragment for I2C sensor on i2c1 with interrupt on GPIO5/device-tree 编写用于i2c1总线上、中断连接到GPIO5的I2C传感器的DTS片段Common Problems
常见问题
| Symptom | Cause | Fix |
|---|---|---|
| Driver not bound | | Match driver's |
| Wrong MMIO | | Follow SoC |
| IRQ not firing | Wrong interrupt parent/cells | Copy from working board DTS |
| Probe defer loop | Clock/regulator missing | |
| Overlay fails | Symbol unresolved | |
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 驱动未绑定 | | 与驱动的 |
| MMIO地址错误 | | 遵循SoC的 |
| IRQ未触发 | 中断父节点/格式错误 | 参考正常工作的单板DTS配置 |
| 探测延迟循环 | 缺少时钟/调节器 | 在设备树中添加 |
| 设备树覆盖应用失败 | 符号未解析 | 使用 |
Related Skills
相关技能
- — probe and sysfs
skills/kernel-dev/platform-device-model - —
skills/kernel/device-driversdevm_of_iomap - — HW to DT mapping
skills/baremetal/datasheet-and-refmanual-reading - — Zephyr devicetree (different tooling)
skills/embedded/zephyr - — bus node children
skills/kernel-dev/bus-drivers-i2c-spi
- — 探测与sysfs
skills/kernel-dev/platform-device-model - —
skills/kernel/device-driversdevm_of_iomap - — 硬件到设备树的映射
skills/baremetal/datasheet-and-refmanual-reading - — Zephyr设备树(工具链不同)
skills/embedded/zephyr - — 总线节点子设备
skills/kernel-dev/bus-drivers-i2c-spi