This is an old revision of the document!
Table of Contents
Тут попробуем разобраться, как устроены модули ядра Linux.
Как загружать модули в ядро
Увидеть какие модули уже загружены в ядро можно выполнить команду lsmod, которая прочитает данные из /proc/modules Как же они загружаются в ядро? В самых общих чертах это выглядит так: когда ядру нужна функциональность, которой нет резидентно в ядре, демон kmod вызывает команду modprobe для загрузки модуля. modprobe получает как параметр строку указывающую на модуль (имя модуля или его псевдоним см. файл /etc/modprobe.conf??? у меня псевдонимы находятся в /etc/modprobe.d/aliases). Затем определяются зависимости модуля (модули, которые нужны для работы нашему модулю см. файл /lib/modules/<версия ядра>/modules.dep), затем собственно производится загрузка модулей с помощью insmod в нужном порядке (сначала те модули, которые указаны в зависимости, потом сам модуль)
Версия модуля
Модули скомпилированные для одной версии ядра, могут не подходить для другой версии ядра, поэтому не следует загружать модули для одной версии в другой. Данное руководство предназначено для версии ядра 2.6
Модули и Х
Модули не могут выводить на экран информацию (как например printf()), т. е. если мы захотим увидеь результаты нашей работы, то не следует искать их в xterm. Чтобы видеть результаты работы сразу (без поиска в логах), выполняется всю работу в консоли (в настоящей, а не xterm и т.д.)
Введение
Первая проблема - заголовки ядра, для работы нам нужны заголовки ядра, которые не всегда есть по умолчанию. Вторая проблема - заголовки не всегда ищутся там, где они на самом деле лежат, такая проблема решается опцией gcc -I
Discussion
Традиционно, для linux код возврата в случае ошибки (если не указано иного) – - <код ошибки>. Например -ENOMEM.
Существующие коды ошибок – include/linux/errno.h, include/asm/errno.h, include/asm-generic/errno-base.h