platform詳解
時間:2018-08-16作者:華清遠見
一、platform設備模型 從Linux 2.6起引入了一套新的驅動管理和注冊機制,platform_device和platform_driver,Linux中大部分的設備驅動都可以使用這套機制。platform是一條虛擬總線。設備用platform_device表示,驅動用platform_driver進行注冊,linux platform driver機制和傳統的device driver機制(通過driver_register進行注冊)相比,一個明顯的優勢在于platform機制將設備本身的資源注冊進內核,由內核統一管理,在驅動中使用這些資源時通過platform device提供的標準結構進行申請并使用。這樣提高了驅動和資源的獨立性,并且具有較好的可移植性和安全性(這些標準接口是安全的)。 Platform機制本身使用并不復雜,由兩部分組成:platform_device和platform_driver。通過platform機制開發底層驅動的大致流程為: 定義platform_deviece -->注冊platform_device -->定義platform_driver --> 注冊platform_driver。 二、platform的初始化 首先系統啟動的時候會調用platform_bus_init來初始化這個虛擬總線,然后向虛擬總線注冊即將掛載這條總線上的設備。Platform_bus_type部分是內核為為我們實現好的,我們只關系platform_device與platform_driver就行了。
三、s3c2410中總線設備的注冊 總線也是一種設備,所以首先注冊總線設備,然后注冊總線。
把設備掛到總線上:
四、platform中幾個重要的結構體
許多人一看到內核中的結構體就很暈,是的誰都暈,我們可以先關注自己想要知道的一部分,不知道的遇到了再去查。 五、platform_device與platform_driver匹配的過程
下面我們來看一下__driver_attach這個函數,在這個函數里面分別調driver_match_device,driver_probe_device函數。如果匹配成功就調用probe函數,否則返回。
匹配的過程中調用了bus的match函數
看一下platform_match函數
通過后一行我們可以知道,通過設備的名字和驅動的名字進行匹配,如果匹配成功后調用probe函數。 六、我們來看一個實例 platform_device.c
platform_driver.c
這個驅動只是個測試程序,我在platform_driver的probe函數里面點亮了fs2410板子上得LED燈,編譯好后,insmod模塊后就可以看到效果。 platform相關文章: 發表評論
|