Первый драйвер: загрузка и удаление драйвера в пространстве пользователя

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

Я сейчас покажу вам, как разработать ваш первый драйвер устройства Linux, который будет подключён в ядро в виде модуля.

 

Для этой цели я напишу следующую программу в файле с именем nothing.c.

 

<nothing.c> =

 

#include <linux/module.h>

 

MODULE_LICENSE("Dual BSD/GPL");

 

После выхода ядра версии 2.6.x, компиляция модулей стала немного сложнее. Во-первых, вам необходимо иметь полное, откомпилированное дерево исходных текстов ядра. Если вы имеете систему Debian Sarge, вы можете следовать шагам в Приложении Б (в конце этой статьи). В дальнейшем я буду считать, что используется ядро версии 2.6.8.

 

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

 

<Makefile1> =

 

obj-m := nothing.o

 

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

 

$ make -C /usr/src/kernel-source-2.6.8 M=pwd modules

 

Это очень простой модуль для пространства ядра и он станет его частью, как только будет туда загружен. В пользовательском пространстве вы можете загрузить модуль как суперпользователь (root), набрав в строке следующую команду:

 

# insmod nothing.ko

 

Команда insmod разрешает установку модуля в ядро. Однако, от данного модуля пользы не много.

 

Можно проверить, что модуль установлен правильно, просмотрев все установленные модули:

 

# lsmod

 

Наконец, модуль может быть удалён из ядра с помощью команды:

 

# rmmod nothing

 

Введя команду lsmod ещё раз вы можете убедиться, что модуля больше в ядре нет.

 

Итог всего этого показан в Таблице 3.

 

События

Пользовательские функции

Функции ядра

Загрузка модуля

insmod

 

Открытие устройства

 

 

Чтение устройства

 

 

Запись в устройство

 

 

Закрытие устройства

 

 

Удаление модуля

rmmod

 

 

Таблица 3. События драйвера устройства и связанные с ними интерфейсные функции в пространстве ядра и пользовательском пространстве.

 

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