Трудное время в понимании использования MODULE_DEVICE_TABLE (usb, id_table)
Мне трудно понять точное использование MODULE_DEVICE_TABLE(usb, id_table)
AFAIK это сгенерирует файлы карт, которые будут использоваться позже modprobe
всякий раз, когда будет вставлено новое устройство, оно будет сопоставлять его с этими файлами карты и загружать модуль, если он соответствует.
Но мое недоразумение: "Разве модуль не загружен?"
Я имею в виду, что я уже загрузил его, когда сделал insmod module-name
. или я чего-то не хватает?
Ответы
Ответ 1
Обычно он используется для поддержки горячего подключения, загружая/вставляя драйвер для устройства, если он еще не загружен.
Здесь есть аналогичный вопрос: Обнаружение присутствия устройства, когда он подключен к сети в Linux
(Из моих ans)
Он работает следующим образом:
-
Каждый драйвер кода обнаруживает свой идентификатор поставщика/устройства, используя:
MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
-
Во время компиляции процесс сборки извлекает эту информацию из всех драйверов и подготавливает таблицу устройств.
-
Когда вы вставляете устройство, таблица устройств передается ядром, и если найдена запись, соответствующая идентификатору устройства/поставщика добавленного устройства, тогда его модуль загружается и инициализируется.
Ответ 2
В соответствии с драйверами устройств Linux:
-
MODULE_DEVICE_TABLE
используется для создания файлов карт программой depmod
;
- Когда устройство подключено к сети, драйвер шины генерирует событие hotplug. Ядро вызывает
/sbin/hotplug
с соответствующими настройками окружающей среды;
- Учитывая файлы карт и информацию из среды,
/sbin/hotplug
решает, какой модуль загружает и фактически загружает его. Если модуль уже загружен, это нормально.
Я должен еще раз отметить, что этот механизм просто гарантирует, что необходимый модуль на месте, когда устройство подключено. Это не связывает модуль с этим устройством или чем-то еще. Просто загружает модуль.
Чтобы проверить, нормально ли драйвер для конкретного устройства, используется функция match()
из bus_type
.
Ответ 3
Вот как я понимаю вещи [совместимый с Xbuntu 14.04].
Как только мы написали модуль, мы можем либо загрузить его вручную, либо автоматически.
Вы можете контролировать загрузку/выгрузку модуля с помощью событий udev, используя:
Монитор udevadm
команды.
Ответ 4
The MODULE_DEVICE_TABLE() macro allows depmod to extract
at compile time the relation between device identifiers and
drivers, so that drivers can be loaded automatically by udev