Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): 2.6. Подготовительные мероприятия
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
2.6. Подготовительные мероприятия ximen 25.10.10 в 06:15 |
|
|
Мы подходим к рассмотрению фактического кода модулей. Но сначала нам нужно взглянуть на некоторые вещи, которые обязательно должны быть в вашем коде. Ядро -- это уникальное окружение, и оно налагает свои требования на код, взаимодействующий с ним. ximen 25.10.10 в 06:55 |
||
|
Большая часть кода ядра заканчивается включением достаточно большого числа заголовочных файлов для получения определений функций, типов данных и переменных. Мы рассмотрим эти файлы по ходу того, как они будут нам встречаться, но есть несколько файлов, специфичных для модулей, обязательных для каждого модуля. Так, почти всем модули содержат следующие файлы: ximen 25.10.10 в 06:52 |
||
|
<code> ximen 22.10.10 в 13:38 |
||
|
module.h содержит огромное количество определений символов и функций, необходимых загружаемому модулю. Вам нужен init.h, чтобы указать функции инициализации и завершения, как видно из примера "hello world" выше, с которыми мы ещё встретимся в следующем разделе. Большинство модулей также включают ещё moduleparam.h, что бы позволить передачу параметров модулю во время загрузки; скоро мы до этого доберемся. ximen 22.10.10 в 13:44 |
||
|
Это не является строго обязательным, но вашему модулю на самом деле стоит указать, какая лицензия распространяется на его код. Это всего лишь вопрос добавления строки MODULE_LICENSE: ximen 22.10.10 в 13:47 |
||
|
<code>MODULE_LICENSE("GPL");</code> ximen 22.10.10 в 13:39 |
||
|
Ядро знает следующие лицензии: "GPL" (для любой версии GNU General Public License), "GPL v2" (только для GPL второй версии), "GPL and additional rights" (GPL и дополнительные права), "Dual BSD/GPL" (двойная лицензия GPL/BSL), "Dual MPL/GPL" (двойная лицензия MPL/GPL), and "Proprietary" (проприетарная). Если в модуле явно не отмечено использование свободной лицензии, распознаваемой ядром, полагается что код распространяется под проприетарной лицензией, и ядро "пятнается" при загрузке такого модуля. Как мы отмечали в разделе 1.6, разработчики ядра без энтузиазма относятся к помощи пользователям, испытывающим проблемы после загрузки проприетарных модулей. ximen 25.10.10 в 06:38 |
||
|
Кроме этого, в ядре могут содержаться следующие описательные определения: MODULE_AUTHOR (указывает, кто написал модуль), MODULE_DESCRIPTION (человеко-читаемое описание того, что делает модуль), MODULE_VERSION (номер ревизии кода, см. комментарии в <module.h> соглашения по использованию номеров версий), MODULE_ALIAS (другое имя, под которым может быть известен модуль) и MODULE_DEVICE_TABLE (чтобы сообщить в пространство пользователя о том, какие устройства поддерживает модуль). ximen 25.10.10 в 06:43 |
||
|
Различные определения вида MODULE_ могут встречаться в любом месте файла исходных кодов за пределами функции. Однако, в соответствии с относительно недавними соглашениями, они должны располагаться в конце файла. ximen 25.10.10 в 06:46 |
