Связывание устройств платформы и драйверов платформы

#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:

Итак, вы задали здесь несколько вопросов.

  1. Мы вызываем platform_device_add() всякий раз, когда мы на 100% уверены, что на данной платформе мы ожидаем, что рассматриваемое устройство будет присутствовать и функционировать.
  2. В большинстве случаев ->probe() обратный вызов вызывается синхронно либо в момент добавления устройства (если драйвер уже загружен), либо на этапе загрузки драйвера, если устройство присутствует в системе.
  3. Он не использует дерево устройств, это чисто перечисление на основе файлов платы (наличие устройства определяется другими способами, кроме ACPI или дерева устройств).
  4. Действительно, он использует имя драйвера для сопоставления. При вызове API он совпадает по имени устройства. Фактический код см. В разделе Реализация platform_match_id() .