第18章 ARM Linux设备树之二(设备树的组成和结构)

18.2 设备树的组成和结构

整个设备树牵涉面比较广,即增加了新的用于描述设备硬件信息的文本格式,又增加了编译这个文本的工具,同时Bootloader(U-boot)也需要支持将编译后的设备树传递给Linux内核。

18.2.1 DTS、DTC和DTB等

1.DTS

文件.dts是一种ASCII文本格式的设备树描述,此文本格式非常人性化,适合人类的阅读习惯。在ARM Linux中,一个.dts文件对应一个ARM的设备,一般放置在内核的arch/arm/boot/dts/目录中。在arch/powerpc/boot/dts、arch/c6x/boot/dts、arch/openrisc/boot/dts等目录中,也存在大量的.dts文件,这证明DTS绝对不是ARM的专利

由于一个SoC可能对应多个设备(一个SoC可以对应多个产品和电路板),这些.dts文件势必须包含许多共同的部分,Linux内核为了简化,把SoC公用的部分或者多个设备共同的部分一般提炼为.dtsi,类似于C语言的头文件。其他的设备对应的.dts就包括这个.dtsi。譬如,对于VEXPRESS而言,vexpress-v2m.dtsi就被vexpress-v2p-ca9.dts所引用,vexpress-v2p-ca9.dts有如下一行代码:/include/ "vexpress-v2m.dtsi"

和C语言的头文件类似,.dtsi也可以包括其他的.dtsi,譬如几乎所有的ARM SoC的.dtsi都引用了skeleton.dtsi。文件.dts(或者其包括的.dtsi)的基本元素即为上面所述的节点和属性,代码清单18.1给出了一个设备树结构的模版。

代码清单18.1 设备树结构模版

 1/ {
 2      node1 {
 3          a-string-property = "A string";
 4          a-string-list-property = "first string", "second string";
 5          a-byte-data-property = [0x01 0x23 0x34 0x56];
 6          child-node1 {
 7              first-child-property;
 8              second-child-property = <1>;
 9              a-string-property = "Hello, world";
10          };
11          child-node2 {
12          };
13      };
14      node2 {
15          an-empty-property;
16          a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */
17          child-node1 {
18          };
19      };
20};

上述.dts文件并没有什么真实的用途,但它基本表征了一个设备树源文件的结构:

1个root节点"/";root节点下面含一系列子节点,本例中为node1和node2;节点node1下又含有一系

你可能感兴趣的:(Linux驱动开发)