Чтение онлайн

на главную - закладки

Жанры

Сетевые средства Linux

Смит Родерик В.

Шрифт:

Компиляция ядра

После того как вы сконфигурировали ядро системы, выполнив

make xconfig
или другую команду, приведенную в начале данной главы, вы должны скомпилировать ядро и установить его модули. Для этого необходимо выполнить следующие команды:

# make dep

# make bzImage

# make modules

# make modules_install

Первая из этих команд выполняет подготовительную работу. Слово

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

В результате выполнения второй команды строится основной файл ядра, который имеет имя

bzImage
и обычно размещается в каталоге
/usr/src/linux/arch/i386/boot
. Существуют различные варианты данной команды. Например, при создании ядра небольшого размера можно использовать команду make
zImage
(ядро в формате
bzImage
дает возможность загрузчику, например LILO, обрабатывать ядро большего размера, чем это позволяет
zImage
). Как
zImage
, так и
bzImage
представляют собой сжатые варианты ядра. Они являются стандартом для компьютеров x86, но на других платформах вам придется вместо make
bzImage
вызвать команду
make vmlinux
. В результате выполнения данной команды строится несжатое ядро. Каталог, в который помещается основной файл ядра, может отличаться от приведенного выше. Если вы работаете на компьютере, отличном от x86, вместо каталога
i386
будет использован каталог, имя которого соответствует текущей платформе. Так, например, на PowerPC этот каталог имеет имя
ррс
.

Команда

make modules
, как нетрудно догадаться, компилирует модули ядра. По команде
make modules_install
файлы, содержащие эти модули, копируются в соответствующие позиции в каталоге
/lib/modules
. В частности, в каталоге
/lib/modules
создается каталог, имя которого отражает версию ядра, а в нем, в свою очередь, — подкаталоги для конкретных классов драйверов.

На заметку

Команды

make dep
,
make bzImage
(или эквивалентную ей команду) и
make modules
может выполнить любой пользователь, при условии, что он обладает правами чтения и записи данных в каталогах, содержащих исходные коды ядра. Выполнить команду
make modules_install
может только пользователь root.

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

Проблемы, возникающие при компиляции ядра

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

• Ошибки в исходном коде или несовместимость кода. Иногда встречаются драйверы, которые содержат ошибки в исходном коде либо несовместимы с остальными компонентами ядра. Такая ситуация может возникнуть при работе с ядром, находящимся в процессе разработки, либо при попытке включить в состав ядра нестандартный драйвер. В этом случае при компиляции отображается одно или несколько сообщений об ошибке. Чтобы избавиться от ошибок, надо обновить версию ядра или, по крайней мере, заменить драйвер, который стал источником проблем. Если без этого драйвера можно обойтись, лучше вовсе отказаться от его использования.

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

make dep
, а затем повторно скомпилировав ядро. Иногда работоспособное ядро можно получить, отказавшись от включения драйвера непосредственно в основной файл и скомпилировав его в виде отдельного модуля (в некоторых случаях приходится принимать обратное решение, т.е. включать в ядро драйвер, который, будучи подготовленным в виде отдельного модуля, стал источником проблем).

• Устаревшие объектные файлы. Если вы компилируете ядро, а затем изменяете конфигурацию и компилируете его повторно, утилита

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

• Ошибка компилятора. GNU С Compiler (GCC) считается надежным компилятором, но бывают случаи, когда он становится источником проблем. Версия GCC, которая входит в состав Red Hat 7.0, не может скомпилировать ядро 2.2.x, но эта проблема устранена в версии ядра 2.4.x. (С Red Hat 7.0 поставляются две версии GCC; для того чтобы компиляция ядра была выполнена успешно, надо вместо

gcc
использовать
kgcc
.)

• Проблемы с использованием аппаратных средств. GCC более интенсивно использует ресурсы компьютера по сравнению с другими программами, поэтому сбои аппаратных средств чаще проявляются в процессе компиляции ядра системы. Такие ошибки называются ошибками signal 11, так как GCC возвращает именно такое сообщение. Причиной подобных ошибок, как правило, являются неисправности в процессоре и оперативной памяти. Дополнительную информацию об этих проблемах и способах их устранения можно найти по адресу

http://www.bitwizard.nl/sig11
.

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

comp.os.linux.misc
. Подробно опишите ваш дистрибутивный пакет, укажите версию ядра, которую вы пытаетесь скомпилировать, и сообщения об ошибках. (Сообщения компилятора, не связанные с возникновением ошибок, лучше не указывать.)

Инсталляция нового ядра и его использование

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

/usr/src/linux/arch/i386/boot
(вместо
i386
может присутствовать другой каталог, имя которого отражает название процессора). Файл ядра надо скопировать или переместить в каталог
/boot
. Желательно переименовать файл так, чтобы его имя отражало версию ядра и изменения, которые вы внесли в него. Например, вы можете назвать файл ядра
bzImage-2.4.17
или
bzImage-2.4.17-xfs
. Если команда
make modules_install
до сих пор не выполнялась, надо вызвать ее, инсталлировав тем самым модули ядра в каталог
/lib/modules/x.y.z
, где
x.y.z
— это номер версии ядра.

Поделиться:
Популярные книги

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Остров

Лаймон Ричард Карл
Детективы:
триллеры
7.52
рейтинг книги
Остров

Трилогия «Хроники Сиалы»

Пехов Алексей Юрьевич
3. В одном томе
Фантастика:
фэнтези
9.47
рейтинг книги
Трилогия «Хроники Сиалы»

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Эллинские поэты

Коллектив авторов
Старинная литература:
античная литература
7.00
рейтинг книги
Эллинские поэты

Клетчатая зебра

Донцова Дарья
36. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
7.93
рейтинг книги
Клетчатая зебра

Белая чума

Герберт Фрэнк Патрик
Фантастика:
научная фантастика
6.40
рейтинг книги
Белая чума

Кодекс Охотника. Книга XXVI

Винокуров Юрий
26. Кодекс Охотника
Фантастика:
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXVI

Газлайтер. Том 3

Володин Григорий Григорьевич
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 3

Дважды одаренный. Том VII

Тарс Элиан
7. Дважды одаренный
Фантастика:
аниме
фэнтези
попаданцы
5.40
рейтинг книги
Дважды одаренный. Том VII

Локки 11. Потомок бога

Решетов Евгений Валерьевич
11. Локки
Фантастика:
героическая фантастика
боевая фантастика
фэнтези
юмористическое фэнтези
6.00
рейтинг книги
Локки 11. Потомок бога

Локки 8. Потомок бога

Решетов Евгений Валерьевич
8. Локки
Фантастика:
фэнтези
боевая фантастика
героическая фантастика
попаданцы
5.00
рейтинг книги
Локки 8. Потомок бога

Диверсант

Вайс Александр
2. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Диверсант

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V