The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

5.6.1 Интерфейсы модуля

5.6.1 Интерфейсы модуля

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

Пример модуля ядра для версии 2.4 и 2.6 показан в Распечатке 5.9. Модуль выводит строку Hello world каждый раз, когда он загружается и Bye world каждый раз, когда он выгружается. Сколько раз распечатается первая строка зависит от параметра модуля, определённого здесь как excount.

Некоторые моменты, которые следует отметить:

 

Функции входа и выхода: модуль должен иметь функции входа и выхода, которые автоматически вызываются ядром, когда модуль загружается и выгружается, соответственно. В ядре версии 2.4, функциями входа и выхода являются функции init_module() и cleanup_module(). Однако, в ядре версии 2.6 они регистрируются специальным образом с помощью  макросов module_init() и module_exit().

Передача параметров: каждому модулю могут быть переданы параметры; они передаются в качестве аргументов командной строки при загрузке модуля. В ядре версии 2.4 для предоставления аргументов модулю используется макрос MODULE_PARM. В ядре версии 2.6 параметры объявляются с макросом module_param() (* MODULE_PARAM в ядре версии 2.6 является устаревшим.), как показано в Распечатке 5.9.

Поддержка счётчика использования модуля: каждый модуль имеет счётчик использования, который показывает число ссылок на этот модуль. Значение счётчика ссылок 0 означает, что модуль может быть выгружен безопасно. В ядре версии 2.4 счётчик модуля хранился каждым модулем. Этот подход имел дефект при работе кода выгрузки модуля на системах с симметричной многопроцессорной обработкой. Поэтому в системах версии 2.6 модуль не должен поддерживать счётчик использования, вместо этого его поддерживает ядро. Однако, это приводит к проблеме, если происходит обращение к функции модуля после выгрузки модуля. Если вы делаете вызов через указатель на функцию в другом модуле, вы должны иметь ссылку на этот модуль. В противном случае, вы рискуете заснуть в модуле, если он выгружен. Для решения этой проблемы ядро предоставляет интерфейсы для доступа к модулю; ссылку на модуль можно получить при помощи интерфейса try_module_get() и освободить ссылку на него с помощью интерфейса module_put().

Объявление лицензии: каждый модуль должен объявить, является ли он чьей-то собственностью или же непатентованным модулем. Это делается с помощью макроса MODULE_LICENSE. Если аргументом является GPL, это означает, что он будет выпущен под лицензией GPL.

 

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