Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.


-


Перегенерация ядра.

Автор : Иван Паскаль

1. Зачем нужно перегенерировать ядро (kernel)?

При инсталяции FreeBSD у вас появится в системе ядро, которое вполне работоспособно. Зачем его переделывать?

Дело в том, что это ядро (так называемая GENERIC конфигурация) как раз предназначена для того, чтобы система успешно развернулась на "железе" любой конфигурации (из поддерживаемых, конечно).

В эту конфигурацию встроена поддержка ВСЕХ типов накопителей (HDD и CD) и ВСЕХ сетевых карт, которые на данный момент поддерживаются FreeBSD. Это вполне логично - вы должны иметь возможность поставить свой Unix и дополнительные программы на тот HDD, который имеется у вас в машине и суметь войти в сеть, какой бы сетевой карточкой вы ни пользовались.

В то же время, в ядро не включены некоторые полезные модули, которые могут вам понадобится в дальнейшем, особенно, если вы хотите использовать вашу машину в качестве сервера. (Например - поддержка firewall, PPP-сервера, bpf и т.п.).

Итак. Перегенерировать ядро стоит для того чтобы -
- убрать все лишнее (драйверы устройств, которых у вас нет);
- добавить то, чего не хватает.

Первое позволит вам ускорить загрузку (так как система не будет тратить время на поиск и тестирование несуществующих в вашей машине устройств) и сэкономить место в ОЗУ, занимаемое ядром.

Ну, а без второго, скорее всего, вы не сможете решить свои задачи :).

2. Как перегенерировать ядро системы?

В общем виде этот процесс выглядит так:
- развернуть исходники ядра (я обычно заказываю их в процессе инсталяции, но если вы этого не сделали, то можно добавить их "вручную");
- составить свою конфигурацию (конфигурационный файл);
- запустить программу config, которая создаст необходимые файлы *.h и *.c в соответствии с вашей конфигурацией;
- скомпилировать новое ядро с помощью программы make;
- установить новое ядро на место;
- перезагрузиться. Теперь более подробно.

2.1 Разворачивание исходников.

Прежде всего посмотрите в директорию

/usr/src/sys

если она не пустая, то все что вам нужно уже на месте. И вы можете спокойно перейти к следующему пункту.

В противном случае, вам надо взять из дистрибутива нужные файлы и установить их. Как это сделать описано в "Добавление компонент из дистрибутива".
Не забудьте, что вам в данном случае необходима только та их часть, которая называется sys.

2.2 Составление конфигурационного файла.

Перейдите в директорию /usr/src/sys/i386/conf.

Здесь имеются два конфигурационных файла GENERIC и LINT. Первый представляет собой конфигурацию того ядра, которое установилось у вас при инсталяции системы. Вы можете посмотреть там - что в данный момент может ваше ядро.

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

Вам необходимо составить свой файл. Его название значения не имеет. Можете назвать его MyConfig или MyComputer. Я обычно даю ему то же название, что и доменное имя машины.

В качестве основы для нового файла вы можете использовать один из уже имеющихся файлов - GENERIC или LINT.

Если вы возьмете за основу GENERIC, то вам придется убрать оттуда описания всех лишних устройств и дописать необходимые вам options.

Если же вы возьмете за основу LINT, то все редактирование будет заключаться в удалении всего ненужного. Однако, это может оказаться весьма утомительным занятием.

Итак. Скопируйте один из имеющихся конфигов

cp GENERIC MyConfig
или
cp LINT MyConfig

И подправьте его любым текстовым редактором.

Hint: Если вы не успели еще поставить никакого текстового редактора "с человеческим лицом", можно использовать редактор ee, который у вас наверняка уже стоит. Он довольно простой, но вполне полноценный экранный редактор.

Как я уже сказал, основным "мануалом" по составлению новой конфигурации служит файл LINT. Причем, там должны быть описаны самые "свежие" options, которые появились в той версии, которую вы ставите, и еще не описаны в других "мануалах". (К сожалению, "должны быть" и "есть" - не одно и то же.)

На всякий случай я попытался написать свои "Комментарии к config файлу".

2.3 Подготовка к генерированию

После того, как вы закончили редактировать свою конфигурацию (пусть она называется MyConfig, например), наберите команду

