關於platform中的id table

2021-06-25 08:33:30 字數 1437 閱讀 1305

核心版本:linux-3.4.67

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匯流排匹配裝置和驅動有兩種方法:一是通過platform_driver中的id_table,如果id_table不存在,則只是簡單的比較裝置中的name欄位和驅動中的name欄位是否相同。後面一種方法呢,已經見過無數次了,這裡也就不再舉例了,這裡主要是看前一種方法。例如rtc-s3c.c:
static struct platform_device_id s3c_rtc_driver_ids = , , , ,

};

上面就是platform_device_id,可以看到支援的不只一種,包括2410、2416等等。而platform_driver定義如下:
static struct platform_driver s3c_rtc_driver = ,

};

2410的platfrom_device定義如下:

struct platform_device s3c_device_rtc = ;
那麼在匹配的時候,match函式會在驅動的id_table表裡面查詢同platform device的name欄位是否相同,如果相同則返回true,否則返回false。那麼通過id_table這種方式有什麼好處呢,如果只是簡單的比較name欄位是否相同,那麼乙個驅動只能支援特定的乙個裝置,而如果通過id_table的方式呢,乙個驅動可以支援很多個裝置,而它們只是name欄位不同而已。

關於IDT報錯亂碼總結

可算是把我折騰壞了。一籌莫展。最後才把這些問題搞好。有些事不知道做以前,怎麼都想不到。發現了方法之後,原來也不過這樣。我覺得自己記性太差。還是好好寫下來吧。寫下來順便會幫我重新再梳理一遍。原先亂碼是因為字符集的問題。說實話這個問題的原因還沒有找到。當我重新換了個驅動,新建 了關係連線之後,它自己就好...

Linux驅動中的platform

從linux2.6核心起,引入一套新的驅動管理和註冊機制 platform device 和 platform driver linux 中大部分的裝置驅動,都可以使用這套機制,裝置用 platform device 表示 驅動用 platform driver 進行註冊。linux platfor...

Linux驅動中的platform

從linux2.6核心起,引入一套新的驅動管理和註冊機制 platform device 和 platform driver linux 中大部分的裝置驅動,都可以使用這套機制,裝置用 platform device 表示 驅動用 platform driver 進行註冊。linux platfor...