平台匯流排匹配流程platform match

2021-08-28 05:43:59 字數 2044 閱讀 5771

platform_match函式原始碼

/**

* platform_match - bind platform device to platform driver.

* @dev: device.

* @drv: driver.

* * platform device ids are assumed to be encoded like this:

* "", where is a short description of the type of

* device, like "pci" or "floppy", and is the enumerated

* instance of the device, like '0' or '42'. driver ids are simply

* "". so, extract the from the platform_device structure,

* and compare it against the name of the driver. return whether they match

* or not.

*/static int platform_match(struct device *dev, struct device_driver *drv)

從match函式中可以看到,platform匯流排匹配裝置和驅動有兩種方法:

1.通過of_driver_match_device進行匹配

static inline int of_driver_match_device(struct device *dev,

const struct device_driver *drv)

of_driver_match_device這個函式最終呼叫到__of_match_node()函式,在這個函式裡,通過把struct device_driver的of_match_table和struct device裡的of_node(device_node結構體)進行匹配,匹配方式是分別比較兩者的name、type、和compatible字串,三者要同時相同(一般name、和type為空,只比較compatible字串,比較compatible時,是比較整個字串,不管字串裡的逗號的,直接compare整個字串)。compatible是dts中定義的節點

現在核心解析dtb檔案,然後建立platform裝置時,大部分platform裝置是沒有名字的,我還糾結那它們怎麼和驅動match,原來bus_type的match函式新增了of_driver_match_device()這個匹配方式。他們大部分是通過compatible這個屬性匹配成功的(這個compatible也對應dts裡的compatible字串)。

追溯到底,是利用"compatible"來匹配的,即裝置樹載入之後,核心會自動把裝置樹節點轉換成 platform_device這種格式,同時把名字放到of_node這個地方。

2.通過platform_match_id來進行匹配

static const struct platform_device_id *platform_match_id(

const struct platform_device_id *id,

struct platform_device *pdev)

id++;

} return null;

}

可以看到匹配的是platform_driver->id_table->name和platform_device->name

3.匹配裝置中的name欄位和驅動中的name欄位

匹配裝置中的name欄位和驅動中的name欄位是否相同,即platform_driver->name和platform_device->name

return (strcmp(pdev->name, drv->name) == 0);

平台匯流排概述

platform匯流排是linux2.6核心加入的一種虛擬匯流排。platform機制的本身使用並不複雜,由兩部分組成 platform device 和 platform driver platform驅動與傳統的裝置驅動模型相比,優勢在於platform機制將裝置本身的資源註冊進核心,由核心統一...

平台匯流排(三)

平台匯流排 用於平台公升級的 三星 s3c2410 s3c6410 s5pv210 gpio控制器 gpio控制器 gpio控制器 uart i2cspi 控制邏輯方法相同 1,配置gpio暫存器 2.讀寫資料 位址會不同 三元素 匯流排 開機的時候就已經建立了,不需要我們建立 struct bus...

平台匯流排模型

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