Для сборки ядра необходимо наличие всех исходных файлов FreeBSD.
Во-первых, давайте сделаем краткий обзор каталога, в котором будет
происходить сборка ядра. Все каталоги, которые будут упоминаться, будут
относительными по отношению к основному каталогу
/usr/src/sys
, который также доступен как каталог
/sys
. Этот каталог содержит множество подкаталогов,
представляющих собой различные части ядра, но наиболее важным для нас
будет каталог
,
в котором вы будете редактировать конфигурационный файл ядра и в котором
находится каталог arch
/confcompile
, где будет
собираться ваше ядро. arch
может быть
i386
,
amd64
, ia64
,
powerpc
, sparc64
или
pc98
(альтернативная ветвь аппаратного обеспечения,
популярная в Японии). Все, что находится внутри каталога определенной
архитектуры, относится только к этой архитектуре; остальной код является
машинно независимым и общим для всех платформ, на которые FreeBSD может
быть потенциально
портирована. Обратите внимание на логическую структуру каталогов, в
которой каждое поддерживаемое устройство, каждая файловая система и
каждая опция размещается в своём собственном каталоге.
В примерах этой главы подразумевается, что вы используете архитектуру i386. Если архитектура вашей системы отличается от используемой в примерах, то вам необходимо будет соответственно изменить имена каталогов.
Если каталог /usr/src/
отсутствует в вашей
системе (или этот каталог пуст), то это значит, что исходные тексты
не были установлены. Наиболее простой способ установить их
- воспользоваться csup(1), как описано в
Раздел 21.5, <<Синхронизация исходных текстов>>. Далее, создайте символическую ссылку на
/usr/src/sys/
:
#
ln -s /usr/src/sys /sys
Затем, перейдите в каталог
и скопируйте файл конфигурации arch
/confGENERIC
в файл с выбранным вами именем. Например:
#
cd /usr/src/sys/
i386
/conf#
cp GENERIC
MYKERNEL
По традиции имя состоит из букв в верхнем регистре, и если
вы поддерживаете несколько компьютеров FreeBSD на различном оборудовании,
хорошая идея добавлять это имя к имени хоста. Мы назвали ядро
в этом примере.MYKERNEL
Помещение файла конфигурации ядра в /usr/src
может быть плохой идеей. Если вы испытываете проблемы,
их можно решить удалив /usr/src
и начав
все с начала. После этого обычно требуется несколько секунд, чтобы
понять, что вы удалили собственный файл настройки ядра. Не
редактируйте непосредственно GENERIC
, он может
быть также перезаписан и при следующем обновлении дерева исходных текстов,
и изменения ядра будут потеряны.
Вы можете сохранить файл конфигурации ядра в другом месте,
а затем создать символическую ссылку на этот файл в каталоге
.i386
Например:
#
cd /usr/src/sys/
i386
/conf#
mkdir /root/kernels
#
cp GENERIC /root/kernels/
MYKERNEL
#
ln -s /root/kernels/
MYKERNEL
Теперь отредактируйте файл
в своём
любимом текстовом редакторе. Если вы только начинаете, единственным
доступным редактором скорее всего будет vi,
который слишком сложен для того, чтобы описать его здесь,
но в библиографии перечислено
множество книг, в которых его использование хорошо освещено. Однако FreeBSD
предоставляет более простой редактор ee,
который, если вы - новичок, подойдёт вам больше всего. Не стесняйтесь
изменять строки комментариев в начале файла, с тем, чтобы отобразить вашу
конфигурацию или изменения, которые вы сделали по сравнению с
MYKERNEL
GENERIC
.
Если вам приходилось собирать ядро для SunOSTM или какой-либо другой
операционной системы типа BSD, многое из того, что содержится в этом
файле будет очень знакомо вам. Если же вы, напротив, использовали другую
операционную систему, такую как DOS, файл конфигурации
GENERIC
может показаться вам крайне сложным, поэтому
следуйте инструкциям в разделе Конфигурационный файл медленно и
внимательно.
Если вы синхронизируете дерево исходных текстов
с деревом проекта FreeBSD, не забудьте свериться с файлом
/usr/src/UPDATING
перед обновлением. В этом
файле описаны все важные вопросы и области исходного кода, требующие
особого внимания.
/usr/src/UPDATING
всегда соответствует версии
ваших исходных текстов FreeBSD, поэтому является более актуальным
источником информации, чем это руководство.
Теперь вы должны скомпилировать ядро.
Для сборки ядра необходимо наличие всех исходных файлов FreeBSD.
Перейдите в каталог /usr/src
:
#
cd /usr/src
Соберите ядро:
#
make buildkernel KERNCONF=
MYKERNEL
Установите новое ядро:
#
make installkernel KERNCONF=
MYKERNEL
По умолчанию, при построении ядра, все
модули ядра так же будут пересобраны. Если вы хотите обновить
ядро быстрее или построить только определённые модули, то вам
нужно отредактировать файл /etc/make.conf
перед началом процесса сборки ядра:
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
Эта переменная устанавливает список модулей, которые нужно построить вместо построения всех модулей.
WITHOUT_MODULES = linux acpi sound ntfs
В этой переменной перечисляются основные модули, которые необходимо исключить из процесса сборки. За другими переменными, которые вы можете посчитать полезными в процессе сборки ядра, обращайтесь к странице справочника make.conf(5).
Новое ядро будет скопировано в каталог /boot/kernel
как
/boot/kernel/kernel
, а старое ядро будет перемещено в
/boot/kernel.old/kernel
.
Теперь перезагрузите систему для того,
чтобы использовать новое ядро. Если что-то пойдёт не так, вы
можете обратиться к разделу Решение проблем в конце
этой главы, который может оказаться
полезен. Не забудьте прочитать
раздел, который объясняет как исправить ситуацию, когда ядро не загружается.
Другие файлы, относящиеся к
процессу загрузки, такие как загрузчик (loader(8)) и его
конфигурационные файлы, размещаются в /boot
.
Модули сторонних производителей могут быть помещены в
/boot/kernel
, хотя пользователи
должны знать, что
очень важно, чтобы модули были синхронизированы с собранным ядром.
Модули, не рассчитанные на работу с собранным ядром, могут вызвать
нестабильность и некорректность работы.
Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.