Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ручная установка нового ядра

Пред. 

Глава 13. Компиляция и установка новых ядер

 След.


Ручная установка нового ядра

[Note]

Замечание

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

Ядро находится в arch/i386/boot/bzImage. Стандартный каталог, в который устанавливается ядро - /boot. Вам также необходимо скопировать файл System.map, чтобы обеспечить правильную работу некоторых программ (например, top). И опять же хорошая практика: давайте этим файлам имена по версии ядра. Допустим, что ваше ядро версии 2.6.8-foo. Последовательность ваших команд следующая:

$ cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.8-foo
$ cp System.map /boot/System.map-2.6.8-foo

Теперь вам необходимо сообщить начальному загрузчику о своем новом ядре. Существует два начальных загрузчика: GRUB или LILO. Учтите, что Mandrakelinux по умолчанию настроен на использование LILO.

Обновление LILO

Самым простой способ для обновления LILO - использование drakboot(смотрите главу в книге Стартовое руководство???). Или же вы можете вручную отредактировать файл конфигурации, как описано ниже.

Конфигурационный файл LILO - /etc/lilo.conf. Так выглядит типичный файл lilo.conf:

boot=/dev/hda
map=/boot/map
default="linux"
keytable=/boot/es-latin1.klt
prompt
nowarn
timeout=50
message=/boot/message
menu-scheme=wb:bw:wb:bw
image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        initrd=/boot/initrd.img
        append="devfs=mount resume=/dev/hda5"
        read-only
other=/dev/fd0
        label="floppy"
        unsafe

Файл lilo.conf состоит из главного раздела, после которого следуют разделы для каждой из операционных систем. В приведенном выше примере главный раздел состоит из следующих директив:

boot=/dev/hda
map=/boot/map
default="linux"
keytable=/boot/es-latin1.klt
prompt
nowarn
timeout=50
message=/boot/message
menu-scheme=wb:bw:wb:bw

Директива boot= сообщает LILO, куда установлен загрузочный сектор; в данном случае это MBR (Master Boot Record - главная загрузочная запись) на первом жестком диске IDE. Если вы хотите сделать загрузочную дискету с LILO, просто замените /dev/hda на /dev/fd0. Директива prompt заставляет LILO при запуске показывать меню. Т.к. установлен тайм-аут, LILO запустит образ по умолчанию через 5 секунд (timeout=50). Если вы удалите директиву timeout, LILO будет ждать до тех пор, пока вы не введете что-нибудь.

Далее следует раздел linux:

image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        initrd=/boot/initrd.img
        append="devfs=mount resume=/dev/hda5"
        read-only

Раздел для загрузки ядра GNU/Linux всегда начинается с директивы image=, после которой следует полный путь к действительному ядру GNU/Linux. Как и любой другой раздел он содержит директиву label= в качестве уникального идентификатора, здесь это linux. Директива root= сообщает LILO, на каком из разделов находится файловая система для этого ядра. Ваша конфигурация может быть другой... Директива read-only сообщает LILO, что при запуске корневая файловая система должна быть примонтирована в режиме только для чтения: если этой директивы здесь нет - вы получите сообщение с предупреждением. Строка append определяет опции, передаваемые ядру во время загрузки.

Затем следует раздел для дискеты:

other=/dev/fd0
        label="floppy"
        unsafe

В действительности раздел, начинающийся с other=, используется LILO для запуска любой операционной системы, отличной от GNU/Linux: аргумент этой директивы определяет местонахождение загрузочного сектора этой системы, и в данном случае это загрузка с дискеты.

Ну что ж, теперь настало время добавить раздел для нашего нового ядра. Вы можете поместить этот раздел куда угодно после главного раздела, но не помещайте его внутрь другого раздела. Вот как это должно выглядеть:

image=/boot/vmlinuz-2.6.8-foo
        label="foo"
        root=/dev/hda1
        read-only
        append="devfs=mount resume=/dev/hda5"

Лишний раз напомним: настройте пункт согласно конфигурации своей системы.

