9.5. Сборка и установка собственного ядра

Примечание:

Для сборки ядра необходимо наличие всех исходных файлов FreeBSD.

Во-первых, давайте сделаем краткий обзор каталога, в котором будет происходить сборка ядра. Все каталоги, которые будут упоминаться, будут относительными по отношению к основному каталогу /usr/src/sys, который также доступен как каталог /sys. Этот каталог содержит множество подкаталогов, представляющих собой различные части ядра, но наиболее важным для нас будет каталог arch/conf, в котором вы будете редактировать конфигурационный файл ядра и в котором находится каталог compile, где будет собираться ваше ядро. 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/conf и скопируйте файл конфигурации GENERIC в файл с выбранным вами именем. Например:

# 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

Теперь отредактируйте файл MYKERNEL в своём любимом текстовом редакторе. Если вы только начинаете, единственным доступным редактором скорее всего будет vi, который слишком сложен для того, чтобы описать его здесь, но в библиографии перечислено множество книг, в которых его использование хорошо освещено. Однако FreeBSD предоставляет более простой редактор ee, который, если вы — новичок, подойдёт вам больше всего. Не стесняйтесь изменять строки комментариев в начале файла, с тем, чтобы отобразить вашу конфигурацию или изменения, которые вы сделали по сравнению с GENERIC.

Если вам приходилось собирать ядро для SunOS™ или какой-либо другой операционной системы типа BSD, многое из того, что содержится в этом файле будет очень знакомо вам. Если же вы, напротив, использовали другую операционную систему, такую как DOS, файл конфигурации GENERIC может показаться вам крайне сложным, поэтому следуйте инструкциям в разделе Конфигурационный файл медленно и внимательно.

Примечание:

Если вы синхронизируете дерево исходных текстов с деревом проекта FreeBSD, не забудьте свериться с файлом /usr/src/UPDATING перед обновлением. В этом файле описаны все важные вопросы и области исходного кода, требующие особого внимания. /usr/src/UPDATING всегда соответствует версии ваших исходных текстов FreeBSD, поэтому является более актуальным источником информации, чем это руководство.

Теперь вы должны скомпилировать ядро.

Процедура 9.1. Сборка ядра

Примечание:

Для сборки ядра необходимо наличие всех исходных файлов FreeBSD.

  1. Перейдите в каталог /usr/src:

    # cd /usr/src
  2. Соберите ядро:

    # make buildkernel KERNCONF=MYKERNEL
  3. Установите новое ядро:

    # 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, хотя пользователи должны знать, что очень важно, чтобы модули были синхронизированы с собранным ядром. Модули, не рассчитанные на работу с собранным ядром, могут вызвать нестабильность и некорректность работы.

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.