匯流排裝置驅動模型

2022-09-16 11:27:11 字數 2696 閱讀 3854

目錄程式編寫步驟

程式示例

引入 platform_device/platform_driver,將「資源」與「驅動」分離開來。**稍微複雜,但是易於擴充套件。冗餘**太多,修改引腳時裝置端的**需要重新編譯。(其實就是系統將物件導向的分層分離思想給抽象出來供人們使用,見驅動設計的思想:物件導向/分層/分離)

更換引腳時,上圖中的 led_drv.c 基本不用改,但是需要修改 led_dev.c

最先比較:platform_device. driver_overrideplatform_driver.driver.name

可以設定 platform_device 的 driver_override,強制選擇某個 platform_driver。

然後比較:platform_device. nameplatform_driver.id_table[i].name

platform_driver.id_table 是「platform_device_id」指標,表示該 drv 支援若干個 device,它

裡面列出了各個 device 的,其中的「name」表示該 drv 支援的裝置的名

字,driver_data 是些提供給該 device 的私有資料。

最後比較:platform_device.nameplatform_driver.driver.name

platform_driver.id_table 可能為空,

這時可以根據 platform_driver.driver.name 來尋找同名的 platform_device。

函式呼叫關係

platform_device_register

platform_device_add

device_add

bus_add_device // 放入鍊錶

bus_probe_device // probe 列舉裝置,即找到匹配的(dev, drv)

device_initial_probe

__device_attach

bus_for_each_drv(...,__device_attach_driver,...)

__device_attach_driver

driver_match_device(drv, dev) // 是否匹配

driver_probe_device // 呼叫 drv 的 probe

platform_driver_register

__platform_driver_register

driver_register

bus_add_driver // 放入鍊錶

driver_attach(drv)

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

__driver_attach

driver_match_device(drv, dev) // 是否匹配

driver_probe_device // 呼叫 drv 的 probe

這些函式可檢視核心原始碼:drivers/base/platform.c,根據函式名即可知道其含義。下面摘取常用的幾個函式。註冊/反註冊

platform_device_register/ platform_device_unregister

platform_driver_register/ platform_driver_unregister

platform_add_devices // 註冊多個 device

獲得資源① 分配/設定/註冊 platform_device 結構體在裡面定義所用資源,指定裝置名字。② 分配/設定/註冊 platform_driver 結構體

​ **在其中的 probe 函式裡,分配/設定/註冊 file_operations 結構體,並從 platform_device 中確實所用硬體資 **

源。指定 platform_driver 的名字。

匯流排 裝置 驅動模型

裝置元素 匯流排,驅動,裝置 匯流排 處理器和裝置之間的通道,在裝置模型中,所有的裝置都通過匯流排相連,甚至是內部的虛擬 platform 匯流排 定時器,看門狗並沒有直接相連 在linux裝置模型中,匯流排由bus type結構表示,定義在 匯流排的註冊使用 bus register struct...

匯流排裝置驅動模型

匯流排裝置驅動模型 匯流排是主機和裝置之間的通道,由bus type 結構描述。int bus register struct bus type bus 匯流排的註冊,若成功,新的匯流排將被新增進系統,並可在 sysfs 的 sys bus 下看到。void bus unregister struc...

匯流排裝置驅動模型

匯流排 乙個匯流排是處理器和乙個或多個裝置之間的通道。為裝置模型的目的,所有的裝置都通過乙個匯流排連線,甚至當它是乙個內部的虛擬的 平台 匯流排。裝置 裝置就是連線在匯流排上的物理實體。裝置是有功能之分的。具有相同功能的裝置被歸到乙個類 class 中。在linux 系統中,每個裝置由乙個 stru...