Linux驅動中的platform

2021-06-02 19:42:18 字數 1717 閱讀 5219

從linux2.6核心起,引入一套新的驅動管理和註冊機制:platform_device 和 platform_driver 。linux 中大部分的裝置驅動,都可以使用這套機制,裝置用 platform_device 表示;驅動用 platform_driver 進行註冊。

linux platform driver 機制和傳統的device driver機制(即:通過 driver_register 函式進行註冊)相比,乙個十分明顯的優勢在於platform機制將裝置本身的資源註冊進核心,由核心統一管理,在驅動程式中用使用這些資源時,通過platform device提供的標準介面進行申請並使用。

platform 是乙個虛擬的位址匯流排,相比 pci、usb,它主要用於描述soc上的片上資源。platform 所描述的資源有乙個共同點:在cpu 的匯流排上直接取址。平台裝置會分到乙個名稱(用在驅動繫結中)以及一系列諸如位址和中斷請求號(irq)之類的資源。

platform 匯流排下驅動的開發步驟是: 1、

裝置 需要實現的結構體是:platform_device 。

1)初始化 resource 結構變數

2)初始化 platform_device 結構變數

3)向系統註冊裝置:platform_device_register。

以上三步,必須在裝置驅動載入前完成,即執行platform_driver_register()之前,原因是驅動註冊時需要匹配核心中所有已註冊的裝置名。platform_driver_register()中新增device到核心最終還是呼叫的device_add函式。platform_device_add和device_add最主要的區別是多了一步insert_resource(p, r),即將platform資源(resource)新增進核心,由核心統一管理。

2、驅動

驅動註冊中,需要實現的結構體是:platform_driver 。

在驅動程式的初始化函式中,呼叫了platform_driver_register()註冊 platform_driver 。需要注意的是:platform_driver 和 platform_device 中的 name 變數的值必須是相同的 。這樣在 platform_driver_register() 註冊時,會將當前註冊的 platform_driver 中的 name 變數的值和已註冊的所有 platform_device 中的 name 變數的值進行比較,只有找到具有相同名稱的 platform_device 才能註冊成功。當註冊成功時,會呼叫 platform_driver 結構元素 probe 函式指標。

platform_driver_register()的註冊過程:

1 platform_driver_register(&s3c2410fb_driver)

2 driver_register(&drv->driver)

3 bus_add_driver(drv)

4 driver_attach(drv)

5 bus_for_each_dev(drv->bus, null, drv, __driver_attach)

6 __driver_attach(struct device * dev, void * data)

7 driver_probe_device(drv, dev)

8 really_probe(dev, drv)

在really_probe()中:為裝置指派管理該裝置的驅動:dev->driver = drv, 呼叫probe()函式初始化裝置:drv->probe(dev)

Linux 驅動框架 驅動中的非同步

非同步io是對阻塞和輪詢io的機制補充,所謂非同步io就是在裝置資料就緒時主動通知所屬程序進行處理的機制。之所以說是非同步是相對與被通知程序的,因為程序不知道也無法知道什麼時候會被通知 這一機制非常類似於硬體上的中斷。非同步io的實現也依賴於linux核心程序的訊號機制,因為非同步io就是通過sig...

linux驅動中的request irq

我是乙個linux菜鳥,學習初期,寫此小博不為推廣知識,只為總結心得,不準確之處還請看官擔當。驅動中的中斷機制大致如下 1 首先要為裝置向核心申請乙個中斷號,裝置向cpu發生中斷請求的本質,其實就是通過裝置的中斷控制器 interrupt controller 向cpu傳送中斷號,然後cpu根據中斷...

Linux驅動中的platform

從linux2.6核心起,引入一套新的驅動管理和註冊機制 platform device 和 platform driver linux 中大部分的裝置驅動,都可以使用這套機制,裝置用 platform device 表示 驅動用 platform driver 進行註冊。linux platfor...