config MyConfig

Она создаст в директории /usr/src/sys директорию compile/MyConfig (о чем и сообщит вам в конце своей работы) и поместит туда файлы, необходимые для компиляции ядра.

2.4 Трансляция (собственно само генерирование) ядра

Перейдите в директорию /usr/src/sys/compile/MyConfig и наберите команды

make depend
make all

они сделают все, что нужно.

(Вообще-то, в большинстве случаев, достаточно одной короткой команды

make

но так, как написано выше - более правильно).

Учтите, что kernel - достаточно сложная программа, поэтому ее компиляция потребует довольно много времени. От 15-20 минут на Pentium'е до часа, на 386 процессоре.

Если в процессе компиляции обнаружатся фатальные ошибки, придется пересмотреть свой конфиг, исправить его и повторить пункты 2.3 - 2.4.

(У меня такие случаи были, когда я попросил некоторые опции, возможные только для Pentium, забыв указать в начале файла, что хочу поддержку процессора i586)

2.5-2.6 Установка нового ядра и Перезагрузка

После того, как компиляция ядра успешно завершилась наберите комманду

make install

она переименует старое ядро в kernel.old и поместит в корневую директорию ваш новый kernel.

После этого можно (и нужно) перегрузить компьютер.

Если загрузка нового ядра не получилась (такое тоже возможно), вы можете загрузится со старым ядром. Для этого, в начале загрузки на подсказку Boot: надо быстро сказать kernel.old.

Естественно, после этого надо снова вернуться к редактированию вашей конфигурации и повторить все последующие пункты.

Только не торопитесь. Если новое ядро опять окажется неработоспособным, вы можете попасть в неприятную ситуацию, так как после очередного "make install" -

kernel.old - предыдущая неработающая версия kernel
kernel - новая, столь же бесполезная.

Конечно, если вы не пожалели места на диске, у вас должен был остаться в корневой директории файл kernel.GENERIC и вы можете всегда загрузить его. Однако, в остальных случаях он не нужен, поэтому я, например, его обычно удаляю.

А чтобы при этом не попасть в вышеописаную ситуацию, можно переименовать пока еще работающий kernel.old в kernel.work или kernel.original и продолжать свои эксперименты. Во всяком случае, у вас всегда останется по крайней мере один "загружабельный" вариант ядра.

Важное замечание по поводу драйверов устройств.

Если вы добавили в конфигурации ядра устройства (реальные или pseudo-device), возможно потребуется создать для них файлы-устройства в директории /dev.

Какие-то общие рекомендации по этому поводу дать трудно, поскольку это зависит от того - какие устройства вы добавляли в конфиг-файл, а их много разных.

Во всяком случае, если вы знаете какого файла (в /dev) не хватает, его можно создать с помощью программки MAKEDEV, которая лежит в той же /dev. Это даже не программа, а командный файл, в начале которого есть коментарии, в которых более-менее подробно описаны возможные аргументы (имена устройств) для MAKEDEV.

И еще, поскольку, /dev наверняка не прописана в вашем PATH, запускать ее нужно /dev/MAKEDEV ... , или, если вы находитесь в самой директории /dev, то ./MAKEDEV ...

Это мои комментарии к файлу LINT из исходников FreeBSD 2.2.1. Я выкинул из него наиболее экзотические опции. Которые, обычно, сопровождаются комментариями типа - "не работает и оставлено только для тех, кому будет интересно там покопаться и пофиксить баги" или просто "пока не работает". Я, также, выкинул те строчки, смысл которых не знаю и, следовательно, ничего умного сказать о них не могу. Если вам интересно - читайте оригинальный LINT или ищите разъяснения на www.freebsd.org

machine "i386"

Говорит о том, что архитектура процессора из семейства Intel 386.
Обязательный параметр.

cpu "I386_CPU"
cpu "I486_CPU"
cpu "I586_CPU" # aka Pentium(tm)
cpu "I686_CPU" # aka Pentium Pro(tm)

"Подстройка" под конкретный тип процессора. Можно оставить только тот тип, который у вас реально стоит. Однако, если вы в дальнейшем захотите поменять процессор, или просто перетащить винчестер в машину с другим CPU, то могут возникнуть проблемы. Во всяком случае - ничего страшного не произойдет, если вы оставите здесь несколько разных строчек.
Обязательно должна быть хотя бы одна из этих строчек.

