Модули ядра


Американские сигареты. И в розницу где купить дешево американские import-sigaret.ru.

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

Само ядро по умолчанию хранится в виде файла /boot/kernel/kernel, модули ядра также хранятся в виде файлов в каталоге /boot/kernel. Заглянув в этот каталог, можно увидеть сотни файлов модулей ядра. Имена файлов всех модулей ядра имеют расширение .ko. Обычно файлы модулей ядра получают имена, соответствующие их функциональности. Например, в файле /boot/kernel/joy.ko находится драйвер джойстика (от английского «joy»), описание которого находится в странице руководства joy(4). Этот драйвер делает джойстик видимым для системы в виде устройства joy0.

Просмотр списка загруженных модулей

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

# kldstat

На этом ноутбуке загружено три модуля ядра. Первый — это ядро (1), далее идут драйвер звуковой карты (2) и звуковая подсистема (3). (Это совершенно неудивительно, так как речь идет о ноутбуке.) Каждый модуль содержит один или более подмодулей, которые можно увидеть с помощью команды kldstat -v, но само ядро содержит несколько сотен подмодулей, поэтому будьте готовы получить очень длинный список.

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

Загрузка и выгрузка модулей ядра производится с помощью команд kldload(8) и kldunload(8). Например, обычно мой ноутбук подключается к сети посредством проводного соединения Ethernet. При беспроводном подключении мне необходимо загрузить модуль ядра wlan_wep.ko, который использует WEP-шифрование. Для этого я пользуюсь командой kldload, которой передаю имя файла модуля ядра с требуемой функциональностью:

# kldload /boot/kernel/wlan_wep.ko

Как только беспроводное подключение станет ненужным, я выгружаю модуль.* Для этого требуется указывать не имя файла, а имя модуля, в том виде, как его отображает команда kldstat:

# kldunload wlan_wep.ko

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

Команды kldload(8) и kldunload(8) не требуют указания полного пути к модулю ядра, точно так же они не требуют указания расширения файла .ko. Если вы помните точное имя файла модуля ядра, можно использовать примерно такие команды:

# kldload wlan_wep
# kldunload wlan_wep

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

Автоматическая загрузка модулей ядра

Для автоматической загрузки модуля надо добавить его в файл /boot/loader.conf. Файл по умолчанию loader.conf содержит множество примеров загрузки модулей ядра, в которых используется один и тот же синтаксис. Нужно взять имя модуля ядра, убрать расширение файла .ko и добавить к нему строку _load="YES". Например, чтобы автоматически загрузить модуль /boot/kernel/procfs.ko, в файл loader.conf нужно добавить такую строку:

procfs_load="YES"

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

Впрочем, подождите минутку — зачем FreeBSD вынуждать загружать драйверы устройств, если она сама определяет их во время загрузки? Отличный вопрос! Дело в том, что вы можете собрать свое собственное ядро и удалить поддержку неиспользуемого устройства. Вы до сих пор не знаете, как собрать свое собственное ядро? Сейчас мы исправим этот недостаток.

Комментарии запрещены.