Пересобираем ядро

Обновлена 29.05.2013

Процесс пересборки ядра в FreeBSD по-моему, намного легче, чем в linux (это сугубо моё мнение). Он состоит из 3 этапов: установка исходников, внесение изменений в файл конфига ядра, собственно пересборка.

1) Установка исходников

Первым делом ставим их (если они у вас уже стоят, то этот этап можно пропустить). Ставить можно по разному, с диска, с ftp, … Я чаще всего ставлю с диска. И так, вставляем диск, запускаем от рута sysinstall и выбираем пункт меню Configure -> Distribution -> src и выбираем откуда ставить. Я выбираю с диска.

2) Внесение изменений в ядро.

После установки исходников, идём редактировать файл конфигурации ядра. Он находится по адресу /usr/src/sys/{тип установленной ОС: i386, amd64, …}/conf/{имя файла ядра}. По умолчанию присутствует несколько файлов конфигурации, включая GENERIC. Это как бы самый основной конфиг, подходит для большинства. Вот его и рекомендую править, точнее копию. (копируем GENERIC например в kern1) и дальше будем править только kern1, что бы если что, можно было обратно вернуться на GENERIC.

Теперь открываем полученный kern1 любым удобным редактором и вносим собственно изменения. Обычно это добавление каких-то устройств, опций. Рекомендую при внесении изменений добавлять свои комментарии. При удалении, лучше закомментировать соотвествующие опции, вместо того, что бы просто удалить.

После внесения изменений, сохрнаняемся, и выходим.

3) Собственно компиляци нового ядра.

Примечание.

Если вы обновляете ядро на STABLE, обязательно нужно пересобрать сначала мир, а потом уже ядро. Иначе будет ошибка на этапе компиляции.

После всех изменений, переходим в каталог /usr/src и выполняем следующую команду (если вы компилируете на многопроцессорной машине, имеет смысл выполнять make с ключом -j, где n – количество процессоров:)

#make -j4 buildkernel KERNCONF=kern1 && make installkernel KERNCONF=kern1

Параметр j4 означает собирать в 4 потока, то есть значительно быстрее. Если у вас не Pentium3, а хотя бы какой-нибудь dualcore тогда применение этого параметра будет целесообразным.

Если всё прошло успешно, то можно будет перегрузить машину, и проверить изменения.

Примечание Если вдруг новое ядро не загрузилось, тогда делаем так. При загрузке появляется 10 секундная пауза, выбираем пункт 6 и делаем такие действия

OK unload kernel_name
OK load /boot/kernel.old/kernel
OK boot

, где kernel_name — имя нового ядра при сборке

Возможно на некоторых системах вторая строчка может показывать сообщение, что ядро не найдено. Тогда можно попробовать сделать так.

OK unload kernel_name
boot /boot/kernel.old/kernel

4) Некоторые опции конфига ядра работы с модулями.

NO_MODULES="YES" - не компиллировать модули
MODULES_OVERRIDE=acpi ipfw - компиллировать только указанные модули (задаются через пробел)
WITHOUT_MODULES=pf ntfs_iconv - не компиллировать указанные модули (будут скомпиллированы все, кроме указанных модулей)

5) Полезная опция

Начиная с версии 7.0 появилась переменная sysctl kern.conftxt, которая позволяет просмотреть, с какой конфигурацией собрано текущее ядро (следует использовать команду «sysctl -b kern.conftxt»). Правда, доступной она будет только в случае, если ядро собрано с опциейINCLUDE_CONFIG_FILE (в файле GENERIC она отсутствует). Также можно воспользоваться командой «config -x /boot/kernel/kernel», извлекающей конфигурацию из указанного двоичного файла ядра. Раньше опция INCLUDE_CONFIG_FILE тоже поддерживалась, но конфигурацию приходилось «выдирать» из бинарного файла с помощью утилиты strings.

6) Новшества (начиная с версии 9.0).

Ядро FreeBSD, которое раньше могло находиться как в /boot/kernel, так и в /boot/GENERIC, теперь должно быть размещено только в /boot/kernel. Если ядро было в /boot/GENERIC то в процессе обновления оно будет удалено.

Оригинал статьи здесь.

Опубликовано с разрешения редакции журнала RootUA и газеты FOSS News

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *