Linux Device Tree(二):基本概念
原创
Linux Device Tree(二):基本概念
Linux Device Tree(设备树)是Linux内核中用于描述硬件架构的一种数据结构。它是一种特殊的文件,通常以文本形式存储在设备的引导分区中。设备树为内核提供了一个涉及硬件配置的详细描述,使内核能够在没有BIOS或固件赞成的情况下启动和初始化硬件设备。
1. 设备树的基本结构
设备树的基本结构由节点(node)、属性(property)和值(value)组成。
每个节点代表一个硬件设备,可以是一个物理设备,也可以是一个虚拟设备。节点由一个路径字符串来标识,路径字符串由节点名组成,节点名之间用“/”分隔。
属性用于描述节点的特定信息,如设备类型、驱动程序名称等。属性由属性名和值组成,以“name=value”的形式出现。
以下是一个简洁的设备树示例:
/ {
model = "MyBoard";
compatible = "myvender,myboard";
device_type = "system";
status = "okay";
memory {
reg = <0x0 0x80000000>;
reg-size = <0x10000000>;
};
serial@1 {
compatible = "serial";
reg = <0x0 0x1c>;
interrupt-parent = &gpiointerrupt;
interrupts = &gpiointerrupt.0;
status = "okay";
};
};
2. 节点
节点是设备树中最基本的单元,代表一个硬件设备。节点可以通过以下属性来描述:
- compatible: 设备的兼容性字符串,用于匹配内核中可用的驱动程序。
- device_type: 设备类型,通常用于描述设备的功能。
- reg: 设备的物理地址,用于设备驱动程序访问设备。
- interrupts: 设备的中断信息,包括中断控制器和中断号。
- status: 设备的状态,可以是“okay”、“disabled”等。
3. 属性
属性用于描述节点的详细信息,以下是一些常见的属性:
- name: 设备的名称,用于设备驱动程序访问设备。
- reg: 设备的寄存器地址,用于设备驱动程序配置设备。
- interrupts: 设备的中断信息,包括中断控制器和中断号。
- clocks: 设备的时钟信息,包括时钟控制器和时钟名称。
- phandle: 引用其他节点的属性值。
4. 设备树文件
设备树文件通常以dtb(Device Tree Blob)格式存储,这是一种二进制格式,可以减少引导过程中的处理时间。在Linux系统中,设备树文件通常位于设备引导分区中,例如根文件系统的boot目录下。
以下是一个设备树文件的示例:
/dts-v1/;
/ {
model = "MyBoard";
compatible = "myvender,myboard";
device_type = "system";
status = "okay";
memory {
reg = <0x0 0x80000000>;
reg-size = <0x10000000>;
};
serial@1 {
compatible = "serial";
reg = <0x0 0x1c>;
interrupt-parent = &gpiointerrupt;
interrupts = &gpiointerrupt.0;
status = "okay";
};
};
5. 设备树的作用
设备树在Linux内核中扮演着重要的角色,以下是设备树的一些核心作用:
- 提供硬件信息:设备树为内核提供了硬件设备的详细信息,包括设备类型、地址、中断