Библиотека сайта rus-linux.net
Построение специального ядра
Если Вы используете Linux с необычной аппаратурой, нуждаетесь в возможностях, которых нет в стандартных ядрах системы или хотите уменьшить память, отдаваемую ядром тем возможностям, которыми Вы все равно не пользуетесь, создайте специально настроенное ядро.
Обновление ядра включает конфигурирование желательных модулей, компиляцию
ядра и модулей, и в заключение установку образа ядра. Это сопровождается
перезагрузкой системы, чтобы загрузить новое ядро. Все это описано в файле
``
'', поставляемом с
каждым пакетом ядра. Дальнейшая информация может быть найдена в подкаталоге
``README
''.
Особенно полезный файл там ``Documentation/
'', который содержит детализированную информацию
относительно доступного ядра, параметров компиляции и модулей.
Configure.help
Далее приводится пример построения заказного ядра версии 2.0.36 для платформы Intel. При формировании заказного ядра обычно происходит только конфигурирование, компиляция и установка, но иногда (обычно в случае новых аппаратных средств) необходимо загрузить дополнительное программное обеспечение (драйвер), если аппаратные средства еще не поддерживаются версией ядра, которую Вы компилируете.
Первый шаг в формирование заказного ядра: скачать и поставить исходный текст ядра из RPM (рекмендуется) или из tarball. См. в разделе Обновление ядра Linux подробности о том, какие файлы нужны и где их взять.
Теперь утилитой ``rpm
'' (или
``tar
'') поставьте дерево исходников ядра и файлы
заголовков. Например, для установки ядра 2.0.36-3 из RPM:
|
(Если Linux используется на notebook, Вам также нужен файл
``
'', который поддерживает функции управления питанием.)kernel-pcmcia-cs-2.0.36-3.i386.rpm
После установки файлов ядра, Вы должны быть способны найти новое дерево
исходников в каталоге ``
''.
/usr/src/linux/
Следующий шаг: надо скачать все дополнительные файлы драйверов (если
они нужны) и установить их в новое ядерное исходное дерево. Например,
чтобы добавить поддержку для Mylex DAC960 (аппаратный контроллер RAID) я
загрузил драйвер с сайта
http://www.dandelion.com. К сожалению, такое программное обеспечение
предлагается обычно только как tarballs, так что ставьте с использованием
утилиты ``tar
''. Например:
|
Вы должны прочитать документацию, поставляемую с драйвером. Например,
драйвер DAC960 включает файл ``
'', который поясняет как разместить скачанные файлы и
применить патч ядра:
README
|
Следующий шаг: надо гарантировать, что символические связи файлов в Вашей системе не противоречат новому дереву ядра. Фактически, этот шаг должен быть ыыполнен только однажды, так как он нужен только, если Вы не компилировали заказное ядро раньше:
|
Замечание: данный шаг больше не нужен для ядер версии 2.2.x или выше. |
Следующий шаг: сконфигурировать ваши параметры настройки ядра. Это наиболее важный шаг в формировании заказного ядра. Если по ошибке выключите нужную возможность, узнаете про это гораздо позже... Однако, если Вы включите лишние возможности, то зря потратите память в системе (замечание переводчика: что обычно и происходит в неоптимальных стандартных ядрах).
Надо разобраться в том, что Вам нужно в системе, какие возможности должны поддерживаться, какое оборудование имеется. После нескольких попыток настройки ядра, процесс станет очень понятным и знакомым. Это в первый раз трудно, потом привыкнете!
Наберите следующее для запуска процесса настройки:
|
(Вы можете ввести ``make xconfig
'' вместо
``make menuconfig
'' при работе в X Window System;
см. главу 5 для подробностей о работе в X.)
Чтобы конфигурировать ваше ядро, пройдите различные параметры настройки,
разрешите те, которые нужны, и снимите выделение (отключите) с тех, которые
не нужны. Вы можете выбирать между наличием поддержки некоторого свойства,
встроенной в ядро, и наличием ее как модуля, который загружается и
выгружается ядром когда необходимо. (Если Вы компилируете свойство, которое
фактически необходимо, чтобы загружать систему, типа SCSI драйвера, как
модуль, Вы будете должны создать образ RAMDISK, или система не будет
загружаться. Это делается командой ``mkinitrd
'';
эта процедура описана немного позже.)
При прохождении параметров настройки конфигурации, Вы можете выбрать
<Help>
для описания того, зачем нужна данная
опция ядра.
После того, как Вы сконфигурировали ваши ядерные параметры настройки, введите следующие команды, чтобы откомпилировать ядро:
|
Если Вы перекомпилируете то же самое ядро, какое Вы имели (2.0.36-3 в данном примере), стоит переместить существующие модули в какой-нибудь резервный каталог командой:
|
Теперь установите новые модули:
|
Теперь скопируйте ядро в каталог
``
'' и используйте
LILO для обновления boot record, чтобы новое ядро распознавалось. Следующие
команды изготовят резервную копию существующего ядра, скопируют новое ядро и
затем обновят LILO boot record:/boot/
|
Наконец, подправьте файл
``
'', и
создайте ссылку “image” на новое ядро. Вы должны также добавить
раздел, который указывает на ваше резервное ядро, названное, возможно,
“OldLinux”. Пример файла:/etc/lilo.conf
boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 image=/boot/vmlinuz label=Linux root=/dev/hdb1 read-only image=/boot/vmlinuz.OLD label=OldLinux read-only |
Таким образом, Вы обеспечите себе путь для отступления: если Ваше новое
ядро не грузится, (устройство не распознано или daemon не запускается, хотя и
должен бы), Вы можете просто ввести ``OldLinux
''
чтобы загрузиться со старым ядром и исследовать проблему.
Замечание: Как упомянуто выше, если Вы откомпилировали требуемое для загрузки системы свойство как модуль, Вы должны создать загрузочный образ RAMDISK, чтобы загрузить вашу систему. (Не забудьте откомпилировать Ваше ядро с поддержкой для такого образа начальной загрузки.) |
Процедура для создания и использования загрузочного образа RAMDISK:
Добавьте запись в файл ``
'' для загрузки с загрузочного (initial) образа RAMdisk; как показано ниже:/etc/lilo.conf
image=/boot/vmlinuz label=Linux root=/dev/hdb1 initrd=/boot/initrd-2.2.4-4.img read-only
<LISTYLE="list-style-type: Bullet">
-
Используйте команду ``
mkinitrd
'', чтобы создать образ:/sbin/mkinitrd /boot/initrd-2.0.36-3.img 2.0.36-3
Запустите ``
/sbin/lilo
'', чтобы обновить начальный загрузчик.
Устройство loopback должно быть загружено прежде, чем Вы сможете использовать команду mkinitrd. Загрузите модуль устройства loopback:
|
(Если Вы получаете сообщение об ошибках относительно невозможности
загрузить модуль loopback, попробуйте определить полный путь к модулю для
текущего ядра системы. Например:
``
''.)/lib/modules/2.0.35/loop
Вот и все, теперь перезагрузитесь с новым ядром!
|
Если ядро отказывается загружаться, не паникуйте. Загрузитесь с дискеты начальной загрузки, которая была создана в течение установки Linux. Если Вы не имеете копии этих дисков, Вы должны быть способны создать ее с Red Hat CD. Вставьте дискету в дисковод, загрузитесь с нее и на приглашение “boot :” введите:
|
Данная команда предполагает, что корневой раздел (“/” или root) находится на /dev/hda1.
Linux должен нормально загрузиться с дискеты. Конечно, данное ядро не
поддерживает специфических возможностей, так что часть аппаратуры, возможно,
не будет работать, но того, что есть хватит для устранения неполадки.
Восстановите старое ядро, переустановите LILO (то есть,
``mv /vmlinuz.old /vmlinuz ; /sbin/lilo
'') и
перезагрузитесь. Теперь можно попробовать перекомпилировать ядро с другими
опциями и повторить попытку. Замечание переводчика: если Вы предусмотрели в
настройке LILO запись для старого ядра, наберите
``OldLinux
'' при загрузке с жесткого диска, чтобы
загрузиться со старым ядром и исследовать проблему. Здесь дискеты не
понадобятся. Непонятно почему автор предусмотрел упоминание про эту
возможность выше, а здесь стал описывать загрузку с дискеты, будто нет
возможности загрузить старое ядро. Забыл, что ли?
Назад | Оглавление | Вперед |
Upgrading a Red Hat Stock Kernel | Локальное оглавление | Moving to the Linux 2.2.x Kernels |