ident LINT

Это собственно имя конкретной конфигурации ядра. Можно поставить такое же, как название конфигурационного файла (MyConfig - например).
Но строчка должна быть обязательно.

maxusers 10

Вообще-то по смыслу - это максимальное количество юзеров, одновременно работающих на машине. Однако, исходя из этого количества вычисляется размер некоторых таблиц в ядре (количество одновременно работающих процессов, количество открытых файлов, количество буферов памяти и т.п.). Подробнее можно посмотреть в файле /usr/src/sys/conf/param.c Поэтому, даже если на вашей машине и не планируется много юзеров, но вы собираетесь запускать одновременно много приложений (сервер ftp, http, mail'овый, базы данных и т.п.), лучше сделать это число побольше.
Естественно, этот параметр - обязательный.

options "CHILD_MAX=128"

Максимальное число "порожденных" процессов, которых может создать "родительский" процесс.
По умолчанию - 40. Некоторые программы могут захотеть больше. (В оригинальном LINT в качестве примера приводится news-сервер, который открывает "процесс-потомок" для каждого клиента, который "прийдет" почитать ньюсы. Если таких пользователей прийдет достаточно много одновременно, то "процессов-потомков" может не хватить).
Короче, если обнаружите, что какая-либо задача сообщает, что не может "породить" дополнительный процесс - скорее всего надо менять этот параметр.

options "OPEN_MAX=128"

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

options MATH_EMULATE #Support for x87 emulation
options GPL_MATH_EMULATE #new math emulator

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

options FAILSAFE

Включает в ядро дополнительные проверки в критических местах. Естественно, уменьшается скорость некоторых операций, но повышается надежность.
Реально эта опция используется сейчас только в одном месте (по-моему) - в драйвере PCI-SCSI-контроллера. Но, возможно, в дальнейшем она может встретиться в других частях ядра.
Короче, скорее всего, не нужна.

options INCLUDE_CONFIG_FILE # Include this file in kernel

Включить этот конфиг-файл внутрь ядра. Если вы потеряеете конфиг, то сможете достать его из самого файла kernel :-).
Скорее всего, это лишнее.

config kernel root on wd0 dumps on wd0

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

  • файл ядра называется kernel
  • при загрузке искать корневую директорию на wd0
  • при "падении" системы, писать дамп на wd0

Последнюю часть (dumps on ...) рекомендуют здесь не задавать, а пользоваться командой dumpon (см man dumpon).

Кроме того, заметьте, что wd0 - драйвер IDE-винчестеров. Если у вас SCSI-винчестер, то это слово нужно поменять на sd0. Ну и, возможно, номер винчестера у вас будет не 0.
Но строчка должна быть обязательно.

options "MAXMEM=(128*1024)"

Размер оперативной памяти машины.
Вообще-то, этот параметр читается при загрузке из BIOS, однако стандартная функция, считывающая из BIOS этот параметр ограничивает возможное значение числом 64M (а "расширенный" вариант этой функции разработчики не используют для экономии места в коде загрузчика).
Поэтому, если у вас размер ОЗУ больше 64M, то его надо указать явно в конфиге.

options USERCONFIG #boot -c editor

Включить в ядро "-editor" - редактор конфигурации "железа". Этот редактор можно вызвать при загрузке, введя на приглашение "Boot:" ключ . Редактор позволяет поменять для устройств базовый адрес, номер прерывания (irq) и флаги (если они есть). Кроме того, можно вообще исключить устройство из списка поддерживаемых ядром (естественно, код соответствующего драйвера в ядре останется, но устройство не будет проверяться при старте и, соответственно, не будет доступно при работе). Если вы не собираетесь менять "железную" конфигурацию машины, то этот редактор вам не очень-то нужен. Если вы правильно зададите все параметры в разделе HARDWARE, то все будет работать. Включать его в ядро имеет смысл, если вы собираетесь в ближайшем будущем добавлять новые "карточки" в машину. Только не забудьте включить все соответствующие драйвера в ядро (в разделе HARDWARE), так как этот редактор сам поддержку в код ядра, естественно, не добавляет.

