Devicetree Specification v0.4 核心属性实战:5分钟掌握 reg、interrupts 与 ranges 配置 📅 2026/7/6 1:21:26 Devicetree Specification v0.4 核心属性实战5分钟掌握 reg、interrupts 与 ranges 配置1. 设备树核心属性快速入门对于Linux驱动开发者而言设备树Device Tree已成为描述硬件资源的标准化方式。相比传统硬编码方式设备树通过结构化数据分离硬件描述与驱动代码极大提升了代码的可移植性。本文将聚焦三个最核心的属性配置reg属性定义设备寄存器地址空间格式起始地址 长度 [起始地址2 长度2...]父节点的#address-cells和#size-cells决定地址/长度所占单元格数interrupts属性声明设备中断信号格式中断号 触发方式需配合interrupt-parent指定中断控制器ranges属性地址空间转换格式子地址 父地址 长度用于不同总线地址域的映射提示设备树编译器(dtc)会将.dts文本转换为二进制.dtb文件内核启动时解析此结构2. 典型硬件配置实例分析2.1 UART设备节点配置uart0: serialfe001000 { compatible ns16550a; reg 0xfe001000 0x100; interrupts 42 IRQ_TYPE_LEVEL_HIGH; clock-frequency 1843200; status okay; };关键参数解析regUART寄存器基地址0xfe001000范围256字节interrupts中断号42高电平触发clock-frequency波特率时钟1.8432MHz2.2 GPIO控制器配置gpio: gpio-controllerff710000 { compatible snps,dw-apb-gpio; reg 0xff710000 0x1000; #gpio-cells 2; interrupts 15 IRQ_TYPE_EDGE_RISING; gpio-ranges pinctrl 0 0 32; };特殊属性说明#gpio-cells定义GPIO描述符格式通常为 gpio-rangesGPIO编号与pinctrl的映射关系2.3 带中断的外设配置eth0: ethernet1f000000 { compatible smsc,lan9118; reg 0x1f000000 0x1000; interrupts 28 IRQ_TYPE_LEVEL_LOW; interrupt-parent intc; phy-mode mii; };中断相关要点当存在多个中断控制器时需显式指定interrupt-parent触发类型常用值IRQ_TYPE_LEVEL_HIGH/LOW电平触发IRQ_TYPE_EDGE_RISING/FALLING边沿触发3. 属性配置速查表属性作用域格式示例必需父节点属性reg设备节点0x1000 0x100#address-cells, #size-cellsinterrupts设备节点15 IRQ_TYPE_EDGE_RISINGinterrupt-parentranges总线节点0x0 0xe0000000 0x100000子/父节点的#address-cells#address-cells总线节点1-#size-cells总线节点1-4. 复合设备树示例以下是一个包含多设备的完整DTS片段/ { #address-cells 1; #size-cells 1; intc: interrupt-controllerf0000000 { compatible arm,gic-400; reg 0xf0000000 0x1000; interrupt-controller; #interrupt-cells 3; }; soc { #address-cells 1; #size-cells 1; ranges 0x0 0xe0000000 0x10000000; uart0: serial1000 { compatible ns16550a; reg 0x1000 0x100; interrupts 0 8 4; /* SPI 8, level-high */ clocks osc24m; }; i2c2000 { #address-cells 1; #size-cells 0; reg 0x2000 0x100; eeprom50 { compatible atmel,24c02; reg 0x50; }; }; }; };5. 调试与验证技巧dtc编译检查dtc -I dts -O dtb -o output.dtb input.dts内核启动参数bootargs earlycon devicetreedebug运行时查看ls /proc/device-tree/ cat /proc/device-tree/soc/serial1000/compatible常用调试工具fdtdump查看DTB二进制内容dtc -I fs /sys/firmware/devicetree/base导出运行时设备树掌握这些核心属性的正确使用方式可以解决90%的硬件描述问题。实际开发中建议结合具体芯片的参考手册确保寄存器地址和中断号的正确性。