Построение ядра FreeBSD
Категория: Драйверы и ядро | Автор: admin | 10-01-2010, 23:27 | Просмотров: 4101

Приведенные в этом параграфе примеры были получены в системе, работающей под управлением FreeBSD, но конфигурация для NetBSD, OpenBSD и BSD/OS очень похожа на показанную.

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

Чтобы построить ядро FreeBSD, нужно сначала создать конфигурационный файл со списком параметров нового ядра. Потом следует запустить команду config для создания каталога, в котором будет вестись компиляция ядра. Имя конфигурационного файла становится именем каталога, а затем и самого ядра.

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

Вот результат выполнения команды ls -F для каталога SYS:

# Is -F

Makefile     ddb/         libkern/    netinet/ pccard/

alpha/       dev/         mescfs/     netipx/  pci/

boot/        gnu/         modules/    netkey/  posix4/

cam/         i386/        msdosfs/    netnatm/ sys/

coda/        i4b/         net/        netns/   ufs/

compile/     isa/         netatalk/   nfs/      vm/

conf/        isofs/       netatm/     ntfs/

contrib/     kern/        netgraph/   pc98/

 

 

Каталог i386 содержит модули, зависящие от архитектуры машины:

% Is -F i386

Makefile           boot/         eisa/         ibcs2/         isa/

apm/               conf/         i386/         include/       linux/

 

В каталоге SYS содержится ряд важных каталогов с общим названием SYS/архитектура/conf. В них находятся конфигурационные файлы, каждый из которых соответствует одному ядру. В нашей книге мы предполагаем, что используется архитектура Intel i386, хотя операционная система FreeBSD поддерживает также архитектуру Alpha. Команда config читает файл конфигурации из каталога SYS/архитектура/conf и создает соответствующий компиляционный каталог под именем SYS/compile/ИМЯ_ЯДРА.

Например, когда система инсталлируется первый раз, создается базовое ядро с именем GENERIC. Стандартный конфигурационный файл называется SYS/i386/conf/GENERIC, поэтому компиляционный каталог будет назван SYS/compile/GENERIC.

Остальные каталоги в ветви SYS содержат различные компоненты ядра, путем объединения которых формируется исполняемый образ ядра. Точный перечень файлов и подкаталогов у каждой BSD-системы свой.

 

Схема построения ядра

 

Процесс построения нового ядра состоит из восьми этапов:

  • ревизия аппаратных средств системы;
  • создание и редактирование файла конфигурации ядра в каталоге SYS/i386/conf;
  • выполнение команды config в каталоге conf;
  • выполнение команды make depend в компиляционном каталоге;
  • построение ядра с помощью программы make;
  • архивирование старого ядра и инсталляция нового;
  • тестирование и отладка нового ядра;
  • документирование нового ядра.

 

Ревизия аппаратных средств системы

 

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

  • жесткие диски, дисководы CD-ROM, другие дисководы и их контроллеры;
  • сетевые интерфейсы;
  • специализированные устройства;
  • клавиатуру и мышь.

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

Не забудьте на этапе начальной загрузки просмотреть сообщения, выдаваемые базовым ядром. Из них можно узнать о том, какие драйверы следует включить в ядро. Получить текущий список распознанных устройств можно с помощью команды dmesg. В качестве дополнительного справочника можно воспользоваться файлом SYS/i386/conf/LINT.

 

Создание файла конфигурации в каталоге SYS/i386/conf

 

Решив, какая конфигурация ядра нужна, следует представить эту информацию в форме, которая будет понятна команде config. Для этого в каталоге SYS/i386/conf создается файл конфигурации. Имя этого файла может быть любым, но оно должно быть достаточно содержательным для того, чтобы любой человек, впервые заглянувший в каталог SYS, смог определить, для чего предназначено каждое ядро.

