Сборка и установка собственного ядра
Во-первых, давайте сделаем краткий обзор каталога, в котором будет происходить сборка ядра. Все каталоги, которые будут упоминаться, будут относительными по отношению к основному каталогу /usr/src/sys, который также доступен как каталог /sys. Этот каталог содержит множество подкаталогов, представляющих собой различные части ядра, но наиболее важным для нас будет каталог arch/conf, в котором вы будете редактировать конфигурационный файл ядра и в котором находится каталог compile, где будет собираться ваше ядро. arch может быть i386, alpha, amd64, ia64, powerpc, sparc64 или pc98 (альтернативная ветвь аппаратного обеспечения, популярная в Японии). Все, что находится внутри каталога определенной архитектуры, относится только к этой архитектуре; остальной код является машинно независимым и общим для всех платформ, на которые FreeBSD может быть потенциально портирована. Обратите внимание на логическую структуру каталогов, в которой каждое поддерживаемое устройство, каждая файловая система и каждая опция размещается в своём собственном каталоге. Версии FreeBSD до 5.X поддерживали только архитектуры i386, alpha и pc98.
В примерах этой главы подразумевается, что вы используете архитектуру i386. Если это не так, измените каталоги, указанные в примерах, в соответствии с архитектурой вашей системы.
Замечание: Если в вашей системе отсутствует каталог /usr/src/sys, это означает, что исходные тексты ядра не были установлены. Наиболее простой способ установить их - запустить /stand/sysinstall как root, выбрать Configure, потом Distributions, потом src, потом sys. Если вы испытываете отвращение к sysinstall и у вас есть доступ к ``официальному'' FreeBSD CDROM, вы также можете установить исходные тексты при помощи командной строки:
# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
Затем, перейдите в каталог 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, поэтому является более актуальным источником информации, чем это руководство.
Теперь вы должны скомпилировать ядро. Существует два способа, которые позволяют это сделать. Какой из них выбрать, зависит от того, почему вам понадобилось пересобирать ядро и версии FreeBSD, которую вы используете.
Если вы установили только
исходные тексты ядра, используйте способ 1.
Если вы используете FreeBSD версии более ранней, чем 4.0 и вы не обновляете систему до FreeBSD 4.0 или выше, используя make world, используйте способ 1.
Если вы собираете новое ядро, не обновляя исходные тексты (возможно, для того, чтобы добавить новую опцию, например IPFIREWALL), вы можете использовать любой способ.
Если вы пересобираете ядро как часть процесса make world, используйте способ 2.
Если вы не обновляли дерево исходных текстов с момента последнего успешного завершения цикла buildworld-installworld, (то есть не запускали CVSup, CTM, или не использовали anoncvs), возможно использование последовательности config, make depend, make, make install.
Способ 1. Сборка ядра ``традиционным'' способом
Запустите для того, чтобы сгенерировать исходные тексты ядра.
# /usr/sbin/config MYKERNEL
Перейдите в каталог, в котором будет собираться ядро. Запущенный как показано выше config(8) выведет имя этого каталога.
# cd ../compile/MYKERNEL
Для FreeBSD версий более ранних, чем 5.0, вместо этого используйте:
# cd ../../compile/MYKERNEL
Соберите ядро.
# make depend
# make
Установите новое ядро.
# make install
Способ 2. Сборка ядра ``новым'' способом.
Перейдите в каталог /usr/src.
# cd /usr/src
Соберите ядро.
# make buildkernel KERNCONF=MYKERNEL
Установите новое ядро.
# make installkernel KERNCONF=MYKERNEL
Замечание: В FreeBSD 4.2 и в более ранних, вам будет необходимо заменить KERNCONF= на KERNEL=. 4.2-STABLE, исходные тексты которой были обновлены до 2 февраля 2001 года, не понимает параметра KERNCONF=.
Новое ядро будет скопировано в каталог /boot/kernel как /boot/kernel/kernel, а старое ядро будет перемещено в /boot/kernel.old/kernel.
Теперь перезагрузите систему для того, чтобы использовать новое ядро. Если что-то пойдёт не так, вы можете обратиться к разделу в конце этой главы, который может оказаться полезен. Не забудьте прочитать раздел, который объясняет как исправить то, что ядро .
Замечание: В FreeBSD 4.X и более ранних, ядро устанавливается в /kernel, модули в /modules, а старое ядро сохраняется в /kernel.old. Другие файлы, относящиеся к процессу загрузки, такие как загрузчик (loader(8)) и его конфигурационные файлы, размещаются в /boot. Модули сторонних производителей могут быть помещены в /modules, хотя пользователи должны знать, что очень важно, чтобы модули были синхронизированы с собранным ядром. Модули, не рассчитанные на работу с собранным ядром, могут вызвать нестабильность и некорректность работы.
Замечание: Если вы добавили новые устройства (такие, как звуковая карта) и используете FreeBSD 4.X или более ранние версии, то, возможно, вам понадобится создать некоторые файлы устройств в каталоге /dev перед тем, как вы сможете их использовать. За дополнительной информацией вы можете обратиться к разделу далее в этой главе.