DTS (Device Tree Source) 是Linux系统中用于描述硬件配置的一种数据结构,主要用于嵌入式系统和ARM架构的设备。它是设备树(Device Tree)的源代码形式,通过编译后会生成DTB (Device Tree Blob)文件,供Linux内核在启动时使用。
一个典型的DTS文件包含以下部分:
/dts-v1/; // 设备树版本声明
/ { // 根节点
model = "My Board"; // 板卡型号
compatible = "vendor,board"; // 兼容性标识
cpus { // CPU节点
// CPU描述...
};
memory@80000000 { // 内存节点
reg = <0x80000000 0x20000000>;
};
serial@101f0000 { // 串口设备节点
compatible = "arm,pl011";
reg = <0x101f0000 0x1000>;
interrupts = <0 12 4>;
};
};
创建一个.dts
文件描述你的硬件配置,例如myboard.dts
。
使用设备树编译器(DTC)将DTS编译为DTB:
dtc -I dts -O dtb -o myboard.dtb myboard.dts
将生成的.dtb
文件与内核一起使用:
bootz 0x82000000 - 0x83000000
bootm <kernel_addr> - <dtb_addr>
在运行的Linux系统中查看设备树:
# 查看/sys/firmware/devicetree目录
ls /sys/firmware/devicetree/base
# 使用dtc反编译DTB
dtc -I fs /sys/firmware/devicetree/base
{}
定义name = value;
形式of_*
系列API在内核中访问设备树/proc/device-tree
查看当前设备树// myboard.dts
/dts-v1/;
#include "soc-base.dtsi"
/ {
model = "My Custom Board";
compatible = "myvendor,myboard";
memory {
device_type = "memory";
reg = <0x80000000 0x20000000>; // 512MB内存
};
leds {
compatible = "gpio-leds";
led0 {
label = "heartbeat";
gpios = <&gpio0 15 0>;
linux,default-trigger = "heartbeat";
};
};
};
掌握DTS对于嵌入式Linux开发至关重要,它使得硬件描述更加灵活和可维护。