options USERCONFIG_BOOT #imply -c and parse info area

Если в ядро включен "-c editor" (предыдущая опция), то эта строчка заставляет его запускаться всегда при загрузке, не не дожидаясь от вас соответствующего ключа. (Если вы сами инсталлировали систему, то, наверняка, уже видели - как это выглядит :-).
В нормальной работе - совершенно лишнее.

options VISUAL_USERCONFIG #visual boot -c editor

Если включен "-c editor", эта строчка добавляет его "visual" версию, которая намного приятнее и удобнее, чем старый вариант "командной строки".
Если уж вы решили включить в ядро "-с редактор", то с этой опцией конечно будет лучше.

options INET #Internet communications protocols

Включает в ядро поддержку TCP/IP.
Скорее всего, вам это необходимо.

options IPX #IPX/SPX communications protocols

Поддержка IPX.
Насколько вам это нужно решайте сами. В настоящее время в FreeBSD есть только маршрутизатор IPX. Ни серверной, ни клиентской программы для сетей Novell NetWare (где в основном и используется IPX) в FreeBSD нет.
(Вообще-то, "софт" для сетей Novell NetWare под FreeBSD существует в виде коммерческого продукта - http://www.netcon.com/. Но он "родной" поддержкой IPX не пользуется и, соответственно, эта опция к нему отношения не имеет.)
Не забудьте, что FreeBSD понимает (на ethernet) только фреймы Ethernet_II.

options "IPXPRINTFS=0" #IPX/SPX Console Debugging Information

При включенной поддержке IPX определяет - выводить ли сообщения (через syslogd) о каждом "отфорварденом" IPX пакете (1 - выводить, 0 - нет).
По умолчанию этот параметр - 1. Так что, для подавления лишней диагностики желательно эту опцию включить.

options "IPX_ERRPRINTFS=0" #IPX/SPX Console Debugging Information

При включенной поддержке IPX определяет - выводить ли сообщения об ошибках при работе с IPX пакетами (1 - выводить, 0 - нет).
По умолчанию этот параметр - 0. Так что, в таком виде эта опция особого смысла не имеет, а вот для того, чтобы включить эту диагностику, вставте эту опцию, заменив 0 на 1.

options NETATALK #Appletalk communications protocols

Ничего, кроме того, что в комментарии, сказать не могу.

Network interfaces:

pseudo-device loop #Network loopback device

"Драйвер" loopback интерфейса. Используется во многих ситуациях.
Поэтому, это устройство должно быть обязательно.

pseudo-device ether #Generic Ethernet

Общие подпрограммы для всех ethernet'овских драйверов (независимо, какая карточка у вас стоит).
Количество "псевдо-девайсов" значения не имеет (даже если у вас несколько ethernet'ов).
Поэтому, если у вас используется хоть какой-нибудь ethernet-адаптер, эта строчка должна быть обязательно.

pseudo-device fddi #Generic FDDI

Общие подпрограммы для всех fddi драйверов.
Если у вас какая-либо fddi карта, эта строчка обязательна.

pseudo-device sl 2 #Serial Line IP

Драйвер SLIP (протокол для передачи IP через COM-порт и, соответственно, через модем).
Естественно, у вас должны быть включены драйверы для COM-портов (в разделе hardware). Эта строчка только определяет - сможете ли вы на них использовать SLIP.
Количество "псевдо-девайсов" в данном случае важно, именно столько SLIP-коннектов вы сможете поддерживать одновременно (лучше всего их иметь столько, сколько у вас COM-портов).
Подробнее - man sl.

pseudo-device ppp 2 #Point-to-point protocol

Драйвер PPP (как и SLIP это протокол для передачи IP через COM-порт).
Комментарии те же, что и для "pseudo-device sl" (заменяя SLIP на PPP :-).
Подробнее - man 4 ppp.

pseudo-device sppp #Generic Synchronous PPP

Драйвер PPP для синхронных последовательных каналов.
Нужен в том случае если у вас есть специальная карточка (ar,cx,sr).

pseudo-device bpfilter 4 #Berkeley packet filter

Это драйвер для программ, которые "подсматривают" траффик через какой-нибудь сетевой интерфейс (tcpdump и т.п.). Кстати, этот драйвер может потребоваться и другим программам (например, DHCP-серверу).
Подробнее - man bpf.
Полезно их иметь (и побольше :-).

Важное замечание!
Поскольку через этот "девайс" соответствующие программы могут просматривать содержимое пакетов, "пробегающих" по сети, юзер, запустивщий программу, может подсмотреть чужие пароли, содержимое "пролетающих" писем, файлов и т.п. Поэтому, bpfilter может оказаться не только полезной "фичей", но и опасной. К счастью, по умолчанию, соответствующие устройства /dev/bpf* доступны для чтения только root'у.
Так вот. Не надо менять права доступа к этим устройствам. Будет лучше, если "рядовые юзеры" не смогут ими воспользоваться.

pseudo-device disc #Discard device

Это устройство аналогично устройству null для файлов. То есть в него можно посылать пакеты "в никуда". Включено в систему для тестов.
В реальной работе вещь практически бесполезная. Можно выкинуть.

pseudo-device tun 1 #Tunnel driver(user process ppp)

Это устройство используется только программой ppp (смотри man 8 ppp).
Если вы этой программой не пользуетесь (не путайте ее с pppd), то и устройство вам не нужно.

Internet family options:

options "TCP_COMPAT_42" #emulate 4.2BSD TCP bugs

Нужна только для совместимости с очень старой реализацией TCP протокола (на других машинах).
Скорее всего, вам она не нужна.

options MROUTING # Multicast routing

Вставляет в ядро поддержку маршрутизации пакетов с multicast адресами.
Обратите внимание, эта опция нужна только если вы собираетесь маршрутизировать (пропускать через свою машину из одной подсетки в другую) такие пакеты с помощью mrouted (смотри man mrouted). Для того, чтобы ваша машина могла принимать и посылать multicast-пакеты, эта опция НЕ нужна.
Короче, вам она врядли понадобится.

options IPFIREWALL #firewall

Поддержка FireWall. В данном случае это означает включение в ядро фильтра для IP пакетов, который может выборочно запрещать/разрешать прохождение через сетевые интерфейсы определенных пакетов (в зависимости от адреса "кому" или "от кого", номера TCP-порта и т.п.). Кроме того, этот модуль может считать количество пакетов (прошедших или, наоборот, задержанных).
Сами правила (кого куда пускать/не пускать) задаются с помощью программы ipfw (можете почитать man ipfw).
Важное замечание: в последних версиях FreeBSD, если FireWall включен в ядро, по умолчанию все пакеты запрещаются. Поэтому, не забудьте сразу же настроить этот firewall в файле /etc/rc.firewall и указать, что он у вас есть, в файле /etc/sysconf (или /etc/rc.conf).

options IPFIREWALL_VERBOSE #print information about dropped packets

Добавляет в модуль FireWall вывод сообщений (через syslogd) о каждом "загубленном" пакете.
Скорее всего, это лишнее.

options "IPFIREWALL_VERBOSE_LIMIT=100" #limit verbosity

Если вы включили опцию IPFIREWALL_VERBOSE, то эта строчка ограничивает количество сообщений. Будут выводится только первые 100 (в данном примере). После этого сообщения прекратятся.
Наверное, с этой опцией будет лучше.

options IPDIVERT #divert sockets

Эта опция добавляет к FireWall еще возможность некоторые IP-пакеты "заворачивать" на дополнительную обработку в прикладные программы (основные проверки делаются в ядре). С помощью этого механизма вы можете писать свои программы, которые смогут выполнить более сложную фильтрацию пакетов или даже их преобразование (NAT, тунель IP в IP, и т.п.). Кстати, NAT-демон, использующий этот механизм уже существует.
Подпробнее man divert.
Вещь полезная, если, конечно, вы знаете, что с ней делать :-).

options TCPDEBUG

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

"Реальные" FS

Это обычные файловые системы, предназначенные для хранения файлов.

options FFS #Fast filesystem

Основная FS для FreeBSD. Должна быть обязательно.

options "CD9660" #ISO 9660 filesystem

Наиболее распространенная FS для CD-ROM. Существует в виде lkm, поэтому, в ядро можно не включать.

options MSDOSFS #MS DOS File System

FS для MS DOS. Существует в виде lkm, поэтому, в ядро можно не включать.

options MFS #Memory File System

FS для построения "виртуального диска" в ОЗУ машины. Модуля lkm нет, поэтому, если хотите ее использовать, то необходимо включить в ядро.
(Я слабо представляю себе - когда ее использование оправдано. Не забывайте, что под этот "виртуальный диск" отдается часть оперативной памяти, которой, обычно, не бывает в избытке).

options "MFS_ROOT=10"

Размер (в килобайтах) памяти, зарезервированой внутри ядра для MFS

options MFS_AUTOLOAD

Эта опция позволяет ядру автоматически загружать разметку для "виртуального диска" с флопика, при необходимости. (Поскольку, при перезагрузке машины разметка диска в памяти не сохраняется, ее приходится каждый раз копировать с какого-нибудь реального диска).

options LFS #Log filesystem

Еще одна (продвинутая) FS для UNIX. Пока в стадии экспериментальной. Модуля lkm нет, поэтому, если хотите ее использовать, то необходимо включить в ядро.

options NFS #Network File System

Сетевая FS. В UNIX это основной механизм, позволяющий работать с дисками других машин через сеть.
Существует в виде lkm, поэтому, в ядро можно не включать (если, конечно, система грузится не по сети).

options NQNFS #Enable NQNFS lease checking

Некоторое расширение функций NFS.

options NFS_NOSERVER #Disable the NFS-server code.

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

Кстати, интересно - с какими опциями скомпилирован lkm для NFS?

options "EXT2FS"

Еще одна FS для UNIX. В оригинальном LINT эта опция стоит в разделе "еще некоторые недокументированные опции". Поэтому, я не знаю - насколько она работоспособна. Модуля lkm нет, поэтому, если хотите ее использовать, то необходимо включить в ядро.

"Специальные" FS.

Эти "псевдо-" файловые системы предназначены для того, чтобы обращаться (считывать/изменять) к различным объектам операционной системы и их некоторым параметрам как к файлам, то есть обычными операциями чтения/записи файлов.

Какие из них вам нужны - это определяется теми прикладными программами, которые захотят их использовать.

Во всяком случае, все они существуют в виде lkm (кроме DEVFS) и, следовательно, включать их в ядро нет необходимости.

options PROCFS #Process filesystem

Отображает параметры текущих процессов в виде файлов.
Подробности - man procfs.

options KERNFS #Kernel filesystem

Отображает некоторые параметры системы в виде файлов.
Подробности - man kernfs.

options FDESC #File descriptor filesystem

Отображает дескрипторы открытых в данный момент файлов в виде файлов.
Подробности - man fdesc.

options PORTAL #Portal filesystem

Отображает параметры некоторых объектов (например, сокетов) в виде файлов.
Подробности - man mount_portal.
Находится в стадии экспериментальной (то есть - не работает :-).

options DEVFS #devices filesystem

Эмулирует "device special files" (которые обычно лежат в /dev) для всех устройств, поддержка которых включена в ядро.
Подробности - man devfs. :-)
Находится в стадии экспериментальной (но, говорят, что работает).
Модуля lkm нет, поэтому, если хотите ее использовать, то необходимо включить в ядро.

