Я видел один сценарий, в котором «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
Я не уверен, что цель of_i2c_register_device() заключается в том, что здесь нет совместимой строки, заполненной структурой голых драйверов (struct device_driver), а затем, как ядро дерева устройств свяжет запись устройства с драйвером. – user3693586
В ядре есть только одно сопоставление, то есть по имени (или modalias, который является псевдонимом имени). Таким образом, вы должны указать как в дереве устройств, так и в драйвере одинаковое имя. Вопрос, вероятно, в том, как их сопоставить. – 0andriy