Сборка ядра


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

Вам необходимо указать имя файла, который содержит конфигурацию вашего ядра, либо в командной строке, либо в файле /etc/make.conf, либо в файле /etc/src.conf, в виде переменной окружения KERNCONF.

# cd /usr/src
# make KERNCONF=MYKERNEL kernel

Процесс сборки начинается с запуска команды config(8), для поиска синтаксических ошибок в файле конфигурации. Если config(8) обнаружит какие-либо ошибки, она сообщит о них и прекратит работу. Некоторые сообщения об ошибках довольно очевидны. Например, можно случайно удалить поддержку файловой системы UNIX (UNIX File System, UFS), но включить поддержку инициализации UFS. Одна функция не может обойтись без другой, поэтому config точно скажет, в чем состоит ошибка. Другие сообщения об ошибках могут выглядеть странно и непонятно, и тогда для выяснения причин может потребоваться длительное время, как, например, при получении следующего сообщения:

HUMVEE: unknown option "NET6"

NET6 — это же параметр, активирующий поддержку IPv6, разве не так? Нет, эту поддержку активирует параметр INET6. Сообщения об ошибках в достаточной мере описывают проблему, особенно теперь, когда вы познакомились со всеми параметрами, поддерживаемыми ядром. Внимательно читайте сообщения об ошибках!

Если config(8) не нашла ошибок, остается только ждать. Процесс сборки ядра на 486 компьютере может занимать несколько часов, но меньше часа на современной и быстрой системе. При этом по экрану будут пробегать загадочные сообщения о ходе компиляции. По окончании сборки система переименует текущее ядро в /boot/kernel.old, а новое ядро будет сохранено в виде файла /boot/kernel. Когда все закончится, перезагрузите сервер и посмотрите на сообщения, появляющиеся во время загрузки.

Во время загрузки FreeBSD точно сообщит, какое ядро было загружено (1) и где это ядро было собрано (2). Поздравляю, вы только что собрали ядро!

Выявление неполадок при создании ядра

Если собрать ядро не удалось, то для выявления неполадок прежде всего необходимо изучить последние строки, выданные при компиляции. Некоторые из этих строк могут показаться непонятным шифром, а другие достаточно очевидны. Важно помнить, что сообщения вида «Stop in имя некоторого каталога» абсолютно бесполезны — нужные нам сообщения об ошибках находятся перед ними. О том, как решать эти проблемы, мы говорили в главе 1: берете текст сообщения об ошибке и обращаетесь за помощью к поисковой системе. Как правило, ошибки времени компиляции вызваны ошибками в конфигурации.

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

Загрузка с запасного ядра

Итак, что делать, если новое ядро не работает или работает неустойчиво? Возможно, при конфигурировании не был указан драйвер устройства либо удалено псевдоустройство ppp и не удается установить коммутируемое соединение с Интернетом. Без паники! Старое ядро сохранено, верно? Хороню. Вот что следует предпринять.

В главе 3 мы обсуждали механизм загрузки альтернативного ядра. Мы пройдем этот процесс еще раз, но, чтобы увидеть некоторые пояснения, касающиеся подробностей управления загрузчиком, вам может потребоваться вернуться к более раннему разделу. А теперь сосредоточим свое внимание на причинах, которые могут вынудить произвести загрузку с запасного ядра, и на том, как сделать это правильно.

Для начала необходимо решить, какое ядро загружать. Старое ядро должно находиться в каталоге /boot — в этом разделе предполагается, что необходимо загрузить ядро /boot/kernel.good. Запустите перезагрузку и прервите ее, чтобы получить доступ к командной строке загрузчика. Вспомните, мы говорили, что к моменту, когда FreeBSD предоставит доступ к командной строке загрузчика, ядро уже было загружено, поэтому в первую очередь необходимо выбросить плохое ядро за борт:

ok unload

Теперь можно загрузить требуемое ядро, а также модуль ACPI (если он используется) и любые другие модули ядра, которые обычно загружаются на этапе запуска системы:

ok load /boot/kernel.good/kernel
ok load /boot/kernel.good/acpi.ko
ok boot

После этого система будет загружена на старом ядре.

Комментарии запрещены.