"Вспомогательные" FS.

Это модули, которые используются "поверх" (или "между") реальных FS для некоторых дополнительных действий.

Все эти модули существуют в виде lkm и, следовательно, включать их в ядро нет необходимости.

options UNION #Union filesystem

Позволяет монтировать в одну директорию несколько "реальных" FS.
Например, можно смонтировать в одну директорию CD-ROM и директорию с винчестера. В результате, в этой директории будут файлы с CD-ROM, но, при этом, в нее можно дописывать свои файлы (которые, естественноб будут записаваться в соответствующую директорию на винчестере).
Подробности - man mount_union.
Находится в стадии экспериментальной.

options UMAPFS #UID map filesystem

Позволяет иметь кроме "реальной" FS ее копию, но с измененными UID и GID на файлах. (Естественно, при монтировании указывается таблица соответствий реальных/подмененных UID'ов и GID'ов).
Подробности - man mount_umap.

options NULLFS #NULL filesystem

Ничего не делает с "реальной" FS. :-) С ее помощью можно просто сделать копию уже смонтированной FS.
Подробности - man mount_null.

Некоторые опции, имеющие отношение к файловым системам.

options "NSWAPDEV=20"

Для swap можно использовать одновременно несколько устройств/разделов диска (см. man swapon). Этот параметр задает их максимальное количество.
Если этот параметр не задавать, то, по умолчанию, их будет 4.
А этого, как правило, вполне достаточно.

