echarts树状图点击展开子节点_CPU眼里的结构设备树节点及属性详解
2 設(shè)備樹基本模型
DTS基本模型,圖2-1展示了一個設(shè)備樹的基本結(jié)構(gòu)。其中“/”為該設(shè)備樹文件中唯一的根節(jié)點,其后的節(jié)點以此根節(jié)點發(fā)散展開,形成樹狀結(jié)構(gòu)。
圖2-1設(shè)備樹基本結(jié)構(gòu)
3? 設(shè)備樹編寫規(guī)則
3.1 節(jié)點
3.1.1節(jié)點命名
設(shè)備樹除根節(jié)點“/”外,其他節(jié)點命名根據(jù)以下規(guī)范:
Label:node-name@unit-address
其中:unit-address : 指定該節(jié)點在父節(jié)點地址空間中的地址。Lable是該節(jié)點的標(biāo)號,可以省略。節(jié)點命名 node-name保證長度在1-31個字符之間,且僅能由表2-1中給出的字符組成。節(jié)點名必須以小寫或者大寫字母開頭,并應(yīng)盡量能夠表明設(shè)備的類型。Unit-address必須和該節(jié)點屬性中的一個 “reg” 的地址相匹配,如果該節(jié)點下沒有”reg”屬性,@unit-address則必須省略掉,node-name須保證在同一級下能夠與其它節(jié)點區(qū)分。
表2-1有效的節(jié)點命名字符
Character | Description |
0-9 | digit |
a-z | lowercase letter |
A-Z | uppercase letter |
, | comma |
. | period |
_ | underscore |
+ | plus sign |
–????? ? | dash |
圖2-2給出了設(shè)備樹節(jié)點命名的例子,圖中i2c通過A0895000和A0896000兩個單元地址進(jìn)行區(qū)分。
圖2-2設(shè)備樹節(jié)點命名
節(jié)點命名應(yīng)該通用、可以反應(yīng)出設(shè)備的設(shè)備的功能,以下是一些推薦的節(jié)點名稱:
? adc
? accelerometer
? atm
? audio-codec
? audio-controller
? backlight
? Bluetooth
? bus
? cache-controller
? camera
? can
? charger
? clock
? clock-controller
? compact-?ash
? cpu
? cpus
? crypto
? disk
? display
? dma-controller
? dsp ?eeprom
? efuse?endpoint
? ethernet
? ethernet-phy
? fdc
? flash
? gnss
? gpio
? gpu
? gyrometer
? hdmi
? i2c
? i2c-mux
? ide
? interrupt-controller
? isa
? keyboard
? key
? keys
? lcd-controller
? led
? leds
? led-controller
? light-sensor
? magnetometer
? mailbox
? mdio
? memory
? memory-controller
? mmc
? mmc-slot
? mouse
? nand-controller
? nvram
? oscillator
? parallel
? pc-card
? pci
? pcie
? phy
? pinctrl
? pmic
? pmu
? port
? ports
? power-monitor
? pwm ? regulator
? reset-controller
? rtc
? sata
? scsi
? serial
? sound
? spi
? sram-controller
? ssi-controller
? syscon
? temperature-sensor
? timer
? touchscreen
? usb
? usb-hub
? usb-phy
? video-codec
? vme
? watchdog
? wiifi
3.1.2節(jié)點路徑
設(shè)備樹中的節(jié)點可由從根節(jié)點開始的完整路徑區(qū)分,使用方法如上,如果到節(jié)點的完整路徑是明確的,則可以省略單元地址。如果客戶端程序遇到不確的路徑,它的行為將不確定。例如:/node-name-1/node-name-2
3.2 屬性
屬性賦值格式:“name=value”
3.2.1屬性命名
設(shè)備樹中每一個節(jié)點都有一些屬性來描述該節(jié)點的特征,屬性通常以“名稱和值”的方式組成。屬性命名字符組成如表3-2所示。非標(biāo)準(zhǔn)的屬性名稱應(yīng)該賦予名稱有特定具體的意義,如pin, function,tx_use_dma等。
表2-1有效的屬性命名字符
Character | Description |
0-9 | digit |
a-z | lowercase letter |
A-Z | uppercase letter |
, | comma |
. | period |
_ | underscore |
+ | plus sign |
? | question mark |
# | hash |
–????? ? | dash |
3.2.2屬性值
屬性的值是由包含針對該屬性相關(guān)的零或者多個字節(jié)組成的數(shù)組。當(dāng)屬性表征true-false信息的時候,屬性值為空。
Value | Description |
值為空,如用來表征true-false屬性 | |
32位整形數(shù),以大端形式, 一個cell ?如0x1234567 | |
字符串,如“hello” | |
< ?string list> | 字符串?dāng)?shù)組,如:“hello”,“world” |
編碼對,具體格式參見個屬性規(guī)定 | |
一個的值,可以代表設(shè)備樹中任何一個節(jié)點。 |
3.2.3標(biāo)準(zhǔn)屬性
設(shè)備樹節(jié)點有一些標(biāo)準(zhǔn)的屬性,可以統(tǒng)一描述該節(jié)點具有的一些特征。
compatible屬性
compatible屬性由一個或多個字符串組成。這些字符串定義了特定的設(shè)備模型。該屬性允許一個設(shè)備表達(dá)它與一系列類似設(shè)備的兼容性,允許一個設(shè)備驅(qū)動程序與多個設(shè)備匹配。推薦的屬性值賦值方式為“"manufacturer,model”。其中manufacturer為芯片制造商的名字,model指定了該設(shè)備的型號。
例如:
compatible= "leadcore,comip-powerkey";
在此例中,操作系統(tǒng)會先去找支持"leadcore,comip-powerkey"設(shè)備的驅(qū)動,如果沒有,則驅(qū)動與設(shè)備匹配失敗,該設(shè)備無法正常運行。
phandle屬性
屬性名稱:phandle 屬性值
phandle使用一個u32的數(shù)值來表征設(shè)備樹中唯一的節(jié)點。其他節(jié)點應(yīng)用該節(jié)點時,可以引用該節(jié)點定義的phandle屬性定義的值。
例如:
pic@10000000{ phandle = <1>; interrupt-controller;該節(jié)點中phandle 被定義了,其他設(shè)備節(jié)點可以使用值1來引用pic這個節(jié)點,如:
another_node@10909009{??????interrupt-patrent?=<1>;注:大多數(shù)設(shè)備樹中不會顯示包含phandle屬性,DTC編譯工具在編譯設(shè)備樹源碼時會自動的插入調(diào)用phandle屬性。
model屬性
屬性名稱:model屬性值類型
Model屬性描述了設(shè)備生產(chǎn)商以及該設(shè)備的型號,格式為字符串形式。model用來準(zhǔn)確地定義這個硬件是什么
例如:
model= "lc1860c evb2w board on LC1860";
status屬性
???? ? 屬性名稱:status 屬性值類型
status屬性表明了設(shè)備的運行狀態(tài)。有效值為以下幾個:“okay” : 表明設(shè)備是可以操作的“disabled”:表明設(shè)備當(dāng)前不可用,但是可能在以后成為可用設(shè)備,例如該設(shè)備依賴的某些開關(guān)或者設(shè)備沒有打開或者接入到系統(tǒng)中。
? “reserved”:通常表示設(shè)備已經(jīng)運行但是不可以備操作,例如總線固件部分。
? “fail” :設(shè)備不可被操作,發(fā)生了錯誤,在未修復(fù)之前無法操作。
? “fail-sss” :表明設(shè)備無法被操作,sss是設(shè)備特有的,表明探測到了設(shè)備的錯誤。
#address-cell和 #size_sells屬性
屬性名稱:#address-cell 和 #size-cells 屬性值:
#address-cell 和 #size-cells通常用在具有子節(jié)點繼承的節(jié)點中,并且指出子設(shè)備節(jié)點應(yīng)該如何寫地址。其中#address-cell的值若為1,其子設(shè)備reg中用1個數(shù)來表示地址,表示為一個32位地址,若為2則用兩個數(shù)來表示地址,表示為一個63位的地址;size-cells為1,所以reg中用1個數(shù)來表示大小。
例如:
soc?{?????#address-cells?=?<1>;?????#size-cells?=?<1>;?????…}uart0:serial@a0882000 { compatible = "leadcore,comip-uart"; reg = <0xa0882000 0x400>;????????…??????????????};
節(jié)點serial是soc的子節(jié)點,注意到soc中,定義了#address-cells = <1>和#size-cells = <1>,因此所有以soc為父節(jié)點的節(jié)點在配置屬性時,其reg中應(yīng)使用1個cell表示地址,1個cell表示范圍。上例中,0xa0882000為該子節(jié)點設(shè)備起始地址,0x400為子節(jié)點設(shè)備地址空間的大小。
Reg屬性
屬性名稱:reg屬性值: 編碼任意數(shù)量的(地址長度)對。
reg屬性表征了該節(jié)點設(shè)備資源在其父節(jié)點地址空間內(nèi)的地址。最常見的是說給出映射IO寄存器塊的內(nèi)存的偏移量和長度。reg值是由一系列的 組成的,每一個“地址”、“長度”是一個u32的cell,而這兩者是否被賦值依賴于其父節(jié)點的#address-cell 和#size-cells屬性。當(dāng)#size-cells為0時,reg中的長度值應(yīng)該被省略。
例如:
uart2:?serial@a0884000?{ compatible = "leadcore,comip-uart";???????reg?=?<0xa0884000?0x400>;????????… }Serial是soc的子節(jié)點,soc節(jié)點中#address-cells = <1>和#size-cells = <1>,因此serial節(jié)點中reg屬性的值須包含地址(u32)以及長度(u32)值。以上reg表明該節(jié)點設(shè)備在其父節(jié)點地址的偏移量為0x0884000,長度1024字節(jié)的內(nèi)存塊(soc的地址從0開始)。該設(shè)備起始地址為0x0884000,結(jié)束地址為0x0884400。圖2-1lc1860手冊中串口的基地址
Virtual-reg
屬性名稱:virtual-reg 屬性值:
virtual-reg定義了一個有效地址,這個地址映射到設(shè)備節(jié)點中reg中的第一個地址值,此屬性使引導(dǎo)程序可以為客戶端程序提供已經(jīng)設(shè)置的“虛擬-實體”的內(nèi)存映射。
Ranges
屬性名稱:ranges 屬性值:或者編碼任意數(shù)量的(子節(jié)點地址,父節(jié)點地址,長度)對。當(dāng)ranges屬性值為empty時,表明子節(jié)點地址空間與父節(jié)點地址空間為1:1映射。
ranges屬性提供了一種子節(jié)點地址空間以及父節(jié)點地址空間的映射關(guān)系或轉(zhuǎn)換關(guān)系,該屬性值是任意的三元數(shù)組對。其中子節(jié)點地址是父節(jié)點地址空間中的實際的物理地址。該節(jié)點的地址cell(u32)個數(shù)取決于當(dāng)前節(jié)點中的#address-cells,該節(jié)點中的長度cell(u32)取決于當(dāng)前節(jié)點中的#size-cells屬性。
例如:
soc { #address-cells= <1>;?????#size-cells=?<1>; ranges= <0x0 0x10000000 0xd0000000>; uart2: serial@a0884000 { compatible ="leadcore,comip-uart";???????????reg?=?<0xa08840000x400>;????????????…??????} …}ranges =<0x0 0xe0000000 0x00100000>表示子地址空間從0開始,其長度為0x00100000的范圍,該地址映射到其父總線地址空間的起始地址為0xe0000000,長度為0x00100000,具體地址范圍如表2所示。
表2 ranges屬性表示的地址范圍
ranges | 子總線空間 | 父總線空間 |
0x0 0xe0000000 0xd0000000 | 0x0 ~0x0+0xd0000000 | 0x10000000~0x10000000+0xd0000000 |
明確該節(jié)點下的設(shè)備serial節(jié)點地址在serial子空間地址范圍為:
0xa0884000~0xa0884000+0x400,其在父節(jié)點地址空間的映射范圍為:
0x10000000+0xa0884000~0x10000000+0xa0884000+0x400
Dma-ranges
屬性名稱:dma-ramges 屬性值:或者編碼任意數(shù)量的(子節(jié)點地址,父節(jié)點地址,長度)對。
dma-ranges用來描述dma子設(shè)備節(jié)點與其dma父設(shè)備節(jié)點的地址空間的映射或者轉(zhuǎn)換關(guān)系。其屬性值也是一個任意數(shù)量的三元數(shù)組對,表征了DMA子節(jié)點在其父DMA節(jié)點中的映射關(guān)系。該節(jié)點的地址cell(u32)個數(shù)取決于當(dāng)前節(jié)點中的#address-cells,該節(jié)點中的長度cell(u32)取決于當(dāng)前節(jié)點中的#size-cells屬性。
Interrupts屬性
屬性名稱:interrupts屬性值任意數(shù)量的數(shù)值對,表征中斷說明。中斷說明的格式由綁定的中斷域定義。
?????? 三個數(shù) interrupts = ;
?????? X指的是:
PPI:per processor?interrupts ? ???私有中斷,?中斷必須綁定一個固定CPU核,當(dāng)處理該中斷時,必須由綁定的CPU核處理,中斷號16~31
SPI:shared processor interrupts ??共享中斷,中斷的處理可被任意的CPU核處理,中斷號 32 ~32+224
在arm-gic.h文件中定義的只有SPI和PPI,如下:#define GIC_SPI 0#define GIC_PPI 1?Y指的是:物理中斷號
?Z指的是:觸發(fā)方式
#defineIRQ_TYPE_NONE 0x00000000 \\ 未指明類型#defineIRQ_TYPE_EDGE_RISING 0x00000001 \\ 上升沿觸發(fā)#defineIRQ_TYPE_EDGE_FALLING 0x00000002 \\下降沿觸發(fā) #defineIRQ_TYPE_EDGE_BOTH (IRQ_TYPE_EDGE_FALLING |IRQ_TYPE_EDGE_RISING) \\ 邊沿觸發(fā)#define IRQ_TYPE_LEVEL_HIGH0x00000004 \\ 高電平觸發(fā)#define IRQ_TYPE_LEVEL_LOW 0x00000008 \\ 低電平觸發(fā)#defineIRQ_TYPE_SENSE_MASK 0x0000000f例如:
interrupts = <0 61 0>;?? ? 表明此節(jié)點中斷類型為GIC_SPI,物理中斷號為61+32=93,觸發(fā)方式未指定。
四個數(shù):<主|子中斷(0:主,1:子)主中斷號子中斷號觸發(fā)方式>
兩個數(shù):<中斷號,中斷等級>
一個數(shù):<中斷號>
Interrupt-parent
屬性名稱:interrupt-parent屬性值:表明父中斷節(jié)點。
由于中斷樹的層級和設(shè)備樹層級有差異,具有中斷功能的設(shè)備節(jié)點必須明確通過該屬性其父中斷。若該設(shè)備無interrupt-parent屬性,則默認(rèn)其interrupt-parent屬性為其父中斷具有的該屬性,如果遍歷其中斷樹后,中斷設(shè)備中沒有該屬性,則默認(rèn)其父中斷為設(shè)備樹。
例如:soc { interrupt-parent =<&gic>; …}?????? 節(jié)點soc的中斷父節(jié)點是gic。
Interrupts-extended
屬性名稱:interrupts-extended,屬性值phandle或者
該屬性指明所屬的中斷控制器,又描述中斷,當(dāng)一個設(shè)備連接到多個中斷控制器時,使用該屬性來進(jìn)行中斷定義。例如:interrupts-extended =<&pic 0xA 8>, <&gic 0xda>;該節(jié)點既能響應(yīng)pic控制器的中斷,又能響應(yīng)gic控制器的中斷,但二者不能同時響應(yīng)。中斷控制器的屬性:
#interrupt-cells
timer的父中斷為gic中斷控制器,gic節(jié)點中#interrupt-cells屬性為 <3>,因此,timer中interrupts屬性為3個cell。
Interrupt-controller
例如:
gic:interrupt-controller@a0118000 { interrupt-controller;?????????????????????????????????????#interrupt-cells?=?<3>;?????????????????????????????????????… };4 基本設(shè)備節(jié)點與屬性
4.1基本設(shè)備節(jié)點
所有的設(shè)備樹必須擁有一個根節(jié)點 “/”,并且以下的節(jié)點是一個系統(tǒng)必須的,且必須為根節(jié)點的子節(jié)點:必須要有cpus 節(jié)點
至少一個 memory 節(jié)點
根節(jié)點
設(shè)備樹只有一個根節(jié)點,其它所有的節(jié)點都是它的子節(jié)點,根節(jié)點的完整路徑是 “/”
根節(jié)點必須具有的屬性:???
model????? ? ? ? 字符串,唯一表明系統(tǒng)板的型號,建議“廠家,型號”
compatible??? 字符串?dāng)?shù)組,表明可以兼容的平臺,建議“廠家,型號”
#size-cells??? ???? 說明其子節(jié)點reg屬性中地址參數(shù)的個數(shù)
#address-cells ? 說明其子節(jié)點reg屬性中長度的參數(shù)個數(shù)
其它標(biāo)準(zhǔn)屬性位可選屬性
4.1.2 cpus節(jié)點
所有設(shè)備樹都需要/CPU節(jié)點。它不代表系統(tǒng)中的真實設(shè)備,而是充當(dāng)表示系統(tǒng)cpus的子cpu節(jié)點的容器。Cpus節(jié)點必須包含#address-cells和#size-cells節(jié)點,并且該節(jié)點包含的屬性,其子節(jié)點都應(yīng)該遵守。
例如:cpus{ #address-cells= <1>; #size-cells= <0>; cpu1:cpu@1 { device_type= "cpu"; compatible= "arm,cortex-a7"; reg= <0x101>; clock-frequency= <1495000000>; }; cpu2:cpu@2 { device_type= "cpu"; compatible= "arm,cortex-a7"; reg= <0x102>; clock-frequency= <1495000000>; }; …}cpu節(jié)點表示一個硬件執(zhí)行塊,該硬件執(zhí)行塊具有足夠的獨立性,能夠運行一個操作系統(tǒng),而不會干擾其他可能運行其他操作系統(tǒng)的cpu。CPU和線程通過統(tǒng)一的編號空間進(jìn)行編號,該空間應(yīng)盡可能與中斷控制器的CPU/線程編號相匹配。CPU節(jié)點的地址用法是最簡單的。每個CPU被分配了唯一的ID號,而且這個沒有size。在上面的cpus節(jié)點中,#address-cells被設(shè)為了1,#size-cells則被設(shè)為了0,這就表示它的子節(jié)點中的reg屬性是一個32位整數(shù)的address,而且沒有size部分。在cpu節(jié)點中,必須具有的幾個屬性:
屬性名稱:device_type,屬性值 值必須是 “cpu”屬性名稱:"reg" 屬性值 數(shù)組它定義了由CPU節(jié)點表示的CPU/線程的唯一CPU/線程id。屬性名稱:clock-frequency屬性值< prop-encoded-array>數(shù)組說明了當(dāng)前節(jié)點的CPU工作的時鐘頻率(Hz)4.1.3 Aliases 節(jié)點
???? 一個設(shè)備樹僅能有一個aliases節(jié)點,該節(jié)點為其它節(jié)點定義一個“別名”。該節(jié)點必須為設(shè)備樹根節(jié)點的子節(jié)點。該節(jié)點中其屬性名稱為屬性值節(jié)點的別名,屬性值為節(jié)點在設(shè)備樹中的全路徑。
例如:
/{ … aliases { serial0 = &uart0; … }}?????? 為uart0定義了一個別名為 “serial0”。別名的命名只能選取數(shù)字“0-9”,小寫字母“a-z”以及短橫線“-”組合形成的字符串。
4.1.4 Memory節(jié)點
Memory節(jié)點是所有設(shè)備樹所必須的節(jié)點,其位于根節(jié)點之下。該節(jié)點描述了系統(tǒng)物理內(nèi)存分配,如果一個系統(tǒng)有多塊內(nèi)存,可以創(chuàng)建多個memory節(jié)點或者一個memoery節(jié)點在使用時用reg屬性進(jìn)行說明。例如:
memory { reg= <0 0x6400000 0 0x39000000>; };表明該系統(tǒng)起始地址是0x6400000,長度為0x39000000 (912MB),以上在一個64位的機器中,假設(shè)#address-cells= <2>,#size-cells = <2>
4.1.5 Chosen節(jié)點
choosen節(jié)點不代表系統(tǒng)中的實際設(shè)備,但描述了系統(tǒng)軟件在運行時選擇或指定的參數(shù)。它必須是根節(jié)點的子節(jié)點。對于Linux內(nèi)核,該節(jié)點下最有用的屬性是bootargs,該屬性的類型是字符串,用來向Linux內(nèi)核傳遞cmdline。規(guī)范中還定義了stdout-path和stdin-path兩個可選的、字符串類型的屬性,這兩個屬性的目的是用來指定標(biāo)準(zhǔn)輸入輸出設(shè)備的,在linux中,這兩個屬性基本不用。
屬性bootargs,屬性值,指定客戶端程序啟動參數(shù)的字符串。如果不需要啟動參數(shù),則該值是空字符串。通常,chosen 節(jié)點在 .dts 源文件中為空,并在啟動時填充。?????? 例如:
chosen { bootargs ="root=/dev/nfs rw nfsroot=192.168.1.1 ?????????????????console=ttyS0,115200";};4.2特殊屬性
4.2.1 simple-bus compatible 屬性值
系統(tǒng)會將該node下所有的child nodes都作為platform device注冊進(jìn)kernel。
例如:
soc { #address-cells= <1>;????????#size-cells=?<1>;????????ranges=?<0?0?0?0xffffffff>;????????compatible=?"simple-bus"; interrupt-parent= ;}Soc下的設(shè)備節(jié)點都將作為platformdevice被注冊進(jìn)kenel
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的echarts树状图点击展开子节点_CPU眼里的结构设备树节点及属性详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逾期怎么处理_招商信用卡逾期三个月银行起
- 下一篇: 哈希表的画法_智慧树知到_机械制图A_答