FreeBSD: Custom kernel — Создаем «свое» ядро

root@provoip # uname -i
GENERIC

 

1. Наличие исходников

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

Проверяем директорию /usr/src — если она пустая, то исходников нет (если, конечно, вы их не переместили куда-нибудь).

В /usr/src/sys находятся поддиректории с названиями поддерживаемых системой архитектур — amd64, i386,powerpc и др. Все, что находится в определенной поддиректории, относится только к определенной архитектуре. В каждой такой поддиректории находится поддиректория conf, которая содержит GENERIC конфигурацию ядра для этой архитектуры.

cd /usr/src/sys/amd64/conf/
root@provoip:/usr/src/sys/amd64/conf # ls
DEFAULTS GENERIC GENERIC.hints Makefile NOTES

 

2. Файл конфигурации ядра

 

— Если нужно урезать конфигурацию ядра:

Советуют не редактировать GENERIC, а сделать копию и производить изменения уже над копией. Существует соглашение использовать для названия заглавные буквы.

root@provoip:/usr/src/sys/amd64/conf # cp GENERIC PROVOIP

 

— Если нужно расширить конфигурацию ядра:

Можно также скопировать GENERIC в свой файл и дописать нужные опции, а можно поступить следующим образом:

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

/usr/src/sys/amd64/conf/PROVOIP

# add Generic kernel
include GENERIC

ident PROVOIP

# IPFW
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=5
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT
options IPFIREWALL_NAT
options LIBALIAS

 

3. Сборка и установка Custom kernel
root@provoip # cd /usr/src

Собираем с указанием конфигурационного файла ядра:

root@provoip:/usr/src # make buildkernel KERNKONF=PROVOIP

Устанавливаем тоже с указанием конфигурационного файла ядра:

root@provoip:/usr/src # make installkernel KERNKONF=PROVOIP 

-эта команда скопирует новое ядро в /boot/kernel/kernel, а старое сохранит в /boot/kernel.old/kernel.

Перезагружаемся и загружаемся с новым ядром.

root@provoip # uname -i
PROVOIP