Итак, вот как будет выглядеть наш /etc/lilo.conf после внесения изменений, снабженный несколькими дополнительными комментариями (все строки, начинающиеся с #), которые будут проигнорированы программой LILO:

#
# Главный раздел
#
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
# Что будет загружено по умолчанию. Давайте укажем здесь наше новое ядро:
default="foo"
# Выводим на экран приглашение...
prompt
# ... ожидаем 5 секунд
timeout=50
#
# Наше новое ядро: образ по умолчанию
#
image=/boot/vmlinuz-2.6.8-foo
        label="foo"
        root=/dev/hda1
        read-only
        append="devfs=mount resume=/dev/hda5"
#
# Оригинальное ядро
#
image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        read-only
        append="devfs=mount resume=/dev/hda5"
#
# Раздел для дискеты
#
other=/dev/floppy
        label="floppy"
        unsafe

Было бы неплохо, чтобы так выглядел ваш файл /etc/lilo.conf... но, опять же, не забудьте настроить его согласно своей собственной конфигурации.

Теперь, когда файл соответствующим образом был изменен, но, в отличие от GRUB, который в этом не нуждается, вы должны сообщить LILO, чтобы тот изменил загрузочный сектор:

$ lilo
Added foo *
Added linux
Added floppy
$

Таким образом, вы можете откомпилировать сколько угодно ядер, добавив нужное количество разделов. Все, что вам нужно теперь сделать - перезагрузить свою машину и протестировать новое ядро. Заметьте, что если LILO при установке показывает какие-либо ошибки, это означает, что никакие изменения не были сделаны. LILO изменят вашу конфигурацию только, если в процессе не возникает никаких ошибок.

Обновление Grub

Понятное дело, что нужно сохранить возможность загрузки вашего текущего ядра! Самым простым способом обновления GRUB является использование drakboot (смотрите главу Изменение загрузочной конфигурации в книге Стартовое руководство???). Или же вы можете вручную отредактировать файл конфигурации, как описано ниже.

Вам нужно отредактировать файл /boot/grub/menu.lst. Так выглядит типичный файл menu.lst после установки вашего дистрибутива Mandrakelinux и до внесения изменений:

timeout 5
color black/cyan yellow/cyan
i18n (hd0,4)/boot/grub/messages
keytable (hd0,4)/boot/fr-latin1.klt
default 0

title linux
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5  

title failsafe
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5  failsafe 

title Windows
root (hd0,0)
makeactive
chainloader  +1 

title floppy
root (fd0)
chainloader +1

Этот файл состоит из двух частей: заголовка с общими параметрами (первые пять строк), и образов, каждый из которых соответствует различному ядру GNU/Linux или другой ОС. timeout 5 определяет время (в секундах), в течение которого GRUB ожидает ввода данных перед тем, как автоматически загрузить образ по умолчанию (он определяется директивой default 0 в общих параметрах, т.е. в данном случае первый образ). Директива keytable (если она присутствует) определяет, где найти раскладку вашей клавиатуры. В этом примере это французская раскладка. Для русской раскладки можно установить, например, keytable (hd0,4)/boot/ru4.klt. Если не определена ни одна из раскладок, под клавиатурой будет подразумеваться простая клавиатурой QWERTY. Все видимые вами hd(x,y) ссылаются на раздел под номером y на диске под номером x (как видит их BIOS).

Затем следуют различные образы. В этом примере определено четыре образа: linux, failsafe, windows и floppy.

  • Раздел linux начинается с сообщения GRUB'у о загружаемом ядре (kernel hd(0,4)/boot/vmlinuz), после него следуют опции, передающиеся ядру.В данном случае root=/dev/hda5 сообщит ядру, что корневая файловая система находится на /dev/hda5. В действительности /dev/hda5 - это эквивалент hd(0,4) для GRUB, но никто не запрещает ядру находиться на другом разделе, отличающемся от содержащего корневую файловую систему;
  • Раздел failsafe очень похож на предыдущий за тем исключением, что мы передадим ядру аргумент (failsafe), который сообщит ему перейти в «однопользовательский» режим или режим «спасения»;
  • Раздел windows сообщает GRUB'у просто загрузить загрузочный сектор первого раздела, который, возможно, содержит загрузочный сектор Windows®;
  • Раздел floppy просто загружает вашу систему с дискеты в первом дисководе, какая бы система на ней не была установлена. Это может быть загрузочный диск Windows® или даже ядро GNU/Linux на дискете;

[Note]

Замечание

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

Теперь к делу. Нам нужно добавить новый раздел, чтобы сообщить GRUB'у новом ядре. В этом примере мы он будет размещен перед другими разделами, но ничто не мешает вам поместить его куда-нибудь в другое место:

title foo
kernel (hd0,4)/boot/vmlinuz-2.6.8-foo root=/dev/hda5

Не забудьте настроить файл согласно вашей конфигурации! Здесь корневая файловая система GNU/Linux - /dev/hda5, но в вашей системе она может быть и где-нибудь в другом месте.

Ну вот и все. В отличии от LILO, как мы увидим ниже, больше ничего делать не надо. Просто перезагрузите свой компьютер и вы увидите свою, только что добавленную, запись. Просто выберите ее из меню, и будет загружено ваше новое ядро.

Если вы скомпилировали ядро с поддержкой видеобуфера, вы, вероятно, захотите его задействовать: в этом случае вам нужно добавить директиву для ядра, которая сообщит ему, с каким разрешением вы хотите загрузиться. Список режимов доступен в файле /usr/src/linux/Documentation/fb/vesafb.txt (но только в случае видеобуфера VESA! Иначе обратитесь к соответствующему файлу). Для режима 800x600 в 32 бита[36] номер режима равен 0x315, поэтому вам нужно добавить следующую директиву:

vga=0x315

и ваша запись теперь станет похожей на:

title foo
kernel (hd0,4)/boot/vmlinuz-2.6.8-foo root=/dev/hda5 vga=0x315

Для получения дополнительной информации обратитесь, пожалуйста, к информационным страницам о GRUB (info grub).



[36] 8 бит означает 28 цветов, т.е. 256; 16 бит означает 216 цветов, т.е. 64k или 65536; в 24 битах, как и в 32 битах, цвет закодирован в 24 битах, т.е. 224 возможных цветов, другими словами точно 16M или чуть больше 16 миллионов.


Пред. 

Уровень выше

 След.

Компиляция ядра и модулей, установка зверя 

Начало

 Приложение A. Глоссарий