設(shè)備樹

設(shè)備樹
參考:https://www.pianshen.com/article/428276673/
基本概念:
設(shè)備數(shù)是一種描述硬件的數(shù)據(jù)結(jié)構(gòu)
DTS:是一個文本形式的文件,用于描述硬件信息宜肉,包括CPU的數(shù)量和類別匀钧、內(nèi)存基地址和大小、中斷控制器谬返、總線和橋之斯、外設(shè)、時鐘和GPIO控制器等遣铝。
DTSI:把soc公用的部分或者多個設(shè)備共同的部分提煉為dtsi佑刷,類似于c語言的頭文件
DTB:是一個二進制形式的文件翰蠢,由linux內(nèi)核識別,為其中的設(shè)備匹配合適的驅(qū)動程序啰劲。
DTC:將DTS編譯成DTB
bootloader:不同的設(shè)備會有不同的machine id梁沧,uboot在啟動Linux內(nèi)核的時候會將machine id存放到r1寄存器,Linux啟動時會匹配bootloader傳遞的machine id和machine start聲明的machine id蝇裤,然后執(zhí)行相應(yīng)設(shè)備的一系列初始化函數(shù)廷支。

圖0

圖1

linux內(nèi)核啟動以后,先解析并注冊dts中的設(shè)備栓辜,然后再注冊驅(qū)動恋拍,比較驅(qū)動中的compatible 屬性和設(shè)備中的compatible 屬性,或者比較兩者的name屬性藕甩,如果一致則匹配成功施敢。
1、解析dtb
在start_kernel() --> setup_arch(0 --> unflatten_device_tree() --> __unflatten_device_tree()函數(shù)中掃描dtb,并轉(zhuǎn)換成節(jié)點是device_node的樹狀結(jié)構(gòu)僵娃。
2概作、注冊dts設(shè)備
imx6q_init_machine() --> of_platform_populate()。
在of_platform_populate()中循環(huán)掃描根節(jié)點下的各節(jié)點
調(diào)用of_platform_device_create_pdata() —> of_device_add() 注冊設(shè)備并添加到對應(yīng)的鏈表中默怨。
3讯榕、注冊驅(qū)動
圖2

4、匹配設(shè)備
追蹤driver_register()函數(shù)匙睹,driver_register() --> bus_add_driver() --> driver_attach() --> __driver_attach
尋找匹配的設(shè)備愚屁,匹配成功則執(zhí)行驅(qū)動的probe函數(shù)

根節(jié)點的兼容性
Linux內(nèi)核根據(jù)根節(jié)點‘/’的兼容屬性可以判斷啟動什么設(shè)備

圖3

設(shè)備節(jié)點的兼容性
在.dts文件中的每一個設(shè)備節(jié)點都有一個兼容屬性况增,用于驅(qū)動和設(shè)備之間的綁定陶冷。
圖4

兼容性的設(shè)置都是從具體到抽象
使用設(shè)備樹之后,驅(qū)動需要與.dts中描述的設(shè)備節(jié)點進行匹配绿鸣,從而使驅(qū)動的probe()函數(shù)執(zhí)行谆棺,對于platform_driver栽燕,需要添加一個OF匹配表(competible)
圖5

而Linux內(nèi)核常用如下API來判斷具體設(shè)備是什么:
int of_device_is_compatible(const struct device_node *device,const char *compat);
此函數(shù)用于判斷設(shè)備節(jié)點的 兼容屬性是否含有compat指定的字符串,能讓一個驅(qū)動至此兩個以上設(shè)備改淑。

設(shè)備樹中中斷的連接
要聲明controller屬性和cells大小

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碍岔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子朵夏,更是在濱河造成了極大的恐慌蔼啦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仰猖,死亡現(xiàn)場離奇詭異捏肢,居然都是意外死亡,警方通過查閱死者的電腦和手機饥侵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門鸵赫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人躏升,你說我怎么就攤上這事辩棒。” “怎么了膨疏?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵一睁,是天一觀的道長。 經(jīng)常有香客問我佃却,道長者吁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任饲帅,我火速辦了婚禮复凳,結(jié)果婚禮上瘤泪,老公的妹妹穿的比我還像新娘。我一直安慰自己染坯,他們只是感情好均芽,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著单鹿,像睡著了一般掀宋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仲锄,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天劲妙,我揣著相機與錄音,去河邊找鬼儒喊。 笑死镣奋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怀愧。 我是一名探鬼主播侨颈,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芯义!你這毒婦竟也來了哈垢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤扛拨,失蹤者是張志新(化名)和其女友劉穎耘分,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绑警,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡求泰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了计盒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渴频。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖北启,靈堂內(nèi)的尸體忽然破棺而出卜朗,到底是詐尸還是另有隱情,我是刑警寧澤暖庄,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布聊替,位于F島的核電站楼肪,受9級特大地震影響培廓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜春叫,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一肩钠、第九天 我趴在偏房一處隱蔽的房頂上張望泣港。 院中可真熱鬧,春花似錦价匠、人聲如沸当纱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坡氯。三九已至,卻和暖如春洋腮,著一層夾襖步出監(jiān)牢的瞬間箫柳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工啥供, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悯恍,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓伙狐,卻偏偏與公主長得像涮毫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贷屎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容