Библиотека сайта rus-linux.net
Ручная установка нового ядра |
||
---|---|---|
Глава 13. Компиляция и установка новых ядер |
Ручная установка нового ядра
-
Замечание
Процедуры в этом разделе применимы к архитектуре 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 будет ждать до тех пор, пока вы не введете что-нибудь.
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 на дискете;
-
Замечание
В зависимости от уровня безопасности, который вы используете в своей системе, некоторые описанные здесь разделы могут отсутствовать в вашем файле.
Теперь к делу. Нам нужно добавить новый раздел, чтобы сообщить 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. Глоссарий |