Device Tree学习
Device Tree最初是从PowerPC的Flattened Device Tree(FDT)引入的,它是一种描述硬件的数据结构。Device Tree由一系列被命名的结点(node)和属性(property)组成,结点本身可以包含子结点。而属性则是成对出现的name和value构成,在device tree中一般可以描述如下的一些信息:
- CPU数量和类别
- 内存基地址和大小
- 总线和桥
- 外设连接
- 中断控制器和中断使用情况
- clock控制器和clock使用情况
设备树可以形象地理解为画一棵电路板上的CPU,总线,设备等组成的树,linux内核通过展开这些信息从而将特定的资源绑定给相应的设备。
基本结构
device tree用文本描述硬件,通过编译生成内核可以识别的二进制。DTS(Device tree source)是ASCII格式的device tree描述,适合人类的阅读。device tree实际也会有一些共有的信息,一般我们会将这些共有的信息放到提炼成一个.dtsi的文件,相当于C语言的头文件,当然.dtsi
文件也是可以包含.dtsi
文件的。一个基本的dts文件举例如下:
/ {
node1 {
a-string-property = "A string";
a-string-list-property = "first string", "second string";
a-byte-data-property = [0x01 0x23 0x34 0x56];
child-node1 {
first-child-property;
second-child-property = <1>;
a-string-property = "Hello, world";
};
child-node2 {
};
};
node2 {
an-empty-property;
a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */
child-node1 {
};
};
};
上述例子中/
是一个根结点,里面有两个结点node1
和node2
,而node1
下面又有一个child-node1
当然每个结点还会有一系列的属性,这些属性可以为空,可能是数字或者字符串及字符串数组。
.dts
文件和每个设备都会有一个compatible属性,它可以为用户驱动和设备提供绑定,比如一个flash结点:
flash@0,00000000 {
compatible = "arm,vexpress-flash", "cfi-flash";
reg = <0 0x00000000 0x04000000>,
<1 0x00000000 0x04000000>;
bank-width = <4>;
};
DTC(Device Tree Compiler)是将dts编译为dtb的工具, DTB(Device Tree Blob)是Linux内核可以解析的二进制格式。
最后更新于 2019-01-04 01:39:10 并被添加「」标签,已有 2305 位童鞋阅读过。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。