Linux DTS(Device Tree Source)是Linux系统中用于描述硬件配置的一种数据结构,主要用于嵌入式系统。以下是它的核心作用、工作原理及示例:
dtc
工具将.dts
编译成二进制.dtb
。compatible
属性绑定设备与驱动(如compatible = "ti,omap3-uart"
)。uart0: serial@101f0000 {
compatible = "ti,omap3-uart";
reg = <0x101f0000 0x1000>; // 寄存器地址和长度
interrupts = <72>; // 中断号
clock-frequency = <48000000>; // 时钟频率
};
static const struct of_device_id uart_dt_ids[] = {
{ .compatible = "ti,omap3-uart" },
{}
};
MODULE_DEVICE_TABLE(of, uart_dt_ids);
dtc -I dts -O dtb -o output.dtb input.dts
dtc -I dtb -O dts -o output.dts input.dtb
ls /proc/device-tree
或 dtc -I fs /proc/device-tree
特性 | DTS(嵌入式) | ACPI(x86) |
---|---|---|
配置方式 | 静态描述(DTB文件) | 动态固件表(AML代码) |
平台 | ARM/RISC-V/MIPS等 | x86/x64 |
灵活性 | 需手动编写/修改DTS | 由BIOS/UEFI自动提供 |
Q: DTS和驱动的关系?
A: DTS描述硬件资源(如寄存器地址),驱动通过compatible
属性匹配并操作硬件。
Q: 如何调试DTS问题?
A: 检查内核启动日志(dmesg | grep of_
),或使用fdtdump
工具分析DTB。
DTS是Linux嵌入式系统的“硬件蓝图”,通过解耦硬件描述与内核代码,显著提升跨平台兼容性和维护性。掌握DTS是嵌入式开发的核心技能之一。