Я после установки пакета с ядром решился сразу запустить скрипт /sbin/installkernel. Скрипт завис, его пришлось снимать комбинацией клавиш ‹Ctrl›+‹C›. Тогда я стал разбираться с тем, что делает этот скрипт. Вот его полный текст:
#------------------- начало скрипта ------------------
#! /bin/sh
# /sbin/installkernel — written by tyson@rwii.com
#
INSTALL_PATH=/boot
KERNEL_VERSION=$1
BOOTIMAGE=$2
MAPFILE=$3
if [ -f $INSTALL_PATH/vmlinuz-$KERNEL_VERSION ]; then
mv $INSTALL_PATH/vmlinuz-$KERNEL_VERSION \
$INSTALL_PATH/vmlinuz.old;
fi
if [ -f $INSTALL_PATH/System.map-$KERNEL_VERSION ]; then
mv $INSTALL_PATH/System.map-$KERNEL_VERSION \
$INSTALL_PATH/System.map.old;
fi
cat $BOOTIMAGE > $INSTALL_PATH/vmlinuz-$KERNEL_VERSION
cp $MAPFILE $INSTALL_PATH/System.map-$KERNEL_VERSION
ln -fs vmlinuz-$KERNEL_VERSION $INSTALL_PATH/vmlinuz
ln -fs System.map-$KERNEL_VERSION $INSTALL_PATH/System.map
if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
#------------------- конец скрипта ------------------
Как видите, скрипту требуются некоторые параметры, а я запускал его без аргументов. Однако, поскольку программа rpm уже разместила в /boot файлы vmlinux-2.2.16-1, vmlinuz-2.2.16-1 и System.map-2.2.16-1, а также создала ссылки с именами vmlinuz и System.map, я решил, что осталось только перезапустить lilo. Но прежде чем запускать lilo, я подредактировал файл /etc/lilo.conf, добавив туда секцию с указанием на ядро 2.2.16 (просто скопировал секцию с меткой linux, после чего подправил строки image и label). Причем новую секцию поставил первой. Вот что у меня получилось (добавленные мной строки выделены жирным шрифтом):
#------------------- начало файла /etc/lilo.conf -----------
boot=/dev/hdb1
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.16-1
label=linux-2.2.16
root=/dev/hdb1
read-only
image=/boot/vmlinuz-2.2.11-4bc
label=linux
root=/dev/hdb1
read-only
other=/dev/hda1
label=dos
table=/dev/hda
#------------------- конец файла /etc/lilo.conf ------------
Обратите внимание на то, что в данном случае Linux грузится со второго диска, поскольку на первом диске стоит Windows NT, и в качестве загрузчика используется NT Loader.
После этого я запустил команду /sbin/lilo, причем вначале с параметрами -t -v, чтобы посмотреть, что она будет делать, а только потом уже - без параметров, для реального исполнения. Когда команда отработала, я перезагрузился, однако на этапе загрузки система зависла, выведя строку LIL-. Пришлось воспользоваться загрузочной дискетой (заготовленной еще при установке системы) и выполнить команду
[root]# dd if=/dev/hdb1 of=/mnt/hda1/bootsect.lnx bs=512 count=1
Все правильно, команда lilo меняет загрузочный сектор, а я забыл "подсунуть" загрузчику его обновленный вариант.
Еще раз перезагружаюсь, и с радостью вижу сообщение о том, что загрузилось ядро 2.2.16-1.
Если у вас LILO является основным загрузчиком (установлен в MBR первого диска), то последнюю операцию (копирование загрузочного сектора в файл) выполнять, конечно, не нужно.
17.4. О компиляции нового ядра
17.4.1 Зачем вообще нужно компилировать ядро?
Как было сказано в начале данного раздела, основная функция ядра состоит в том, чтобы обеспечить взаимодействие с аппаратурой компьютера. Обслуживание некоторых составляющих аппаратного обеспечения (таких, как память, например) напрямую встроено в ядро. Для тех частей аппаратуры, которые могут быть нестандартными, имеются драйверы устройств, которые обеспечивают взаимодействие ОС с аппаратурой. Большинство пользователей компьютеров с ОС Windows знакомы с понятием драйвера хотя бы потому, что после установки нового оборудования они вынуждены устанавливать и программные драйверы для этого оборудования. Только после этого становится возможным использовать вновь установленную аппаратную составляющую. В терминологии, принятой в Linux, драйвера называются "модулями". Таким образом, поддержка аппаратных устройств может быть обеспечена двумя способами: либо путем встраивания такой поддержки в ядро, либо путем использования соответствующего модуля (драйвера).
Компании, которые выпускают дистрибутивы Linux (такие как RedHat, Caldera, Debian и т. д.) вынуждены встраивать в ядро поддержку как можно более широкого спектра устройств, потому что они не могут заранее знать, какие устройства (модели устройств) будут установлены на компьютере конкретного пользователя. Поддержка в ядре широкого спектра устройств облегчает установку и поддержку системы для покупателей, избавляя их от ненужных сложностей.
Читать дальше