options QUOTA #enable disk quotas

Если вы хотите задавать "дисковую квоту", то есть ограничение на размер дискового пространства для отдельных юзеров, то эта опция должна быть обязательно.
Подробности о quota - man quota (и те man'ы, на которые он ссылается).

options NULLFS_DIAGNOSTIC
options KERNFS_DIAGNOSTIC
options UMAPFS_DIAGNOSTIC
options UNION_DIAGNOSTIC

Включение в соответствующих FS дополнительной диагностики.

pseudo-device pty 16 #Pseudo ttys - can go as high as 256

Драйвер, который изображает "драйвер терминала" (такого, как tty), в тех случаях, когда юзер работает не с реального "железного" терминала, а, например, через сеть (через telnet, rlogin и т.п.)
Подробнее - man 4 pty.
Естественно, их желательно иметь несколько (16 - вполне нормально).
Нельзя сказать, что должен быть обязательно, но "очень полезно".

pseudo-device speaker #Play IBM BASIC-style noises out your speaker

Играет музыку на спикер компьютера. Заметьте, это не для воспроизведения звуковых файлов (типа wav или au), а для проигрывания простеньких мелодий, задаваемых как в функции play в BASIC'е. Примеры можно посмотреть в /usr/sbin/spkrtest.
Подробнее - man speaker, man spkrtest.
Естественно, вещь забавная, но не обязательная.

pseudo-device log #Kernel syslog interface (/dev/klog)

Через это "устройство" поступают сообщения от ядра к программе syslogd (которая ведет все основные логи в системе).
Несколько слов об этом можно найти в man syslogd. Поскольку, вы, скорее всего, не собираетесь отказываться от syslogd, это устройство должно быть обязательно.

pseudo-device gzip #Exec gzipped a.out's

Это "устройство" позволяет хранить некоторые бинарники в "зазипованном" виде (сжатыми gzip'ом), но запускать их как обычные программы. В общем-то, это даже не драйвер. При указании этого параметра, в ядро включается соответствующий модуль, который распознает такие файлы и распаковывает их "на лету" при запуске.
(Кстати, существует другой способ хранить исполняемые файлы в сжатом виде (смотри man gzexe), однако он хуже, так как для распаковки вызывается обычный "распаковщик" gunzip и создается временный файл, который и запускается.)
Устройство полезное, но необязательное.

pseudo-device vn #Vnode driver (turns a file into a device)

Этот драйвер может "превращать" файл в "устройство".
Может быть полезным если, например, какой-то файл представляет собой "образ дискеты", а вам захочется его посмотреть как обычную дискету. Другое полезное применение - увеличить swap. Поскольку, в FreeBSD swap можно делать только на "сырое" устройство (диск или раздел диска), можно создать файл подходящего размера, "превратить" его в "диск" с помощью драйвера vn, и добавить к swap-устройствам.
Подробнее - man vn, man vnconfig.
Таких драйверов лучше иметь несколько (смотря сколько вам захочется их задействовать одновременно).
Не обязательное, но полезное.

pseudo-device snp 3 #Snoop device - to look at pty/vty/etc..

Позволяет "подглядывать" - что делает другой юзер на своем терминале и даже вмешиваться в его работу (естественно, делать это может только root). Программа, которая это делает называется watch, но для ее работы необходимо наличие этих драйверов snp. Количество snp-устройств определяет - сколько чужих терминалов можно смотреть одновременно.
Подробнее - man snp, man watch.
Естественно, это устройство не обязательно.

pseudo-device ccd 4 #Concatenated disk driver

Позволяет объединять несколько дисков (разделов дисков) в один логический.
С его помощью можно создавать "зеркальные" диски.
Соответственно, количество определяет - сколько можно создать таких "логических дисков" одновременно.
Подробнее - man ccd, man ccdconfig.
Естественно, это устройство не обязательно.