2010-06-13 4 views
0

Я пишу драйвер USB, и у меня есть проблема. Когда я вставляю драйвер с уже подключенным устройством, функция зонда не вызывается. Он вызывается только после того, как я отсоединяю устройство и снова подключаю его. Я хочу сделать так, чтобы он работал, когда я запускал свой компьютер с уже подключенным устройством.linux usb driver: зондирование уже подключенных устройств

Может ли кто-нибудь помочь мне?

+0

Существует различие между подключением устройства, а затем загрузкой драйвера после загрузки ядра "и" загрузкой драйвера во время загрузки с уже подключенным устройством. Разве это не работает для обоих этих случаев? AFAIK не будет работать, если вы загрузите модуль после подключения устройства. – Bandan

ответ

0

С Documentation/водитель-модель/binding.txt:

При добавлении нового устройства, список из автобуса в водителях итеративен над , чтобы найти тот, который поддерживает его. Чтобы определить это, устройство ID устройства должно соответствовать одному из идентификаторов устройства, которое поддерживает драйвер . Формат и семантика для сравнения идентификаторов зависят от шины.

Из того же источника:

Процесс практически идентичен, когда добавляется новый драйвер. Список устройств шины перебирается, чтобы найти совпадение. Устройства , которые уже имеют драйвер, пропускаются. Все устройства перезаписаны , чтобы связать как можно больше устройств с драйвером.

Так это выглядит, как у вас есть проблема в согласовании ID, то есть в вашем случае специфичны для шины USB, смотрите функцию usb_device_match в драйверах/USB/ядра/driver.c.

Возможно, ваше устройство уже подключено к устройству, которое выгружено при отключении устройства (вы можете проверить это, контролируя наличие символической ссылки на драйвер в соответствующем/sys/bus/usb/xxxxx)

0

«Возможно, ваше устройство уже связано с устройством, которое выгружено, когда устройство отключено (вы можете проверить это, контролируя наличие символической ссылки на драйвер в соответствующем/sys/bus/usb/xxxxx) "

И если есть символическая ссылка?

0

Это можно решить, написав правильное правило udev для вашего устройства. Посмотрите примеры на /etc/udev/rules.d/