Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): 2.6. Подготовительные мероприятия

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

2.6. Подготовительные мероприятия

ximen 25.10.10 в 06:15

0

Мы подходим к рассмотрению фактического кода модулей. Но сначала нам нужно взглянуть на некоторые вещи, которые обязательно должны быть в вашем коде. Ядро -- это уникальное окружение, и оно налагает свои требования на код, взаимодействующий с ним.

ximen 25.10.10 в 06:55

1

Большая часть кода ядра заканчивается включением достаточно большого числа заголовочных файлов для получения определений функций, типов данных и переменных. Мы рассмотрим эти файлы по ходу того, как они будут нам встречаться, но есть несколько файлов, специфичных для модулей, обязательных для каждого модуля. Так, почти всем модули содержат следующие файлы:

ximen 25.10.10 в 06:52

0

<code>
#include &lt;module.h&gt;
#include &lt;init.h&gt;
</code>

ximen 22.10.10 в 13:38

0

module.h содержит огромное количество определений символов и функций, необходимых загружаемому модулю. Вам нужен init.h, чтобы указать функции инициализации и завершения, как видно из примера "hello world" выше, с которыми мы ещё встретимся в следующем разделе. Большинство модулей также включают ещё moduleparam.h, что бы позволить передачу параметров модулю во время загрузки; скоро мы до этого доберемся.

ximen 22.10.10 в 13:44

0

Это не является строго обязательным, но вашему модулю на самом деле стоит указать, какая лицензия распространяется на его код. Это всего лишь вопрос добавления строки MODULE_LICENSE:

ximen 22.10.10 в 13:47

0

<code>MODULE_LICENSE("GPL");</code>

ximen 22.10.10 в 13:39

0

Ядро знает следующие лицензии: "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

0

Кроме этого, в ядре могут содержаться следующие описательные определения: MODULE_AUTHOR (указывает, кто написал модуль), MODULE_DESCRIPTION (человеко-читаемое описание того, что делает модуль), MODULE_VERSION (номер ревизии кода, см. комментарии в &lt;module.h&gt; соглашения по использованию номеров версий), MODULE_ALIAS (другое имя, под которым может быть известен модуль) и MODULE_DEVICE_TABLE (чтобы сообщить в пространство пользователя о том, какие устройства поддерживает модуль).

ximen 25.10.10 в 06:43

0

Различные определения вида MODULE_ могут встречаться в любом месте файла исходных кодов за пределами функции. Однако, в соответствии с относительно недавними соглашениями, они должны располагаться в конце файла.

ximen 25.10.10 в 06:46

0
Минутку...