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