设备树简介
设备树的组成
设备树:由1个dts文件+n个dtsi文件组成,它们编译而成dtb(二进制的可执行文件)
dts: 在ARM Linux在,一个.dts文件对应一个ARM的machine,一般放置在内核的arch/arm/boot/dts/目录
dtsi: soc厂商会把soc公共的特性和多块开发板公用的特性提炼为dtsi,而dts则负责描述某个具体的产品(开发板)的特性。dts直接或间接的包含多个dtsi(类似于c语言的头文件,使用include包含),就体现了一个完整的产品(开发板)所有的特性
dtb: dtb(Device Tree Blob),dts经过dtc编译之后会得到dtb文件,dtb通过Bootloader引导程序加载到内核。所以Bootloader需要支持设备树才行;Kernel也需要加入设备树的支持
常用节点
/{
// "/{" 表示 根节点 ,dts最开始的地方,可以理解为程序的main入口
//子节点
cpu{
// cpu节点
name = val; // 属性名name,val是属性值。
//val形式:
//1 值
//2)"string"(双引号括起来);
//3)<u32 u32 u32> (尖括号,有多少个32位就放多少个,空格间隔);
//4) [12 34 56](16进制单字节)。
// val可以是这3种形式组合,如<0x123>,"abcd",[34]
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
compatible = "arm,cortex-a9";
reg = <0>;
};
cpu@1 {
compatible = "arm,cortex-a9";
reg = <1>;
};
};
//子节点
memory{
// 内存节点
};
//子节点
I2C{
// I2C控制器节点
};
};
注意cpus和cpus的2个cpu子结点的命名,它们遵循的组织形式为:
name(必选项)@unit-address(可选项)
name(必选项):是一个ASCII字符串,用于描述结点对应的设备类型
如3com Ethernet适配器对应的结点name宜为ethernet,而不是3com509。
unit-address(可选项)
如果一个结点描述的设备有地址,则应该给出**@unit-address**。
多个相同类型设备结点的name可以一样,只要unit-address不同即可,
如本例中含有cpu@0、cpu@1以及serial@101f0000与serial@101f2000这样的同名结点。
常用属性
例子
/ {
compatible = "acme,coyotes-revenge";
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent = <