首先說(shuō)節(jié)點(diǎn)的表示方法,除了根節(jié)點(diǎn)只用一個(gè)斜杠“/”表示外,其他節(jié)點(diǎn)的表示形式如“node-name@unit-address”。@前邊是節(jié)點(diǎn)名字,后邊是節(jié)點(diǎn)地址。
節(jié)點(diǎn)名字的長(zhǎng)度范圍是1到31,可以使用的字符在ePAPR規(guī)范中有說(shuō)明,包括:
0-9?? ?數(shù)字
a-z?? ?小寫(xiě)字母
A-Z?? ?大寫(xiě)字母
,?? ?逗號(hào)
.?? ?句點(diǎn)(英)
_?? ?下劃線
+?? ?加號(hào)
-?? ?破折號(hào)(英)
規(guī)范要求節(jié)點(diǎn)名字應(yīng)該以字母開(kāi)頭,雖然允許后邊的位置使用非字母的字符,但實(shí)際情況我們實(shí)在沒(méi)必要使用其他字符,一般情況全部用字母表示就夠了。特別是規(guī)范建議在起名字時(shí)采用通用的名字而不是專(zhuān)有的名字,比如對(duì)于網(wǎng)卡,使用ethernet表示就可以了,可以通過(guò)地址區(qū)分不同的網(wǎng)卡,網(wǎng)卡的區(qū)別可以通過(guò)節(jié)點(diǎn)下的屬性區(qū)分。還有就是關(guān)于目前存在的設(shè)備基本上都已經(jīng)有被廣泛接受的名字了,我們完全沒(méi)必要在此標(biāo)新立異,比如下邊規(guī)范中列舉的節(jié)點(diǎn)名字(經(jīng)常寫(xiě)驅(qū)動(dòng)的人基本一眼就能猜出是哪種設(shè)備):
atm
cache-controller
compact-flash
can
cpu
crypto
disk
display
dma-controller
ethernet
ethernet-phy
fdc
flash
gpio
i2c
ide
interrupt-controller
isa
keyboard
mdio
memory
memory-controller
mouse
nvram
parallel
pc-card
pci
pcie
rtc
sata
scsi
serial
sound
spi
timer
usb
vme
watchdog
節(jié)點(diǎn)地址是用來(lái)區(qū)別同名節(jié)點(diǎn)的,不是軟件意義上的地址,但是有些情況可以用軟件地址作為這個(gè)地址。比如兩個(gè)I2C控制器的名字可以都是i2c,然后用控制器寄存器首地址作為這個(gè)節(jié)點(diǎn)地址。對(duì)于cpu,因?yàn)樗菦](méi)有寄存器地址的,就可以用核的號(hào)碼作為地址,對(duì)于8核處理器,地址可以從0到7。ePAPR規(guī)范中關(guān)于節(jié)點(diǎn)地址的描述不太好理解,原文是“The unit-address component of the name is specific to the bus type on which the node sits”。其實(shí)我覺(jué)得這句話說(shuō)的也不太準(zhǔn)確,因?yàn)椴⒉皇撬泄?jié)點(diǎn)表示的硬件都位于某個(gè)總線上,比如內(nèi)存,cpu。設(shè)備樹(shù)是軟件對(duì)硬件的一種近似表示,軟件需要他怎么表示,他就怎么表示。對(duì)于cpu,軟件需要序號(hào),那么地址就用序號(hào),對(duì)于i2c控制器,軟件需要寄存器首地址,那么就用地址。除此之外規(guī)范還要求,如果節(jié)點(diǎn)有地址,那么節(jié)點(diǎn)下邊必須有一個(gè)叫reg的屬性,并且該地址必須和reg的屬性的第一個(gè)地址相同。如果節(jié)點(diǎn)沒(méi)有reg屬性,那么節(jié)點(diǎn)地址及前邊的@必須都不能有。關(guān)于屬性和值我們還沒(méi)開(kāi)始介紹,這里插一句,其實(shí)reg就是register的縮寫(xiě),這個(gè)屬性主要用來(lái)表示控制器寄存器首地址的。我覺(jué)得規(guī)范中這一條不是非常有必要,因?yàn)橛行┰O(shè)備只要有一個(gè)地址就夠了,那么放在節(jié)點(diǎn)地址中就夠了,完全沒(méi)必要非得再加個(gè)reg屬性。在這一段的最后一句,規(guī)范來(lái)了句“The binding for a particular bus may specify additional, more specific requirements for the format of reg and the unit-address.”,我覺(jué)得這句話的意思和“設(shè)備樹(shù)是軟件對(duì)硬件的一種近似表示,軟件需要他怎么表示,他就怎么表示”差不多,沒(méi)有什么玄的。
節(jié)點(diǎn)路徑也比較容易理解,從根節(jié)點(diǎn)到每個(gè)節(jié)點(diǎn)都可以形成一個(gè)路徑,如第一節(jié)的例子/cpus/cpu@0,通過(guò)這個(gè)可以唯一的表示cpu@0這個(gè)節(jié)點(diǎn)。因?yàn)閏pu@0在cpus下邊是唯一的,但是在整個(gè)設(shè)備樹(shù)可能不是唯一的,只有用全路徑表示才能毫無(wú)異議的確認(rèn)是哪個(gè)節(jié)點(diǎn)。如果省略了節(jié)點(diǎn)地址也不會(huì)產(chǎn)生歧義,那么可以省略不寫(xiě)。就像編程中的括號(hào)一樣,個(gè)人覺(jué)得這個(gè)沒(méi)必要省。
除了名字和地址外,節(jié)點(diǎn)前邊還可以有一個(gè)標(biāo)簽(label),這個(gè)標(biāo)簽不是必須的,一般只有在別個(gè)地方需要引用這個(gè)節(jié)點(diǎn)時(shí)才會(huì)用標(biāo)簽標(biāo)示這個(gè)節(jié)點(diǎn),因?yàn)槿绻萌窂教爆嵙?。如“i2c_1: i2c@12C70000”中的i2c_1就是一個(gè)標(biāo)簽。
?
電子發(fā)燒友App





評(píng)論