歡迎您光臨本站 註冊首頁

Linux驅動中的platform

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

作者:李智敏,華清遠見嵌入式學院講師.

Linux2.6內核起,引入一套新的驅動管理和註冊機制:platform_device platform_driver .Linux

中大部分的設備驅動,都可以使用這套機制,設備用 platform_device 表示;驅動用 platform_driver 進行註冊.

Linux platform driver 機制和傳統的device driver機制(即:通過 driver_register 函數進行註冊)相比,一個十分明顯的優勢在於platform

機制將設備本身的資源註冊進內核,由內核統一管理,在驅動程序中用使用這些資源時,通過platform device提供的標準介面進行申請並使用.

platform 是一個虛擬的地址匯流排,相比 PCIUSB,它主要用於描述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驅動中的platform已經有536次圍觀

http://coctec.com/docs/linux/show-post-49595.html