Skip to content

Latest commit

 

History

History
259 lines (174 loc) · 5.79 KB

File metadata and controls

259 lines (174 loc) · 5.79 KB

设备树规格书(Devicetree Specification)

中文 / English

上一章 - 目录 - 下一章


6 Devicetree Source (DTS) 格式(版本 1)

Devicetree Source (DTS) 格式是 devicetree 的文本表示形式,可以通过 dtc 处理为内核所期望的二进制 devicetree 形式。以下描述不是 DTS 的正式语法定义,但描述了用于表示 devicetree 的基本构造。

DTS 文件的名称应以“.dts”结尾。

6.1 编译器指令

可以从 DTS 文件中包含其他源文件。包含文件的名称应以“.dtsi”结尾。包含的文件可以进一步包含其他文件。

/include/ "FILE"

6.2 标签

源格式允许将标签附加到 devicetree 中的任何节点或属性值。可以通过引用标签而不是显式指定 phandle 值或节点的完整路径来自动生成 phandle 和路径引用。标签仅在 devicetree 源格式中使用,不会编码到 DTB 二进制文件中。

标签的长度应为 1 到 31 个字符,仅由 :numref:label-characters 集合中的字符组成,且不能以数字开头。

通过在标签名称后附加冒号(“:”)来创建标签。通过在标签名称前加上“&”来创建引用。

字符 描述
0-9 数字
a-z 小写字母
A-Z 大写字母
_ 下划线

6.3 节点和属性定义

使用节点名称和单元地址定义设备树节点,并使用大括号标记节点定义的开始和结束。它们可以在前面加上标签。


    [label:] node-name[@unit-address] {
        [properties definitions]
        [child nodes]
    };

节点可以包含属性定义和/或子节点定义。如果两者都存在,则属性应在子节点之前。

先前定义的节点可以被删除。

    /delete-node/ node-name;
    /delete-node/ &label;

属性定义是名称值对,形式为:

        [label:] property-name = value;

除了空(零长度)值的属性,它们的形式为:

        [label:] property-name;

先前定义的属性可以被删除。

    /delete-property/ property-name;

属性值可以定义为32位整数单元的数组、以空字符结尾的字符串、字节串或这些的组合。

  • 单元格数组由尖括号括起来,其中包含一个以C样式整数分隔的空格分隔列表。例如:

        interrupts = <17 0xc>;
  • 其中,括号内的值可以表示为算术、位或逻辑表达式。

    Arithmetic operators
    
    +   add
    -   subtract
    *   multiply
    /   divide
    %   modulo


    Bitwise operators
    
    &    and
    |    or
    ^    exclusive or
    ~    not
    <<  left shift
    >>  right shift

    Logical operators
    
    &&   and
    ||   or
    !    not

    Relational operators
    
    <    less than
    >    greater than
    <=   less than or equal
    >=   greater than or equal
    ==   equal
    !=   not equal

    Ternary operators
    
    ?:   (condition ? value_if_true : value_if_false)
  • 64位值用两个32位单元表示。例如:
clock-frequency = <0x00000001 0x00000000>;
  • 使用双引号表示以空字符结尾的字符串值(属性值被认为包括终止的NULL字符)。例如:
compatible = "simple-bus";
  • 字节串用方括号[ ]括起来,每个字节由两个十六进制数字表示。每个字节之间的空格是可选的。例如:
local-mac-address = [00 00 12 34 56 78];

或者等价于:

local-mac-address = [000012345678];
  • 值可以有多个逗号分隔的组件,这些组件将连接在一起。例如:
compatible = "ns16550", "ns8250";
example = <0xf00f0000 19>, "a strange property format";
  • 在单元格数组中,对另一个节点的引用将扩展为该节点的phandle。引用可以是&后跟节点的标签。例如:
interrupt-parent = < &mpic >;

或者它们可以是&后跟大括号中节点的完整路径。例如:

interrupt-parent = < &{/soc/interrupt-controller@40000} >;
  • 在单元格数组之外,对另一个节点的引用将扩展为该节点的完整路径。例如:
ethernet0 = &EMAC0;
  • 标签也可以出现在属性值的任何组件之前或之后,在单元格数组的单元格之间或字节串的字节之间。例如:
reg = reglabel: <0 sizelabel: 0x1000000>;
prop = [ab cd ef byte4: 00 ff fe];
str = start: "string value" end: ;

6.4 文件布局

版本 1 DTS 文件具有以下总体布局:

    /dts-v1/;
    [memory reservations]
        / {
            [property definitions]
            [child nodes]
        };

/dts-v1/; 应该存在,以将文件标识为版本 1 DTS(没有此标记的 dts 文件将被 dtc 视为过时的版本 0,它使用了不同的整数格式,除了其他一些小但不兼容的更改)。

内存预留(请参阅 :numref:sect-fdt-memory-reservation-block)由以下形式的行表示:

/memreserve/ <address> <length>;

其中 <address><length> 是 64 位 C 样式整数,例如,

/* Reserve memory region 0x10000000..0x10003fff */
/memreserve/ 0x10000000 0x4000;

所有设备树数据都包含在其中。


上一章 - 目录 - 下一章