Построение специального ядра
Если Вы используете Linux с необычной аппаратурой, нуждаетесь в возможностях, которых нет в стандартных ядрах системы или хотите уменьшить память, отдаваемую ядром тем возможностям, которыми Вы все равно не пользуетесь, создайте специально настроенное ядро.
Обновление ядра включает конфигурирование желательных модулей, компиляцию ядра и модулей, и в заключение установку образа ядра. Это сопровождается перезагрузкой системы, чтобы загрузить новое ядро. Все это описано в файле ``README'', поставляемом с каждым пакетом ядра. Дальнейшая информация может быть найдена в подкаталоге ``Documentation/''. Особенно полезный файл там ``
Configure.help'', который содержит детализированную информацию относительно доступного ядра, параметров компиляции и модулей.
Далее приводится пример построения заказного ядра версии 2.0.36 для платформы Intel. При формировании заказного ядра обычно происходит только конфигурирование, компиляция и установка, но иногда (обычно в случае новых аппаратных средств) необходимо загрузить дополнительное программное обеспечение (драйвер), если аппаратные средства еще не поддерживаются версией ядра, которую Вы компилируете.
Первый шаг в формирование заказного ядра: скачать и поставить исходный текст ядра из RPM (рекмендуется) или из tarball. См. в разделе Обновление ядра Linux подробности о том, какие файлы нужны и где их взять.
Теперь утилитой ``rpm'' (или ``tar'') поставьте дерево исходников ядра и файлы заголовков. Например, для установки ядра 2.0.36-3 из RPM:
rpm -Uvh kernel-source-2.0.36-3.i386.rpm kernel-headers-2.0.36-3.i386.rpm rpm -Uvh kernel-ibcs-2.0.36-3.i386.rpm |
(Если Linux используется на notebook, Вам также нужен файл ``kernel-pcmcia-cs-2.0.36-3.i386.rpm '', который поддерживает функции управления питанием.)
После установки файлов ядра, Вы должны быть способны найти новое дерево исходников в каталоге ``
/usr/src/linux/''.
Следующий шаг: надо скачать все дополнительные файлы драйверов (если они нужны) и установить их в новое ядерное исходное дерево. Например, чтобы добавить поддержку для Mylex DAC960 (аппаратный контроллер RAID) я загрузил драйвер с сайта
http://www.dandelion.com. К сожалению, такое программное обеспечение предлагается обычно только как tarballs, так что ставьте с использованием утилиты ``tar''. Например:
cd /usr/src/ tar zxvpf DAC960-2.0.0-Beta4.tar.gz |
README'', который поясняет как разместить скачанные файлы и применить патч ядра:
mv README.DAC960 DAC960.[ch] /usr/src/linux/drivers/block patch -p0 < DAC960.patch |
mail:/usr/src# cd /usr/include mail:/usr/include# rm -rf asm linux scsi mail:/usr/include# ln -s /usr/src/linux/include/asm-i386 asm mail:/usr/include# ln -s /usr/src/linux/include/linux linux mail:/usr/include# ln -s /usr/src/linux/include/scsi scsi |
Замечание: данный шаг больше не нужен для ядер версии 2.2.x или выше. |
Надо разобраться в том, что Вам нужно в системе, какие возможности должны поддерживаться, какое оборудование имеется. После нескольких попыток настройки ядра, процесс станет очень понятным и знакомым. Это в первый раз трудно, потом привыкнете!
Наберите следующее для запуска процесса настройки:
mail:/usr/include# cd /usr/src/linux mail:/usr/src/linux# make mrproper mail:/usr/src/linux# make menuconfig |
Чтобы конфигурировать ваше ядро, пройдите различные параметры настройки, разрешите те, которые нужны, и снимите выделение (отключите) с тех, которые не нужны. Вы можете выбирать между наличием поддержки некоторого свойства, встроенной в ядро, и наличием ее как модуля, который загружается и выгружается ядром когда необходимо. (Если Вы компилируете свойство, которое фактически необходимо, чтобы загружать систему, типа SCSI драйвера, как модуль, Вы будете должны создать образ RAMDISK, или система не будет загружаться. Это делается командой ``mkinitrd''; эта процедура описана немного позже.)
При прохождении параметров настройки конфигурации, Вы можете выбрать <Help> для описания того, зачем нужна данная опция ядра.
После того, как Вы сконфигурировали ваши ядерные параметры настройки, введите следующие команды, чтобы откомпилировать ядро:
mail:/usr/src/linux# make dep ; make clean mail:/usr/src/linux# make bzImage mail:/usr/src/linux# make modules |
mail:/usr/src/linux# mv /lib/modules/2.0.36-3 /lib/modules/2.0.36-3-backup |
mail:/usr/src/linux# make modules_install |
mail:/usr/src/linux# cd /boot mail:/boot# cp vmlinuz vmlinuz.OLD mail:/boot# cp /usr/src/linux/arch/i386/boot/bzImage vmlinuz-2.0.36 mail:/boot# /sbin/lilo |
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 |
Замечание: Как упомянуто выше, если Вы откомпилировали требуемое для загрузки системы свойство как модуль, Вы должны создать загрузочный образ RAMDISK, чтобы загрузить вашу систему. (Не забудьте откомпилировать Ваше ядро с поддержкой для такого образа начальной загрузки.) |
Процедура для создания и использования загрузочного образа RAMDISK:
Добавьте запись в файл ``/etc/lilo.conf'' для загрузки с загрузочного (initial) образа RAMdisk; как показано ниже:image=/boot/vmlinuz label=Linux root=/dev/hdb1 initrd=/boot/initrd-2.2.4-4.img read-only
Устройство loopback должно быть загружено прежде, чем Вы сможете использовать команду mkinitrd. Загрузите модуль устройства loopback:
/sbin/insmod loop |
''.)
Используйте команду ``mkinitrd'', чтобы создать образ:
/sbin/mkinitrd /boot/initrd-2.0.36-3.img 2.0.36-3 |
Запустите ``
/sbin/lilo'', чтобы обновить начальный загрузчик.
Вот и все, теперь перезагрузитесь с новым ядром!
mail:/boot# /sbin/shutdown -r now |
mount 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 |