#linux-kernel #usb #linux-device-driver #platform
#linux-ядро #usb #linux-device-driver #Платформа
Вопрос:
При просмотре кода usb в Linux. Я наткнулся на platform_device_add() api.
Мой вопрос заключается в том, что когда мы создаем устройство платформы с использованием вышеупомянутого API, как связанный драйвер привязывается к нему?
Насколько я понимаю, драйверы платформы регистрируются сами, и когда происходит совпадение со строкой, совместимой с деревом устройств, и той, которая указана в драйвере, вызывается проверка драйвера.
Итак, использует ли он что-то вроде «совместимой строки», как в случае дерева устройств? Использует ли оно поле «name», присутствующее в «struct platform_device», и сопоставляет его с полем «name» struct platform_driver.
Пожалуйста, поправьте меня, если я ошибаюсь. Также будет полезен любой текстовый источник, чтобы узнать больше об этом, поскольку я новичок в этом.
Ответ №1:
Итак, вы задали здесь несколько вопросов.
- Мы вызываем
platform_device_add()
всякий раз, когда мы на 100% уверены, что на данной платформе мы ожидаем, что рассматриваемое устройство будет присутствовать и функционировать. - В большинстве случаев
->probe()
обратный вызов вызывается синхронно либо в момент добавления устройства (если драйвер уже загружен), либо на этапе загрузки драйвера, если устройство присутствует в системе. - Он не использует дерево устройств, это чисто перечисление на основе файлов платы (наличие устройства определяется другими способами, кроме ACPI или дерева устройств).
- Действительно, он использует имя драйвера для сопоставления. При вызове API он совпадает по имени устройства. Фактический код см. В разделе Реализация
platform_match_id()
.