Модуль "Hello, World!"

Модуль "Hello, World!"

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

Может показаться банальным, но иметь возможность написать программу, которая выводит сообщение "Hello World!", и не сделать этого- просто смешно. Итак, леди и джентльмены, модуль "Hello, World!".

/*

* hello.c - модуль ядра Hello, World!

*/

#include <linux/init.h>

#include <linux/module.h>

#include <linux/kernel.h>

/*

* hello_init - функция инициализации, вызывается при загрузке модуля,

* В случае успешной загрузки модуля возвращает значение нуль,

* и ненулевое значение в противном случае.

*/

static int hello_init(void) {

 printk(KERN_ALERT "I bear a charmed life. ");

 return 0;

}

/*

* hello_exit - функция завершения, вызывается при выгрузке модуля.

*/

static void hello_exit(void) {

 printk(KERN_ALERT "Out, out, brief candle! ");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_LICENSE{"GPL");

MODULE_AUTHOR("Shakespeare");

Это самый простой модуль ядра, который только может быть. Функция hello_init() регистрируется с помощью макроса module_init() в качестве точки входа в модуль. Она вызывается ядром при загрузке модуля. Вызов module_init() — это не вызов функции, а макрос, который устанавливает значение своего параметра в качестве функции инициализации. Все функции инициализации должны соответствовать следующему прототипу.

int my_init(void);

Так как функция инициализации редко вызывается за пределами модуля, ее обычно не нужно экспортировать и можно объявить с ключевым словом static.

Функции инициализации возвращают значение тина int. Если инициализация (или то, что делает функция инициализации) прошла успешно, то функция должна возвратить значение нуль. В случае ошибки возвращается ненулевое значение.

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

Функция hello_exit() регистрируется в качестве точки выхода из модуля с помощью макроса module_exit(). Ядро вызывает функцию hello_exit(), когда модуль удаляется из памяти. Завершающая функция должна выполнить очистку ресурсов, гарантировать, что аппаратное обеспечение находится в непротиворечивом состоянии, и т.д. После того как эта функция завершается, модуль выгружается.

Завершающая функция должна соответствовать следующему прототипу.

void my_exit(void);

Так же как и в случае функции инициализации, ее можно объявить как static.

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

Макрос MODULE_LICENSE() позволяет указать лицензию на право копирования модуля. Загрузка в память модуля, для которого лицензия не соответствует GPL, приведет к установке в ядре флага tainted (буквально, испорченное). Этот флаг служит для информационных целей, кроме того, многие разработчики уделяют меньше внимания сообщениям об ошибках, в которых указан этот флаг. Более того, модули, у которых лицензия не соответствует GPL, не могут использовать символы, которые служат "только для GPL" (см. раздел "Экспортируемые символы" ниже в этой главе).

Наконец, макрос MODULE_AUTHOR() позволяет указать автора модуля. Значение этого макроса служит только для информационных целей.

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

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

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

ТЕХНОЛОГИИ:World: вид сверху

Из книги Журнал «Компьютерра» №43 от 22 ноября 2005 года автора Журнал «Компьютерра»

ТЕХНОЛОГИИ:World: вид сверху Сервисы Google Maps и Google Moon, а также программа Google Earth стали в последнее время самыми популярными источниками изображений земной и лунной поверхностей, снятых со спутника. Благодаря тому, что компания Google открыла API Google Maps, ее сервис стал стандартом


World Time Clock

Из книги 200 лучших программ для Интернета. Популярный самоучитель автора Краинский И

World Time Clock Производитель: EffTex Development (http://worldtime-clock.com/).Статус: коммерческая.Страница для скачивания: http://worldtime-clock.com/download.html.Размер: 1,3 Мбайт.Если вы едете отдыхать не просто далеко, а очень далеко, не забудьте взять с собой в дорогу программу World Time Clock. Она поможет вам не забыть


Hello, world

Из книги Энциклопедия разработчика модулей ядра Linux автора Померанц Ори


Новинки Mobile World Congress 2010 Алексей Стародымов

Из книги Цифровой журнал «Компьютерра» № 8 [17.2.2010 - 23.2.2010] автора Журнал «Компьютерра»

Новинки Mobile World Congress 2010 Алексей Стародымов Сегодня мы поговорим о новых мобильниках и смартфонах, представленных в ходе выставки Mobile World Congress 2010, которая стартовала 15 февраля в испанской Барселоне. Сразу же замечу, что, хотя нам показали десятки свежих продуктов,


1.5.3. Internet и World Wide Web

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

1.5.3. Internet и World Wide Web Контракт Министерства обороны США на первую реализацию набора протоколов TCP/IP был направлен группе разработчиков Unix, поскольку исходные коды данной операционной системы были в значительной степени открытыми. Кроме TCP/IP, Unix стала одной из необходимых


Промзона: Небоскрёб World One Николай Маслухин

Из книги Цифровой журнал «Компьютерра» № 28 [02.08.2010 — 08.08.2010] автора Журнал «Компьютерра»

Промзона: Небоскрёб World One Николай Маслухин Опубликовано 06 августа 2010 года Небоскрёбы редко становятся жилыми домами. Как правило, их удел – служить офисными и гостиничными пристанищами, дабы являть всему миру мощь и богатство их владельцев.


1.5.3. Internet и World Wide Web

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

1.5.3. Internet и World Wide Web Контракт Министерства обороны США на первую реализацию набора протоколов TCP/IP был направлен группе разработчиков Unix, поскольку исходные коды данной операционной системы были в значительной степени открытыми. Кроме TCP/IP, Unix стала одной из необходимых


Что показывают на Mobile World Congress 2012 Андрей Письменный

Из книги Цифровой журнал «Компьютерра» № 110 [27.02.2012 — 04.03.2012] автора Журнал «Компьютерра»

Что показывают на Mobile World Congress 2012 Андрей Письменный Опубликовано 29 февраля 2012 года К выставке Mobile World Congress 2012, которая проходит в Барселоне, в HTC придержали три новые модели смартфонов на Android 4.0 Ice Cream Sandwich. Все они носят имя HTC One, различается лишь


Что показывали на Mobile World Congress 2012 Андрей Письменный

Из книги Цифровой журнал «Компьютерра» № 111 [05.03.2012 — 11.03.2012] автора Журнал «Компьютерра»

Что показывали на Mobile World Congress 2012 Андрей Письменный Опубликовано 06 марта 2012 года Местоположение и размеры стенда Sony на барселонской выставке Mobile World Congress были довольно необычными: он находился в крохотном предбаннике огромного павильона, занятого


Что показывали на Mobile World Congress 2012

Из книги Компьютерра PDA N162 (03.03.2012-09.03.2012) автора Журнал «Компьютерра»

Что показывали на Mobile World Congress 2012 Автор: Андрей ПисьменныйОпубликовано 06 марта 2012 года Знакомство с новыми телефонами Sony — Xperia S и Xperia P Местоположение и размеры стенда Sony на барселонской выставке Mobile World Congress были довольно необычными: он находился в крохотном предбаннике


1.2. Сборка простого приложения «Hello, World» из командной строки

Из книги C++. Сборник рецептов автора Диггинс Кристофер

1.2. Сборка простого приложения «Hello, World» из командной строки ПроблемаВы хотите собрать простую программу «Hello, World», подобную приведенной в примере 1.4.Пример 1.4. Простая программа «Hello, World»hello.cpp#include <iostream>int main() { std.:cout << "Hello, World! ";}РешениеВыполните следующие


1.7. Сборка простого приложения «Hello, World» с помощью Boost.Build

Из книги Антимозг [Цифровые технологии и мозг] автора Шпитцер Манфред

1.7. Сборка простого приложения «Hello, World» с помощью Boost.Build ПроблемаВы хотите собрать простую программу «Hello, World», подобную приведенной в примере 1.4, с помощью BoostBuild.РешениеВ директории, где вы хотите создать исполняемый файл и все создаваемые при этом промежуточные файлы,


1.15. Сборка простого приложения «Hello, World» с помощью GNU make

Из книги Написание скриптов для Blender 2.49 автора Anders Michel

1.15. Сборка простого приложения «Hello, World» с помощью GNU make ПроблемаВы хотите с помощью GNU make собрать простую программу «Hello, World», подобную приведенной в примере 1.4.РешениеПрежде чем вы напишете свой первый make-файл, вы должны познакомиться с терминологией, make-файл состоит из


Учиться с World of Warcraft[19] ?

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

Учиться с World of Warcraft[19]? То, что во время любой игры учатся, известно давно и однозначно доказано. Вопрос заключается не в том, влияют ли на детское развитие компьютерные игры, а в том, каково это влияние: положительное или отрицательное. Некоторые исследователи видят в