Чтение онлайн

на главную - закладки

Жанры

Разработка ядра Linux
Шрифт:

obj-$(CONFIG_FISHING_POLE) += fishing.o

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

Makefile
следующую запись.

obj-$(CONFIG_FISHING_POLE) += fishing.o

fishing-objs := fishing-main.o fishing-line.o

В последнем случае будут скомпилированы файлы

fishing-main.c
и
fishing-line.c
и скомпонованы в
файл модуля
fishing.ko
.

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

Makefile
необходимо добавить следующую строку.

EXTRA_CFLAGS += -DTITANIUM_POLE

Если вы желаете поместить ваши файлы в каталог

drivers/char/
, вместо того чтобы создавать новый подкаталог, то необходимо просто прописать указанные строки (те, что должны быть прописаны в файле
Makefile
подкаталога
drivers/char/fishing/
) в файле
drivers/char/Makefile
.

Для компиляции просто запустите процесс сборки ядра, как обычно. Если компиляция модуля зависит от конфигурационного параметра, как в данном случае она зависит от параметра

CONFIG_FISHING_POLE
, то необходимо включить этот конфигурационный параметр перед компиляцией.

Компиляция вне дерева исходных кодов ядра

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

Makefile
следующего вида в том каталоге, где находится модуль.

obj-m := fishing.o

Такая конфигурация позволяет скомпилировать файл

fishing.c
в файл
fishing.ko
. Если ваш исходный код занимает несколько файлов, то необходимо добавить две строки.

obj-m := fishing.o

fishing-objs := fishing-main.o fishing-line.o

Такая конфигурация позволяет скомпилировать файлы

fishing-main.c
и
fishing-line.c
и создать модуль
fishing.ko
.

Главное отличие от случая, когда модуль находится внутри дерева исходного кода, состоит в процессе сборки. Так как модуль находится за пределами дерева исходных кодов ядра, необходимо указать утилите

make
местонахождение исходных файлов ядра и файл
Makefile
ядра. Это также делается просто с помощью следующей команды!.

make -С /kernel/source/location SUBDTRS=$PWD modules

В этом примере

/kernel/source/location
— путь к сконфигурированному дереву исходных кодов ядра. Вспомните, что не нужно хранить копию дерева исходных кодов ядра, с которой вы работаете, в каталоге
/usr/src/linux
, эта копия должна быть где-то в другом месте, скажем где-нибудь в вашем домашнем каталоге.

Инсталляция модулей

Скомпилированные модули должны быть инсталлированы в каталог

/lib/modules/version/kernel
. Например, для ядра 2.6.10 скомпилированный модуль управления удочкой будет находиться в файле
/lib/modules/2.6.10/kernel/drivers/char/fishing.ko
, если исходный код находился непосредственно в каталоге drivers/char/.

Для инсталляции

скомпилированных модулей в правильные каталоги используется следующая команда.

make modules_install

Разумеется, эту команду необходимо выполнять от пользователя root.

Генерация зависимостей между модулями

Утилиты работы с модулями ОС Linux поддерживают зависимости между модулями. Это означает, что если модуль

chum
зависит от модуля
bait
, то при загрузке модуля
chum
модуль
bait
будет загружен автоматически. Информация о зависимостях между модулями должна быть сгенерирована администратором. В большинстве поставок ОС Linux эта информация генерируется автоматически и обновляется при загрузке системы. Для генерации информации о зависимостях между модулями необходимо от пользователя root выполнить следующую команду.

depmod

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

depmod -A

Информация о зависимостях между модулями хранится в файле

/lib/modules/version/modules.dep
.

Загрузка модулей

Наиболее простой способ загрузки модуля — это воспользоваться утилитой

insmod
. Эта утилита выполняет самые общие действия. Она просто загружает тот модуль, который ей указан в качестве параметра. Утилита
insmod
не отслеживает зависимости и не выполняет никакой интеллектуальной обработки ошибок. Использовать ее очень просто. От пользователя root необходимо просто выполнить команду

insmod module

где

module
 — это имя модуля, который необходимо загрузить. Для загрузки модуля управления удочкой необходимо выполнить команду.

insmod fishing

Удалить модуль можно аналогичным образом с помощью утилиты

rmmod
. Для этого от пользователя root нужно просто выполнить команду.

rmmod module

Например, удалить модуль управления удочкой можно следующим образом.

rmmod fishing

Тем не менее, эти утилиты тривиальные и не обладают интеллектуальным поведением. Утилита

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

Для загрузки модуля в ядро с помощью утилиты

modprobe
необходимо от пользователя root выполнить команду

modprobe module [ module parameters ]

где параметр

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

Утилита

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

Команда

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

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

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Светлая тьма. Советник

Шмаков Алексей Семенович
6. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Светлая тьма. Советник

Двойник Короля

Скабер Артемий
1. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля

Его нежеланная истинная

Кушкина Милена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Его нежеланная истинная

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Измена. Наследник для дракона

Солт Елена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Измена. Наследник для дракона

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Адвокат империи

Карелин Сергей Витальевич
1. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.75
рейтинг книги
Адвокат империи

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Вечный. Книга II

Рокотов Алексей
2. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга II

Законы Рода. Том 3

Flow Ascold
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник