Что такое MODULE_ALIAS в коде драйвера устройства Linux?

Объяснение MODULE_ALIAS в коде < /а> говорит

/* work with hotplug and coldplug */
MODULE_ALIAS("platform:omap2_mcspi");

Но что такое MODULE_ALIAS?

Есть ли значение для : (двоеточие) в аргументе?


person Sagar Jain    schedule 01.04.2014    source источник


Ответы (1)


MODULE_ALIAS — это макрос, добавленный в 2002 году с обновлением загрузчиков модулей ядра Linux и используемый с 2003 года. Этот макрос позволяет создателю модуля определять дополнительные имена модуля (псевдонимы), например, чтобы упростить автозагрузку модуля.

Псевдонимы используются, чтобы дать какое-то специальное имя, например. «block-major-100» непосредственно в исходном коде модуля вместо использования /etc/modules.conf для определения псевдонимов. Когда пользовательская программа обращается к блочному устройству со старшим номером 100, ядро ​​попытается загрузить «блок-старший-100». Без MODULE_ALIAS ядро ​​должно перейти в пространство пользователя и прочитать /etc/modules.conf с помощником. А с MODULE_ALIAS("block-major-100") ядром поиск решит сам.

Вы можете прочитать больше об этом макросе в http://lwn.net/Articles/47412/ "MODULE_ALIAS Статья Корбета, 03 сентября 2003 г.

Есть еще несколько специальных версий MODULE_ALIAS, перечисленных corbet:

Реальные используемые варианты зависят от подсистемы; например, блочные драйверы используют MODULE_ALIAS_BLOCKDEV, тогда как символьные устройства используют MODULE_ALIAS_CHARDEV или MODULE_ALIAS_MISCDEV, а сетевые протоколы используют MODULE_ALIAS_NETPROTO.

Согласно исправлению 2011 года от Манса Руллгарда (linaro), или коммит от Кей Сиверс (vrfy), MODULE_ALIAS с аргументом Например, "platform:... используется для включения автоматической загрузки модуля «при сканировании устройств платформы». В драйверах SPI он используется для «драйверов платформы SPI с возможностью горячей замены, чтобы разрешить автоматическую загрузку модуля.», начиная с 43cc71eed1250755986da4c0f9898f9a635cb3bf Кей Сиверс — «platform: префикс MODALIAS с "platform:"":

Префикс строк модалиасов платформы с «платформой:», который modprobe config для разрешения псевдонимов в черный список, если пользовательское пространство настраивает его.

Псевдонимы драйверов с «платформой:» используются в файле drivers/base/platform.c, функция modalias_show(...) (snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);) и в platform_uevent(...) add_uevent_var(env, "MODALIAS=%s%s", PLATFORM_MODULE_PREFIX, pdev->name);, где макрос PLATFORM_MODULE_PREFIX определяется как "platform:" (поэтому двоеточие имеет значение).

person osgx    schedule 01.04.2014
comment
PS: длина имени модуля должна быть не более 19 символов - 482 #define PLATFORM_NAME_SIZE 20 и struct platform_device_id { char name[PLATFORM_NAME_SIZE]; ... из include/linux/mod_devicetable.h файла. - person osgx; 01.04.2014