平台匯流排裝置模型

2022-08-03 10:51:11 字數 2290 閱讀 9198

平台匯流排是核心實現的一條虛擬匯流排,

linux

裝置模型包含三個重要的元素,匯流排、裝置和驅動,那看看平台匯流排又是怎樣去實現的。

首先看平台匯流排的定義:

我們知道匯流排匹配裝置和驅動是通過它的

match

函式,那具體看看這個函式是怎樣實現的。

我們看,如果平台驅動有乙個

id_table

,那就通過函式

platform_match_id

去匹配,如果沒有就比較平台裝置的

name

欄位和平台驅動的

name

字段是否相同,這也就是平台匯流排的匹配規則。再來看平台匯流排的註冊。

我們看平台匯流排註冊就是採用的

bus_register

函式,再看在註冊平台匯流排之前,還呼叫了

device_register

去註冊了乙個裝置,因為匯流排它也是乙個裝置,也要被註冊進核心。那就具體來看這個裝置是怎麼定義的。

我們看就給了乙個名字。看完了匯流排,又來看看平台裝置又是怎樣定義怎樣去註冊。

其中有個重要的元素

resource

,該元素存入的最重要的裝置資源資訊,比如

i/o基位址,中斷號等等。

structresource

結構定義在

include/linux/ioport.h

中有可能裝置的資源不只乙個,定義資源時定義成乙個陣列的形式,那就使用函式去獲取,

platform_get_resource

就是用來獲取裝置的資源資訊,去看看這個函式

這個函式的第乙個引數為要獲取資源的平台裝置,第二個引數為資源型別,比如

ioresource_mem

,第三個引數為資源在陣列中的乙個號。如果是獲取中斷號,還可以使用函式

platform_get_irq

我們看這個函式也是呼叫

platform_get_resource

去獲取資源,只是它獲取資源的型別為

ioresource_irq

,最後返回中斷號。

再來看平台裝置的註冊,平台裝置註冊採用

platform_device_register

函式device_initialize

就是device_register

那的函式,那就看

platform_device_add

最終呼叫

device_register

那的device_add

完成平台裝置的註冊。

我們也可以使用

platform_add_devices

去註冊一組平台裝置

看完了註冊來看登出函式,登出函式就是

platform_device_unregister

。device_del

就是device_unregister

那的函式

再來看驅動,平台裝置驅動結構定義

驅動註冊

平台驅動結構裡面有個成員

driver

,它是device_driver

結構型別,它的

probe

函式指標賦值了這裡的

platform_drv_probe

,也就是平台匯流排匹配裝置和驅動成功後,將呼叫這裡的

platform_drv_probe

函式,那就在去看看這個函式。

還有一點的是它的

remove

函式為這裡的

platform_drv_remove

,不管是裝置登出還是驅動登出都是先呼叫這個函式,然後才呼叫平台驅動的

remove

函式。也就是最後呼叫

platform_driver

的probe

函式,它的引數

dev是

platform_device

結構型別。注意這裡有兩個

probe

,乙個是

platform_driver

的probe

,它是要求我們在編寫平台裝置驅動時自己去定義,另乙個是

device_driver

的probe

,它供匯流排匹配裝置和驅動成功後呼叫,

probe

為這裡的

platform_drv_probe

,這個函式的功能就是呼叫

platform_driver

的probe

。平台裝置驅動註冊最後呼叫的就是

driver_register

,只不過這裡的匯流排是平台匯流排。

驅動登出

Linux平台匯流排驅動裝置模型

platform匯流排是一種虛擬的匯流排,相應的裝置則為platform device,而驅動則為platform driver。linux 2.6的裝置驅動模型中,把i2c rtc lcd等都歸納為platform device。匯流排將裝置和驅動繫結,在系統每註冊乙個裝置的時候,會尋找與之匹配的...

平台匯流排模型

平台匯流排模型主要分為3個部分,1.driver 2.device 3.bus device主要放硬體相關的東西 driver裡面主要存放的比較穩定的 我們依然可以檢視gpio keys.c這個 來學習 平台匯流排是一種虛擬的匯流排 driver這個結構體會通過呼叫platform driver r...

匯流排裝置模型 kobject

原創kylin zeng 匯流排裝置驅動 一 sysfs檔案系統 linux2.6核心引入sysfs檔案系統,sysfs可以看成與proc,devfs和devpty同類別的檔案系統,該檔案系統是虛擬的檔案系統,可以更方便對系統裝置進行管理。它可以產生乙個包含所有系統硬體層次檢視,與提供程序和狀態資訊...