Обновил статью 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
После этого можно продолжать работать с модулем, например подгрузить. Естественно, перед сборкой, лучше всего выгрузить модуль, пересобрать, потом заново загрузить, что бы избежать конфликтов.