Зачем это нужно?
Этапы процесса перегенерации
Создание драйверов устройств
Упражнения
Вопросы и ответы
При инсталляции FreeBSD у вас создалось в системе ядро (файл /kernel), которое вполне работоспособно. Зачем же его переделывать?
Дело в том, что это ядро (так называемая GENERIC конфигурация) как раз предназначено для того, чтобы система успешно развернулась на компьютере любой конфигурации из поддерживаемых.
В эту конфигурацию встроена поддержка ВСЕХ типов накопителей (HDD и CD) и ВСЕХ сетевых карт, которые на данный момент поддерживаются FreeBSD. Это вполне логично - вы должны иметь возможность поставить свой Unix и дополнительные программы на тот HDD, который имеется у вас и суметь войти в сеть, какой бы сетевой карточкой вы ни пользовались.
В то же время, в ядро не включены некоторые полезные модули, которые могут понадобится в дальнейшем, особенно, если вы хотите использовать вашу машину в качестве сервера. (Например - поддержка firewall, PPP-сервера, bpf и т.п.).
Таким образом, перегенерировать ядро необходимо для того, чтобы:
Первое позволит вам ускорить загрузку (так как система не будет тратить время на поиск и тестирование несуществующих в вашей машине устройств) и сэкономить место в ОЗУ, занимаемое ядром.
А без второго вы, скорее всего, не сможете решать свои задачи.
В общем виде этот процесс выглядит так:
Теперь рассмотрим эти пункты более подробно.
Установка исходных кодов ядра.
Прежде всего, посмотрите в директорию /usr/src/sys если она не пустая, то все что вам нужно уже на месте. И вы можете спокойно перейти к следующему пункту.
В противном случае, вам надо взять из дистрибутива нужные файлы и установить их. Это легко можно проделать с помощью команды /stand/sysinstall. Более подробно, см. раздел "Инсталляция системы".
Составление конфигурационного файла.
Перейдите в директорию /usr/src/sys/i386/conf.
Здесь имеются два конфигурационных файла GENERIC и LINT. Первый представляет собой конфигурацию того ядра, которое установилось у вас при инсталляции системы. Вы можете посмотреть в нем, что именно может ваше текущее ядро.
Второй же файл представляет собой подробное описание всех возможных элементов конфигурационного файла. Если вы попытаетесь построить ядро в конфигурации LINT, оно, скорее всего не будет работать.
Вам необходимо составить свой конфигурационный файл. Его название значения не имеет. Можете назвать его, например, myKERNEL. Обычно ему дают то же название, что и доменное имя машины, либо (удобно, если вы заготавливаете несколько ядер для выполнения разных задач) - FIRST (SECOND, THIRD и т.п.).
В качестве основы для нового файла вы можете использовать один из уже имеющихся файлов - GENERIC или LINT.
Если вы возьмете за основу GENERIC, то вам придется убрать оттуда описания всех лишних устройств и дописать необходимые вам options.
Если же вы возьмете за основу LINT, то все редактирование будет заключаться в удалении всего ненужного. Это может оказаться весьма и весьма утомительным занятием.
Возьмем за основу файл GENERIC. Скопируйте его:
cp GENERIC myKERNEL
Теперь нужно отредактировать его любым текстовым редактором.
Как было сказано выше, основным руководством по составлению новой конфигурации служит файл LINT. Причем, там должны быть описаны самые последние options, которые появились в той версии FreeBSD.
Ниже приводится список опций конфигурационного файла.
"I386_CPU" - 386-е процессоры;
"I486_CPU" - 486-е процессоры, включая AMD-5x86;
"I586_CPU" - 586-e процессоры: Pentium, Pentium MMX, AMD-K5, AMD-K6;
"I686_CPU" - 686-е процессоры: Pentium Pro, Pentium II;
Проверить список устройств в вашей системе можно с помощью следующей команды:
# dmesg
Данная команда показывает системные сообщения, которые вы наверное видели при начальной загрузке системы.
Что же нужно, чтобы сделать все правильно?
Подготовка к компиляции
После того, как вы закончили редактировать свою конфигурацию, наберите команду
/usr/sbin/config myKERNEL
Она создаст в директории /usr/src/sys директорию compile/myKERNEL (о чем и сообщит вам в конце своей работы) и поместит туда файлы, необходимые для компиляции ядра. Так же эта команда попросит вас "не забыть" выполнить команду make depend.
Выполните команды
Компиляция нового ядра
Находясь в директории /usr/src/sys/compile/myKERNEL и наберите команду
# make
она сделает все что нужно.
Учтите, что ядро системы - достаточно сложная программа, поэтому ее компиляция потребует довольно много времени. От 15-20 минут на процессоре Pentium до часа, на 386 процессоре.
Если в процессе компиляции обнаружатся фатальные ошибки, придется пересмотреть свой конфигурационный файл, исправить его и повторить все заново. (Такие случаи бывают не только у новичков, но и у опытных администраторов, так что преждевременно не огорчайтесь).
Установка нового ядра
После того, как компиляция ядра успешно завершилась, наберите команду
# make install
она переименует старое ядро в /kernel.old и поместит в корневую директорию ваш новый /kernel. После этого нужно перегрузить компьютер.
Если загрузка нового ядра не получилась (такое тоже возможно), вы можете загрузиться со старым ядром. Для этого, в начале загрузки на подсказку Boot: надо быстро сказать kernel.old. Естественно, после этого надо снова вернуться к редактированию вашей конфигурации и повторить все последующие пункты.
Только не торопитесь. Если новое ядро опять окажется неработоспособным, вы можете попасть в неприятную ситуацию, так как после очередной инсталляции ядра командой make install получится:
kernel.old - предыдущая неработающая версия ядра
kernel - новая, но столь же бесполезная.
Но даже теперь не отчаивайтесь. У вас должен был остаться в корневой директории файл kernel.GENERIC и вы можете всегда загрузить его (конечно, если вы не удалили его ранее в целях экономии места на диске). Поэтому на подсказку Boot: надо набрать kernel. GENERIC.
Для того, чтобы не попасть в вышеописанную ситуацию, после загрузки старого ядра, замените им ваше новое ядро:
# cd / # chflags noschg kernel # cp kernel kernel.new # cp kernel.old kernel # chflags schg kernel # reboot
После этого можете смело продолжать ваши изыскания по конфигурированию ядра.
И напоследок, проверьте наличие файла /boot.config. Если этого файла нет - создайте его:
# echo /boot/loader " /boot.config
В каталоге /boot должны содержаться файлы:
boot0 boot1 boot2 loader
Если вы добавили в конфигурации ядра устройства (реальные или pseudo-device), возможно потребуется создать для них файлы-устройства в директории /dev. Какие-то общие рекомендации по этому поводу дать трудно, поскольку это зависит от того - какие устройства были добавлены в конфигурационный файл.
Во всяком случае, если вы знаете какого файла (в /dev) не хватает, его можно создать с помощью программки MAKEDEV, которая лежит в той же /dev. Это даже не программа, а командный файл, в начале которого есть комментарии, в которых более-менее подробно описаны возможные аргументы (имена устройств) для MAKEDEV. Если в ядро включен, например, Sound Blaster 16, но устройства snd0 нет в каталоге /dev (проверить это можно командой ls /dev), нужно создать его:
# cd /dev # sh MAKEDEV snd0
Упражнения в данной главе, на мой взгляд, задавать бессмысленно, поскольку сам процесс построения нового ядра FreeBSD само по себе очень хорошее упражнение в деле освоения операционной системы.
Вопрос: Я не могу скомпилировать ядро. Отсутствует _hw_float.
Ответ: Вы, возможно, удалили npx0 из вашего файла конфигурации ядра, потому что у вас нет сопроцессора. Это неправильно. Даже если у вас нет математического сопроцессора, вы должны включить поддержку npx0
Сopyright © 2000. Андрей Фёдоров
http://www.anriintern.com/computer/freebsd/
Назад | Содержание | Вперед