《【北京迅為】itop-3568開發(fā)板驅(qū)動(dòng)開發(fā)指南.pdf》 學(xué)習(xí)筆記
設(shè)備樹簡介
什么是設(shè)備樹
設(shè)備樹是保留著存在于系統(tǒng)中的設(shè)備信息,當(dāng)機(jī)器引導(dǎo)時(shí),OS通過使用驅(qū)動(dòng)程序和其他組件獲得的信息建立此樹,并且當(dāng)添加或刪除設(shè)備時(shí)更新此樹。
上一篇筆記提到了平臺設(shè)備模型,它將設(shè)備和驅(qū)動(dòng)區(qū)分開來,一份驅(qū)動(dòng)可以與多份設(shè)備匹配,但隨著 device (板級文件)的增多,Linux 內(nèi)核代碼變得越來越多,這些代碼相對于內(nèi)核來說都算是”垃圾代碼“,為了解決這個(gè)問題,linux 就引入了設(shè)備樹來替代 device 文件。
既然設(shè)備樹是用來替代平臺總線 device 文件的,那么設(shè)備樹的運(yùn)作原理還是基于平臺總線模型,只是設(shè)備樹采用的是文本格式,不像 device.c 一樣每次修改都要重新編譯內(nèi)核。
設(shè)備樹基本名詞
名詞 | 含義 |
---|---|
DT | Device Tree 設(shè)備樹 |
FDT | Flattened Device Tree 展開設(shè)備樹,起源 OpenFirmware(OF) |
dts | device tree source 設(shè)備樹源碼 |
dtsi | device tree source include 通用的設(shè)備樹源碼 |
dtb | devicedevice tree blob dts 編譯生成的文件 |
dtc | device tree compiler 設(shè)備樹編譯器 |
設(shè)備樹編譯
編譯設(shè)備樹命令:
dtc -I dts -O dtb -o xxx.dtb xxx.dts
反編譯設(shè)備樹:
dtc -I dtb -O dts -o xxx.dts xxx.dtb
示例:
設(shè)備樹語法
設(shè)備根節(jié)點(diǎn)
根節(jié)點(diǎn)是設(shè)備樹必須添加的節(jié)點(diǎn),節(jié)點(diǎn)名為 /。
示例:
/dts-v1/; // dts 版本
/{ // 根節(jié)點(diǎn)
};
設(shè)備子節(jié)點(diǎn)
子節(jié)點(diǎn)格式:
[label:] node-name[@unit-address] {
[properties definitions]
[child nodes]
}
Tip:同級節(jié)點(diǎn)下節(jié)點(diǎn)名稱不能相同,不同級別節(jié)點(diǎn)名稱可以相同。
示例:
節(jié)點(diǎn)名稱
在對節(jié)點(diǎn)命名時(shí),需要體現(xiàn)設(shè)備的特征,如串口一般命名為 uart 或 serial,
節(jié)點(diǎn)名稱是必選項(xiàng),標(biāo)簽和設(shè)備地址是可選項(xiàng),標(biāo)簽是節(jié)點(diǎn)的別名,設(shè)備地址用于區(qū)分不同的設(shè)備。
reg 屬性
reg 屬性用來描述地址信息,如寄存器地址,格式為:
reg = <addr1 len1 addr2 len2 ...>
#address-cell 和 #size-cells 屬性
reg 屬性的長度是可變的,#address-cell 和 #size-cells 屬性用來決定 reg 的長度,比如下面這個(gè)例子,#address-cell 為 1,表示有一個(gè)地址,#size-cells 為 0,表示有 0 個(gè)地址長度。
model 屬性
model 屬性是一個(gè)字符串,用來描述設(shè)備信息,例如:
status 屬性
status 屬性表示設(shè)備的狀態(tài),該屬性值是一個(gè)字符串,可取值包括:
status 值 | 含義 |
---|---|
okay | 設(shè)備可用 |
disabled | 設(shè)備不可用 |
fail | 設(shè)備不可用且有錯(cuò)誤 |
fail-sss | 設(shè)備不可用且有 sss 錯(cuò)誤(sss 是錯(cuò)誤內(nèi)容) |
示例:
compatible 屬性
compatible 是設(shè)備樹與驅(qū)動(dòng)進(jìn)行匹配的屬性,屬性值為字符串,compatible 屬性值的推薦格式:"manufacturer,model"
(“廠商名,模塊驅(qū)動(dòng)名”)。
該屬性可以有多個(gè)值,驅(qū)動(dòng)會從第一個(gè)值開始匹配,示例:
aliases 節(jié)點(diǎn)
aliases 用來定義節(jié)點(diǎn)的別名,它和節(jié)點(diǎn)標(biāo)簽類似,但它可以批量定義別名。
示例:
chosen 節(jié)點(diǎn)
chosen 節(jié)點(diǎn)用來 uboot 給內(nèi)核傳遞參數(shù)(重點(diǎn)是 bootargs 參數(shù)),該節(jié)點(diǎn)必須是根節(jié)點(diǎn)的子節(jié)點(diǎn)。
示例:
device_type 屬性
device_type 屬性值為字符串,只用于 cpu 或 memory 節(jié)點(diǎn)。
示例:
自定義屬性
設(shè)備樹可以自定義一些屬性,
比如 mipi 背光參數(shù),文章來源:http://www.zghlxwxcb.cn/news/detail-536788.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-536788.html
到了這里,關(guān)于itop-3568開發(fā)板驅(qū)動(dòng)學(xué)習(xí)筆記(22)設(shè)備樹(一)設(shè)備樹基礎(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!