Предварительные замечания

Предыдущая  Содержание  Следующая V*D*V

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

 

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

 

#include <linux/module.h>

#include <linux/init.h>

 

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

 

MODULE_LICENSE("GPL");

 

Определёнными лицензиями, признаваемыми ядром являются “GPL” (для любой версии GNU General Public License), “GPL v2” (для GPL версии 2 только), “GPL and additional rights” ("GPL и дополнительные права"), “Dual BSD/GPL” (“Двойная BSD/GPL“), “Dual MPL/GPL” (“Двойная MPL/GPL”) и “Proprietary” (“Частная собственность”). Если ваш модуль не помечен явно находящимся под свободной лицензией, признающейся ядром, предполагается, что он будет частным, а ядро "испорчено", когда модуль загружен. Как уже упоминалось в разделе "Лицензионное соглашение" в Главе 1, разработчики ядра имеют склонность относиться без энтузиазма к помощи пользователям, у которых возникают проблемы после загрузки собственных модулей.

 

Другие описательные определения, которые могут содержаться внутри модуля включают MODULE_AUTHOR (где указывается, кто написал модуль), MODULE_DESCRIPTION (описание для человека, что делает модуль), MODULE_VERSION (номер ревизии кода; смотрите комментарии в <linux/module.h> для соглашений, используемых при создании строки версии), MODULE_ALIAS (другое имя, под которым этот модуль может быть известен) и MODULE_DEVICE_TABLE (говорит пространству пользователя, какие устройства поддерживает модуль). Мы обсудим MODULE_ALIAS в Главе 11 и MODULE_DEVICE_TABLE в Главе 12.

 

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

Предыдущая  Содержание  Следующая