platform總線驅(qū)動(dòng)理論學(xué)習(xí)(如有侵權(quán),聯(lián)系刪除)
1、何謂platform總線?
簡而言之,就是linux設(shè)備驅(qū)動(dòng)模型針對(duì)不能劃分到USB、PCI、SPI等物理總線下的設(shè)備而創(chuàng)建的虛擬總線(內(nèi)核2.6版本引入),其目的是為了讓所有設(shè)備都能掛接在總線上,實(shí)現(xiàn)驅(qū)動(dòng)模型的統(tǒng)一。
2、如何識(shí)別platform 設(shè)備?
這類設(shè)備有一個(gè)基本的特征:
就是能通過CPU bus直接尋址(例如“寄存器”),例如集成在SOC中的外設(shè)控制器、掛接在內(nèi)存中的外設(shè)等?;诖?,內(nèi)核在設(shè)備模型的基礎(chǔ)上(device和device_driver),對(duì)這些設(shè)備進(jìn)行了抽象和封裝,得出了platform bus、platform device和platform driver,以便于驅(qū)動(dòng)開發(fā)人員可以便捷地開發(fā)這類設(shè)備的驅(qū)動(dòng)。
3、platform子系統(tǒng)的軟件架構(gòu)
這里引用窩窩科技的一張圖,最能直觀說明

linux設(shè)備驅(qū)動(dòng)模型中,platform子系統(tǒng)有關(guān)的代碼位于include/linux/platform_device.h和drivers/base/platform.c這兩個(gè)文件中,從上面的架構(gòu)圖可知,該子系統(tǒng)組要由三部分組成:
platform bus: 基于底層的bus模塊進(jìn)行抽象,得到一個(gè)platform bus,用于掛接platform設(shè)備
platform device:基于底層device模塊,抽象得到platform device,用于表示平臺(tái)設(shè)備
platform driver:基于底層的device_driver模塊,抽象得到platform driver,用于驅(qū)動(dòng)平臺(tái)設(shè)備
platform總線負(fù)責(zé)管理platform device和platform driver,在總線上會(huì)維護(hù)一個(gè)設(shè)備鏈表和一個(gè)驅(qū)動(dòng)鏈表,向總線注冊(cè)的設(shè)備和驅(qū)動(dòng)會(huì)分別被加入對(duì)應(yīng)的鏈表中,同樣地,卸載的驅(qū)動(dòng)和設(shè)備都會(huì)被從對(duì)應(yīng)的鏈表中刪除。
platform device和platform driver模塊會(huì)向驅(qū)動(dòng)開發(fā)人員開發(fā)對(duì)應(yīng)的API,以方便開發(fā)人員使用平臺(tái)總線驅(qū)動(dòng)框架開發(fā)驅(qū)動(dòng)。開放的內(nèi)容大致有:
1、結(jié)構(gòu)體,struct platform_driver和struct platform_device,開發(fā)人員對(duì)結(jié)構(gòu)體進(jìn)行填充
2、開放設(shè)備和驅(qū)動(dòng)的注冊(cè)、卸載等接口
platform bus、platform device、platform driver都會(huì)在內(nèi)核啟動(dòng)完成必要的初始化后注冊(cè)進(jìn)內(nèi)核,此后便可以履行管理平臺(tái)設(shè)備和驅(qū)動(dòng)的職責(zé)。
參考文章:
http://www.wowotech.net/device_model/platform_device.html/platform_device.html