platform詳解
時(shí)間:2018-08-16作者:華清遠(yuǎn)見
一、platform設(shè)備模型 從Linux 2.6起引入了一套新的驅(qū)動(dòng)管理和注冊(cè)機(jī)制,platform_device和platform_driver,Linux中大部分的設(shè)備驅(qū)動(dòng)都可以使用這套機(jī)制。platform是一條虛擬總線。設(shè)備用platform_device表示,驅(qū)動(dòng)用platform_driver進(jìn)行注冊(cè),linux platform driver機(jī)制和傳統(tǒng)的device driver機(jī)制(通過driver_register進(jìn)行注冊(cè))相比,一個(gè)明顯的優(yōu)勢(shì)在于platform機(jī)制將設(shè)備本身的資源注冊(cè)進(jìn)內(nèi)核,由內(nèi)核統(tǒng)一管理,在驅(qū)動(dòng)中使用這些資源時(shí)通過platform device提供的標(biāo)準(zhǔn)結(jié)構(gòu)進(jìn)行申請(qǐng)并使用。這樣提高了驅(qū)動(dòng)和資源的獨(dú)立性,并且具有較好的可移植性和安全性(這些標(biāo)準(zhǔn)接口是安全的)。 Platform機(jī)制本身使用并不復(fù)雜,由兩部分組成:platform_device和platform_driver。通過platform機(jī)制開發(fā)底層驅(qū)動(dòng)的大致流程為: 定義platform_deviece -->注冊(cè)platform_device -->定義platform_driver --> 注冊(cè)platform_driver。 二、platform的初始化 首先系統(tǒng)啟動(dòng)的時(shí)候會(huì)調(diào)用platform_bus_init來初始化這個(gè)虛擬總線,然后向虛擬總線注冊(cè)即將掛載這條總線上的設(shè)備。Platform_bus_type部分是內(nèi)核為為我們實(shí)現(xiàn)好的,我們只關(guān)系platform_device與platform_driver就行了。
三、s3c2410中總線設(shè)備的注冊(cè) 總線也是一種設(shè)備,所以首先注冊(cè)總線設(shè)備,然后注冊(cè)總線。
把設(shè)備掛到總線上:
四、platform中幾個(gè)重要的結(jié)構(gòu)體
許多人一看到內(nèi)核中的結(jié)構(gòu)體就很暈,是的誰都暈,我們可以先關(guān)注自己想要知道的一部分,不知道的遇到了再去查。 五、platform_device與platform_driver匹配的過程
下面我們來看一下__driver_attach這個(gè)函數(shù),在這個(gè)函數(shù)里面分別調(diào)driver_match_device,driver_probe_device函數(shù)。如果匹配成功就調(diào)用probe函數(shù),否則返回。
匹配的過程中調(diào)用了bus的match函數(shù)
看一下platform_match函數(shù)
通過后一行我們可以知道,通過設(shè)備的名字和驅(qū)動(dòng)的名字進(jìn)行匹配,如果匹配成功后調(diào)用probe函數(shù)。 六、我們來看一個(gè)實(shí)例 platform_device.c
platform_driver.c
這個(gè)驅(qū)動(dòng)只是個(gè)測(cè)試程序,我在platform_driver的probe函數(shù)里面點(diǎn)亮了fs2410板子上得LED燈,編譯好后,insmod模塊后就可以看到效果。 platform相關(guān)文章: 相關(guān)資訊
發(fā)表評(píng)論
|
全國(guó)咨詢電話:400-611-6270,雙休日及節(jié)假日請(qǐng)致電值班手機(jī):15010390966
在線咨詢: 曹老師QQ(3337544669), 徐老師QQ(1462495461), 劉老師 QQ(3108687497)
企業(yè)培訓(xùn)洽談專線:010-82600901,院校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)
Copyright 2004-2018 華清遠(yuǎn)見教育科技集團(tuán) 版權(quán)所有 ,京ICP備16055225號(hào),京公海網(wǎng)安備11010802025203號(hào)