【轉】Linux驅動中的platform

Linux驅動中的platform

      從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()的註冊過程:

 

在really_probe()中:爲設備指派管理該設備的驅動:dev->driver = drv, 調用probe()函數初始化設備:drv->probe(dev)

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/farsight2009/archive/2010/11/02/5983324.aspx

發佈了29 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章