我看到了一個場景,其中「struct of_device_id」未在驅動程序中定義,但在爲相同設備條目添加的設備樹(dts)文件兼容字符串中。驅動程序綁定使用驅動程序中沒有兼容字符串的設備樹
以下是芯片的示例設備樹條目。
&i2c1 {
...
adv7ex: [email protected] {
compatible = "adv7ex";
reg = <0x4a>;
};
...
};
以下是正在註冊爲I2C驅動程序的芯片驅動程序的示例代碼片段。
static struct i2c_device_id adv7ex_id[] = {
{ "adv7ex", ADV7EX },
{ }
};
MODULE_DEVICE_TABLE(i2c, adv7ex_id);
static struct i2c_driver adv7ex_driver = {
.driver = {
.owner = THIS_MODULE,
.name = "adv7ex",
},
.probe = adv7ex_probe,
.remove = adv7ex_remove,
.id_table = adv7ex_id,
};
module_i2c_driver(adv7ex_driver);
能否請你幫我瞭解設備驅動程序綁定在這種情況下發生的,因爲沒有「of_device_id」結構中的驅動程序定義。
我想你正在尋找類似於:i2c_register_adapter() - > of_i2c_register_devices() - > of_i2c_register_device() - > of_modalias_node()。 – 0andriy 2015-02-09 13:30:33
我不確定of_i2c_register_device()的用途,我的疑問是,如果在裸驅動程序結構(struct device_driver)中沒有填充兼容字符串,那麼設備樹核心將如何將驅動程序與設備條目綁定。 – user3693586 2015-02-09 13:40:49
在內核中只有一個映射,即通過名稱(或modalias是名稱的別名)。因此,您必須在設備樹和驅動程序中提供相同的名稱。問題可能是如何匹配它們。 – 0andriy 2015-02-09 13:43:39