设备树 label

在设备树(Device Tree)里,label(标签)是一种标识符,可用于给设备树中的节点或者属性起一个具有描述性的名称。借助 label,你能更方便地引用设备树里的节点和属性,让设备树的可读性和可维护性得到提升。

/ {
    model = "My Device";
    compatible = "mycompany,mymodel";

    cpus {
        #address-cells = <1>;
        #size-cells = <0>;

        cpu0: cpu@0 {
            device_type = "cpu";
            compatible = "arm,cortex-a9";
            reg = <0>;
        };
    };

    serial0: serial@12340000 {
        compatible = "arm,pl011";
        reg = <0x12340000 0x1000>;
        interrupts = <0 1 4>;
    };
};

在上面的例子中,cpu0 和 serial0 就是定义的 label,分别对应 cpu@0 节点和 serial@12340000 节点。

如何使用 label(标签、标号)

在设备树中,你可以使用 & 符号结合 label 来引用对应的节点,进而在其他地方对该节点的属性进行修改或者添加新属性。下面是一个使用 label 的示例:

/ {
    model = "My Device";
    compatible = "mycompany,mymodel";

    cpus {
        #address-cells = <1>;
        #size-cells = <0>;

        cpu0: cpu@0 {
            device_type = "cpu";
            compatible = "arm,cortex-a9";
            reg = <0>;
        };
    };

    serial0: serial@12340000 {
        compatible = "arm,pl011";
        reg = <0x12340000 0x1000>;
        interrupts = <0 1 4>;
    };
};

&serial0 {
    status = "okay";
    clock-frequency = <115200>;
};

在这个例子中,&serial0 表示引用之前定义的 serial0 标签所对应的 serial@12340000 节点。之后,就可以对该节点添加新的属性 status 和 clock-frequency。

小结

可以在节点或者属性前添加以冒号结尾的名称来定义一个 label。
利用 & 符号和 label 引用对应的节点,然后对该节点的属性进行修改或者添加新属性。
借助使用 label,你能够让设备树的结构更加清晰,更易于理解和维护。

驱动开发核心理论,Linux内核开发入门实战视频教程:《Linux内核编程》,具有一线芯片原厂开发经验的驱动工程师录制,内含Linux设备树课程,教你如何修改设备树文件和基于设备树接口开发驱动。详情点击:王利涛老师个人淘宝店:Linux内核编程