Device Tree
的用法
基本数据格式
Device tree是一种简单的节点和属性的树形结构。属性是键值对,而节点可能包括属性和子节点。例如,下面是.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 {
};
};
};
此树形结构很明显的是毫无用处,因为它没描述任何东西,但它确实展示了节点属性的结构。主要有:
1 一个单独的root node:“/”
2 一对子节点:“node1”和“node2”
3 节点1的一对子节点:“child-node1”和”child-node2”
4 分散于树形结构当中的一些属性
属性是简单的键值对,此处的值可以为空,也可以包括任意的字节流。当数据类型没有被编进数据结构时,会有一些基础数据表示法能够在device tree源文件中进行表达。
5 文本串可以用双引号表示
a string-property = "a string"
6 单元格是由尖括号分隔的32 bit无符号整数
a cell-property = <0xbeef 123 0xabcd1234>
7 二进制数据使用的是方
a binary-property = [0x01 0x23 0x45 0x67];
8 不同示意的数据可以用逗号串联在一起
a mixed-property = "a string", [0x01 0x23 0x45 0x67], <0x12345678>;
9 逗号也用来创建字符串列表
a string-list = "red fish", "blue fish";
基本概念
要了解如何使用device tree,我们先从样机和创建一个device tree开始。
样机
以下为虚拟机,由”Acme”制造,名为“Coyote’s Revenge”。
1 一个32bit ARM CPU
2 附属于内存映射串行端口的处理器本地总线,spi总线控制器,i2c控制器,中断控制器和外总线桥
3 256MB的SDRAM
4 基于0X101F1000和0X101F2000的2串行端口
5 基于0x101F3000的GPIO控制器
6 基于0X1017000的拥有以下设备的SPI控制器
a 附属于GPIO #1的有SS pin的MMC slot
7 拥有以下设备的外部总线桥
a 附属于基于0x101100000外总线的SMC91111以太网设备
b 拥有以下设备的基于0x10160000的i2c控制器
c Maxim DS1338 real time clock。响应slave address 1101000(0x58)
8 基于0x30000000的64MB的NOR flash
初始结构
第一步是为设备创建一个骨架结构。这是一具有效的device tree所需的最基本的结构。现在你想唯一的标识此设备。
/ { compatible = "acme,coyotes-revenge";};
C
ompatible指定了系统的名称。它包括字符串<manufacturer>,<model>。指定确切的设备是很重要的一点,并且包含制造商以避免命名空间冲突。操作系统将使用compatible值来决定如何在设备上运行,那么将正确数据加入属性中就显得非常重要。
理论上,compatible是OS所需的唯一指定设备的所有数据。如果所有设备资料都是硬编码,那么OS可以在高级compatible属性查找“acme,coyotes-revenge”。
|