Категорії
FreeBSD

Модули ядра: что это такое и как с ними работать?

Обновил статью 20.07.2009

Когда пользователь становится более, менее продвинутым, он доходит до такой стадии, когда хочет знать: что в его системе имеется, и самое главное зачем он надо и можно ли без него обойтись?

FreeBSD, как и почти любая *nix-подобная ОС, является модульно-ядерной. То есть, ядро, и есть модули, которые в зависимости от надобности загружают или выгружают. Разберёмся подробнее в этом.

1) Встроить в ядро или подгружать?

Модули можно компиллировать в ядро. Это увеличивает скорость их работы. Но это лучше делать только тогда, когда извесно, что он будет использоваться всегда. А если известно, что через некоторое время нужно будет избавится от этого модуля – то лучше его подгружать как модуль.

2) Модули.

Модули делятся на системные и пользовательские.

Системные – это те, которые идут в базовой комплектации к вашему дистрибутиву. Они по дефолту распологаются в /boot/kernel.

Пользовательске – это те, которые добавляются в ОС в процесе использования, нпример, при установке новых драйверов. Их обычно складывают в /boot/modules. Конечно, их можно складывать и в /boot/kernel, но при пересборке ядра, они не будут по дефолту учтены в новом, и перенесутся в/boot/kernel.old, в итоге, ваша ОС после этого не найдёт их (ибо она ищет в /boot/kernel,/boot/modules).

3) Управление модулями.

Для управления модулями при загрузке ОС используют файлы /boot/default/loader.conf (для системных) и /boot/loader.conf (для пользовательских)

Если ОС уже загружена, то подгрузить модуль можно командной

#kldload module

, соотвественно выгрузить модуль

#kldunload module

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

#kldstat

4) Конфигурационные файлы для загрузки модулей.

Конфигурационный файл (loader.conf) состоит из множества секций, в том числе опции загрузки ОС, раздел с модулями, и многое другое.

Описание модуля в этом файле состоит из имени модуля, далее следует слово load и в конце параметр “YES” или “NO” – соотвественно загружать данный модуль при загрузке или нет.

module_load="YES"

5) Перекомпиляция отдельного модуля (отдельной библиотеки).

Иногда бывает потребность пересобрать отдельный модуль (вышел патч, который устраняет баг). Можно конечно пересобрать ядро (пересоберётся ядро, и все модули). А можно пересобрать только отдельный модуль. Делается это так:

#cd /usr/src/sys/modules/<имя_модуля>
#patch ...
#make obj && make depend && make && make install

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff