Linux设备树的用法(2)

<name> 是一个ASCII字符串,长度不超过31个字符。通常,节点名都是与设备的类型有关联的。比如,3com的以太网卡,通常节点名就叫 ethernet 而不叫 3com509

<unit-address>被作为节点名的一部分时,用来描述设备的地址。通常,unit-address就是设备的寄存器地址,这个地址是被列举在节点的reg属性中的。在后文中我们会介绍reg属性的内容。

同级别的兄弟节点的节点名必须唯一(不可重名),但如果name一致而address不一致则是正常情况(比如,serial@101f1000 与 serial@101f2000)。

关于节点的命名规则细节,请参考ePAPR文档的2.2.1节。

 

设备

系统中的每个设备都对应着设备树中的一个节点。好了,下一步我们就是为每个设备都加上对应的节点。

目前,我们仅为每个设备增加一个空节点,待后面介绍了中断号及地址范围的概念后再行补充。

/ {

    compatible = "acme,coyotes-revenge";

 

    cpus {

        cpu@0 {

            compatible = "arm,cortex-a9";

        };

        cpu@1 {

            compatible = "arm,cortex-a9";

        };

    };

 

    serial@101F0000 {

        compatible = "arm,pl011";

    };

 

    serial@101F2000 {

        compatible = "arm,pl011";

    };

 

    gpio@101F3000 {

        compatible = "arm,pl061";

    };

 

    interrupt-controller@10140000 {

        compatible = "arm,pl190";

    };

 

    spi@10115000 {

        compatible = "arm,pl022";

    };

 

    external-bus {

        ethernet@0,0 {

            compatible = "smc,smc91c111";

        };

 

        i2c@1,0 {

            compatible = "acme,a1234-i2c-bus";

            rtc@58 {

                compatible = "maxim,ds1338";

            };

        };

 

        flash@2,0 {

            compatible = "samsung,k8f1315ebm", "cfi-flash";

        };

    };

};

 

上面这棵树中,系统中的每个设备都被添加了一个节点,而且节点的结构真实反应了设备是如何挂载在系统上的。比如,ethernet,i2c等节点是external-bus的子节点,rtc设备是i2c总线下的子节点。通常,设备树的结构都是以CPU的视角来反应出来的。

上面这棵树还有几点不足,它缺少了设备的关键信息。这些信息将在后文中逐步添加上去。

关于上面这颗树,我们还需要注意:

每个设备节点都都一个compatible属性

flash这个节点的compatible属性有两个字串,下面一节将介绍为什么这么写。

在前文中曾提到:节点名反应的是设备类型而非设备型号。请参考ePAPR的2.2.2节中列出的常用节点名。

理解compatible属性

每个设备节点都需要一个compatible属性。compatible属性是系统赖以查找对应的设备驱动程序的一个关键值,系统就是根据它的值来查找这个设备应该使用哪一个驱动的。

compatible属性的值是一个字串表。第一个字串以"厂商,型号"的形式描述了准确的设备信息。后面一个字串则表示与它兼容的其他设备。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6c0fc219b0ea511bacee7c6ba4b1058e.html