Не создавайте файл конфигурации с нуля. Лучше скопируйте файл GENERIC и удалите из него те части, которые не нужны. Если возникнут какие-либо вопросы, связанные с этим файлом, обратитесь к документации на команду config. Хорошим источником информации служат также man-страницы, посвященные драйверам устройств. В них обычно приводятся строки из файла конфигурации ядра, которые можно взять в качестве образца. Например, man-страница для устройства de начинается так:

SYNOPSIS

 

device de

 

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

Описание формата конфигурационного файла займет добрый десяток страниц, поэтому мы не будем прерывать обзор процесса построения ядра, а отложим описание до параграфа 12.7.

 

Выполнение команды config

 

Перед запуском команды config необходимо перейти в каталог SYS/i386/conf, поскольку именно в текущем каталоге команда рассчитывает найти файл конфигурации, указанный в командной строке. Простые версии команды принимают один-единственный аргумент — имя файла. В более сложных версиях имеется ряд опций. Чтобы создать компиляционный каталог для ядра, описанного в файле SYS/i386/conf/EXAMPLE, мы воспользуемся такими командами:

# cd SYS/i386/conf

# config EXAMPLE

 

Если команда config выдает сообщения об ошибках, необходимо исправить файл конфигурации, прежде чем продолжать. Если же ошибок не было считайте, что по крайней мере синтаксически конфигурация верна, и продолжайте работу.

 

Выполнение команды make depend

 

После завершения команды config перейдите в компиляционный каталог нового ядра (cd ../../compile/EXAMPLE) и введите команду Is. Должно отобразиться очень много файлов. Пусть их содержимое вас не волнует команда config знает, что делает.

Теперь выполните команду make depend. Она инициализирует информацию о связях между файлами для программы make. Эта команда может выдать большой объем данных.

 

Построение ядра

 

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

# make  |& tee ERRS.LOG

 

Оператор & после знака канала указывает на то, что через канал будут направляться как сообщения об ошибках, так и информационные сообщения Пользователи интерпретатора Bourne shell должны воспользоваться такой командой:

# make 2>&1  |  tee ERRS.LOG

 

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

 

Инсталляция ядра

 

Перед начальной загрузкой нового ядра убедитесь, что сможете восстановить систему, если с ней что-нибудь произойдет. Никогда не заменяйте старое ядро новым непосредственно, ибо в случае катастрофы неоткуда будет загрузиться. Раньше ядра назывались /vmunix, но в наши дни в каждой операционной системе используется свое соглашение об именовании ядер. Во FreeBSD ядро называется /kernel.

Необходимо создать резервную копию старого ядра, скопировав файл /kernel под именем /kernel.work. Во всех системах предусмотрены средства сохранения загружаемости старого ядра на время тестирования нового. Конкретнее об этом говорилось в главе 2. Дополнительную информацию можно получить в документации.

Имя ядра /kernel может быть жесткой ссылкой на другой файл, поэтому достаточно просто создать ссылку на новое ядро, а не копировать его поверх старого. Если ядро не называется /kernel и нужная ссылка не создана, то загрузчик не сможет найти ядро.

 

Тестирование и отладка ядра

 

Если система загрузилась успешно, то, скорее всего, все в порядке. Но не помешает перестраховаться и провести ряд дополнительных проверок. Попробуйте запустить команду Is хотя бы для одного каталога в каждой файловой системе. Отсутствие ошибок означает, что файловая система функционирует нормально. Выполните команду ping, указав адрес соседнего компьютера, чтобы проверить правильность работы сетевой платы.

 

Документирование ядра

 

Прежде чем со спокойной душой идти пить кофе, вернитесь к исходному файлу SYS/i386/conf/ИМЯ_ЯДРА и добавьте в него подробные комментарии, чтобы через полгода-год, когда опять нужно будет прочесть этот файл, можно было понять его содержимое.

Если на диске много места, сохраните каталог SYS/compile/ИМЯ_ЯДРА для ускорения последующих изменений. Когда свободного пространства недостаточно, просто удалите этот каталог: все его содержимое можно будет повторно сгенерировать с помощью команды config.



 (голосов: 1)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page