Экспортируемые символы

Экспортируемые символы

При загрузке модули динамически компонуются с ядром. Так же как и в случае динамически загружаемых бинарных файлов пространства пользователя, в коде модулей могут вызываться только те функции ядра (основного образа или других модулей), которые явно экспортируются для использования. В ядре экспортирование осуществляется с помощью специальных директив EXPORT_SYMBOL() и EXPORT_SYMBOL_GPL().

Функции, которые экспортируются, доступны для использования модулями. Функции, которые не экспортируются, не могут быть вызваны из модулей. Правила компоновки и вызова функций для модулей значительно более строгие, чем для основного образа ядра. Код ядра может использовать любые интерфейсы ядра (кроме тех, которые определены с ключевым словом static), потому что код ядра компонуется в один выполняемый образ. Экспортируемые символы, конечно, тоже не должны определяться как static.

Набор символов ядра, которые экспортируются, называется экспортируемым интерфейсом ядра или даже (здесь не нужно удивляться) API ядра.

Экспортировать символы просто. После того как функция определена, необходимо вызвать директиву EXPORT_SYMBOL().

/*

* get_pirate_beard_color — возвратить значение цвета бороды текущего

* пирата pirate — это глобальная переменная, доступная из данной

* функции цвета определены в файле <linux/beard_colors.h>

*/

int get_pirate_beard_color(void) {

 return pirate->beard->color;

}

EXPORT_SYMBOL(get_pirate_beard_color);

Допустим, что функция get_pirate_beard_color() объявлена в заголовочном файле и ее может использовать любой модуль.

Некоторые разработчики хотят, чтобы их интерфейсы были доступны только для модулей с лицензией GPL. Такая возможность обеспечивается компоновщиком ядра с помощью макроса MODULE_LICENSE(). Если есть желание, чтобы рассматриваемая функция была доступна только для модулей, которые помеченные как соответствующие лицензии GPL, то экспортировать функцию можно следующим образом.

EXPORT_SYMBOL_GPL(get_pirate_beard_color);

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Отладочные символы

Из книги Linux From Scratch автора Бикманс Герард

Отладочные символы Большинство программ и библиотек по умолчанию компилируются с символами отладки. ( с опцией gcc -g).При отладке программы или библиотеки, скомпилированной с отладочной информацией, отладчик предоставляет не только адреса в памяти, но и имена алгоритмов и


Специальные символы

Из книги Microsoft Office автора Леонтьев Виталий Петрович

Специальные символы Картинками мы балуем документ сравнительно редко, а вот к услугам специальных символов приходится прибегать куда чаще. «Специальными» мы называем те символы, которые не указаны на нашей клавиатуре. И неважно, что это – значки арабской вязи, китайские


1. Металингвистические символы

Из книги Базы данных: конспект лекций автора Автор неизвестен

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


Вступление: стандартные символы и символы Unicode

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Вступление: стандартные символы и символы Unicode Прежде чем двигаться дальше, необходимо кратко объяснить, как Windows обрабатывает символы и различает 8-битовые, 16-битовые и обобщенные символы. Эта тема весьма обширна и выходит за рамки данной книги, поэтому мы не будем


6.1. Символы

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

6.1. Символы Символ в Ruby — это экземпляр класса Symbol. Синтаксически он обычно обозначается двоеточием (:), за которым следует идентификатор.Символ похож на строку, он тоже соответствует последовательности символов. Отличие от строки состоит в том, что у каждого символа есть


6.1.1. Символы как перечисления

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

6.1.1. Символы как перечисления В языке Pascal и в поздних версиях С есть понятие перечисляемого типа. В Ruby ничего подобного быть не может, ведь никакого контроля типов не производится. Но символы часто используются как мнемонические имена; стороны света можно было бы


6.1.2. Символы как метазначения

Из книги Самоучитель работы на Macintosh автора Скрылина Софья

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


Пробельные символы

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Пробельные символы Символы пробел, табуляция, перевод строки, возврат каретки, новая страница, вертикальная табуляция и новая строка называются пробельными, поскольку они имеют то же самое назначение, что и пробелы между словами и строками в тексте на естественном языке.


6.1.3. Форматируем символы

Из книги Язык Си - руководство для начинающих автора Прата Стивен

6.1.3. Форматируем символы Для выполнения заданий нам понадобится материал разд. 5.1.4 и 5.1.5. Задание № 11. Открыть файл упр. pages, перейти на пустую страницу документа, вставив разрыв в конце последней строки аналогично предыдущему разделу.2. Набрать с клавиатуры фамилию, имя,


Специальные символы

Из книги Офисный компьютер для женщин автора Пастернак Евгения

Специальные символы Элементы (ключевые слова, параметры), которые обязательны во всех случаях, появляются без каких-либо дополнительных пометок, они выделены таким шрифтом, как и весь код в книге. В предыдущем примере ключевые слова SELECT и FROM являются обязательными для


13.4.1. Широкие символы

Из книги автора

13.4.1. Широкие символы Мы начнем с концепции широких символов (wide character). Широкий символ является целым типом, в котором может храниться любое значение из определенного используемого многобайтного набора символов.Широкие символы представлены на С типом wchar_t. C99


Символы

Из книги автора

Символы Эти знаки соответствуют типографским символам, таким, как А, &, + и т. п. Обычно под каждый символ отводится 1 байт памяти.Char: ключевое слово, используемое для указания данных этого типа. Данные этих типов могут принимать положительные и отрицательные


Символы

Из книги автора

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