日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

echarts树状图点击展开子节点_CPU眼里的结构设备树节点及属性详解

發(fā)布時間:2024/9/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 echarts树状图点击展开子节点_CPU眼里的结构设备树节点及属性详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 設(shè)備樹(device tree)簡介DTSpec定義一個devicetree的約束來描述硬件設(shè)備,boot引導(dǎo)程序?qū)⒃O(shè)備樹傳遞給用戶程序的內(nèi)存空間中,并傳遞給用戶相應(yīng)設(shè)備樹的指針。設(shè)備樹為一個樹形結(jié)構(gòu)用來描述系統(tǒng)中的設(shè)備。每個節(jié)點由屬性/值來描述給出設(shè)備的特性,除了根節(jié)點之外,每一個節(jié)點有一個確定的父節(jié)點。

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 屬性值類型

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文件中定義的只有SPIPPI,如下:#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

屬性名稱:#interrupt-cells,屬性值 該屬性定義了其及其子中斷對中斷域說明的編碼所需要的cell個數(shù)。即interrups屬性中的cell個數(shù)。例如:gic:interrupt-controller@a0118000 {??????????????????compatible?=?"arm,cortex-a7-gic"; interrupt-controller; #interrupt-cells = <3>;???????????????????… }; timer { compatible = "arm,armv7-timer";????????????interrupt-parent?=?; interrupts = ; … }

timer的父中斷為gic中斷控制器,gic節(jié)點中#interrupt-cells屬性為 <3>,因此,timer中interrupts屬性為3個cell。

  • Interrupt-controller

屬性名稱:#interrupt-controller, 屬性值 ,該屬性表明該節(jié)點是一個中斷控制器。

例如:

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。