设备树 语法

在编写和修改一个设备树之前,你需要掌握设备树语法。
设备树语法其实也很简单,就是通过node和property这两个要素去描述各种各样的硬件设备。

一个完整的设备树文件如下所示:

/dts-v1/;

/ {
    node1 {
        a-string-property = "A string";
        a-string-list-property = "first string", "second string";
        // hex is implied in byte arrays. no '0x' prefix is required
        a-byte-data-property = [01 23 34 56];
        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 {
        };
    };
};

在一个设备树文件中,一个node节点通常表示一个设备,在每个node节点中,又会定义很多属性:property,用来描述设备的各种资源和属性。

/dts-v1/; 一个设备树文件中,要有这行声明,来设备树语法的版本。设备树语法也在不断地更新迭代中,这个是必须的。

一个设备树文件中,只能有一个根节点:/

每个节点里可以添加属性,也可以添加子节点,构成层次化的设备树

属性(property)的类型分为多种:

  • string:
  • u32:比如一个寄存器地址、内存大小等,需要一个32位的无符号整型表示
  • u64:在64位系统中,很多地址需要2个U32的整型表示
  • string list:有些设备会兼容很多信号,每个信号使用string表示,各个string之间用逗号隔开
驱动开发核心理论,Linux内核开发入门实战视频教程:《Linux内核编程》,具有一线芯片原厂开发经验的驱动工程师录制,内含Linux设备树课程,教你如何修改设备树文件和基于设备树接口开发驱动。详情点击:王利涛老师个人淘宝店:Linux内核编程