Руководство по Gentoo Linux Genkernel
Tim Yamin
Author
Ilya Krets
Translator
Updated June 15, 20031. Вступление
Вступление
Genkernel написан для того, чтобы пользователи, не имеющие опыта по сборке ядра,
могли использовать установку подобную Gentoo LiveCD, которая автоматически определяет системное
оборудование.
Некоторые пользователи, вероятно, будут заинтересованы в использовании genkernel для устройств,
которым необходима инициализация и уже работающее ядро перед его загрузкой, поскольку genkernel также
автоматически компилирует модули ядра, тем самым позволяя использовать оборудование, которое
необходимо загружать с параметрами модулей.
Нужен ли мне genkernel?
Genkernel - это хороший выбор для тех, кто не имеет опыта сборки ядра собственноручно или
тех, кто не уверен в конфигурации своего компьютера.
Так как genkernel приспособлен для использования настроек общего характера, он должен поддерживать
любое из ваших устройств, однако, поскольку для этого необходимо скомпилировать все драйверы и модули,
самостоятельная сборка ядра обычно гораздо быстрее, если вы знаете, что вам нужно.
Genkernel сейчас не поддерживает загрузку системы с разделов типа LVM2/EVMS2. Если Вы используете
разделы такого типа, вам рекомендуется использовать вручную собранное ядро.
Получение genkernel
Вы можете установить genkernel, просто запустив команду emerge genkernel. Не забудьте
использовать для установки флаг -k, если Вы используете бинарные пакеты, то есть GRP.
Из-за того, что GRP пакеты включают более старые версии genkernel, возможности Вашей версии
genkernel может отличаться от приведенных в этом руководстве. Поэтому Вам следует посмотреть это:
Gentoo Handbook и genkernel --help.
Поддерживаемые платформы
Genkernel 3.0.2 поддерживает следующие платформы: alpha, amd64, parisc, parisc64,
ppc, ppc64, sparc, sparc64, and x86. Если вам кажется, что существует ошибка в
коде поддержки, а не в genkernel, пожалуйста оставьте описание ошибки на Gentoo Bugzilla.
2. Использование genkernel
Вступление
Genkernel может работать в трех режимах:
- режим "all" : собрирает как ядро, так и initrd
- режим "kernel": собирает только ядро
- режим "initrd": собирает только initrd
Большинству необходим только "all" режим, который запускает режимы "kernel" и "initrd".
Заметьте, что режимы "kernel" и "initrd" сейчас всего лишь псевдонимы для режима "all",
поэтому в текущей версии они никак не отразятся на работе программы.
Несмотря на то, что, в общем, genkernel - утилита, позволяющая упростить задачу компиляции ядра,
genkernel также включает в себя различные флаги, которые позволят вам задать
дополнительные настройки для сборки или конфигурирования ядра.
Флаги компиляции genkernel
Genkernel поддерживает следующие флаги, которые передаются соответствующим
приложениям при сборке ядра:
-
--kernel-as=ассемблер: задает ассемблер, который будет использован при сборке ядра.
-
--kernel-cc=компилятор: задает компилятор, который будет использован при сборке ядра.
-
--kernel-ld=линковщик: задает линковщик, который будет использован при сборке ядра.
-
--kernel-make=утилита make: задает альтернативную утилиту GNU Make, которая будет использована при сборке
ядра.
-
--utils-as=ассемблер: задает ассемблер, который будет использован при сборке утилит поддержки.
-
--utils-cc=компилятор: задает компилятор, который будет использован при сборке утилит поддержки.
-
--utils-ld=линковщик: задает линковщик, который будет использован при сборке утилит поддержки.
-
--utils-make=утилита make: задает альтернативную утилиту GNU Make, которая будет использована при сборке
ядра.
-
--makeopts=-jJobs: задает флаги, которые будут заданы GNU make, когда ядро и модули будут компилироваться.
Флаги ядра genkernel
Genkernel поддерживает следующие флаги (некоторые из них имеют --no-опция эквиваленты), которые влияют на
сборку ядра:
-
--callback="echo Hello": выполняет заданные
команды после того, как было собрано ядро и все связанные с ним модули,
но перед сборкой initrd. Это полезно, когда вы хотите установить
внешние модули в initrd, выполняя emerge через обратный вызов
(callback) и переопределяя группу модулей genkernel.
-
--no-clean: запускает или не запускает make clean перед сборкой ядра. Результатом этого будет
удаление всех объектых файлов и зависимостей.
-
--no-mrproper: запускает или не запускает make mrproper перед сборкой ядра. Результатом этого будет
удаление всех объектных файлов, зависимостей и вашей конфигурации.
-
--kerneldir=/путь/до/исходников: задает альтернативное расположение исходников ядра взамен стандартного
расположения в /usr/src/linux.
-
--kernel-config=/путь/до/конфигурации: задает альтернативную конфигурацию ядра для сборки вместо
/путь/до/исходников/.config, которая используется по умолчанию.
-
--no-bootsplash: добавляет или не добавляет поддержку bootsplash
в initrd, который собирает genkernel. Не все архитектуры сейчас поддерживают bootsplash, и для его использования
необходима также поддержка bootsplash на уровне ядра.
-
--no-menuconfig: запускает или не запускает конфигуратор ядра с использованием меню перед сборкой ядра,
после того как make oldconfig был выполнен.
-
--no-initrdmodules: не копировать модули в initrd, который создает genkernel.
-
--no-install: устанавливает или не устанавливает ваше ядро, модули и initrd по завершению процесса сборки.
Другие флаги genkernel
Genkernel также поддерживает несколько других флагов, которые не относятся к двум другим категориям:
-
--arch-override=архитектура: этот флаг используется для
переопределения вашей архитектуры для genkernel, если
автоопределение не удается (пожалуйста отправьте уведомление об ошибке, если
это так) или Вы хотите провести кросс-компиляция ядра для
платформы, отличной от той, с которой Вы запускаете genkernel.
-
--busybox-config=/путь/до/busybox-конфигурации: заменяет конфигурацию busybox по умолчанию на указанный
файл.
-
--busybox-bin=/путь/до/busybox-бинарника.tar.bz2: установка этой опции означает, что busybox бинарник не
будет скомпилирован, а использоваться будет указанный тарболл. Заметьте, что
busybox должен быть скомпилирован статически!
-
--minkernpackage=/вывод/в/вашеядро.tar.bz2: этот флаг
сохраняет тарболл ядра, названный kernel
и initrd, названный initrd в указанный файл. В тарболл не будет включены как модули, так и информация о пути.
Запуск genkernel
Все что нужно, чтобы запустить genkernel - это команда genkernel с необходимыми флагами под root. Например:
Code Listing 2.1: Запуск genkernel |
# genkernel --menuconfig --no-clean --no-install --bootsplash all
|
Если Вы хотите, чтобы genkernel также установил Ваше ядро, Вы должны
смонтировать ваш /boot раздел -
последние версии genkernel сделают это за вас автоматически, если переменная MOUNTBOOT в /etc/genkernel.conf
равна "yes".
Code Listing 2.2: Монтирование /boot вручную |
# mount /boot
# mount /dev/hda1 /boot
# mount /dev/sda1 /boot
|
Настройка genkernel для работы с bootloader
Чтобы настроить genkernel для работы с загрузчиком, в него (в загрузчик)
придется внести кое-каки, изменения.
-
Добавьте root=/dev/ram0 и init=/linuxrc в параметры ядра, передаваемые его образу.
-
Добавьте real_root=/dev/hda3, например, в параметры ядра, передаваемые его образу, где /dev/hda3
- устройство, которое содержит ваш корневой раздел.
-
Если Вы используете bootsplash, добавьте подходящую строчку, например vga=0x317, к параметрам, передаваемым ядру
и также добавьте splash=verbose или splash=silent в зависимости от желаемого уровня информативности bootsplash.
-
Добавьте initrd соответственно тому, как ваш bootloader требует этого: посмотрите Gentoo
Handbook для детальной информации о том, как сделать этого для вашего bootloader.
3. Портирование genkernel
Вступление
При том условии, что ваша архитектура имеет все необходимые библиотеки
и
утилиты, необходимые genkernel, включая работающее ядро для вашей
архитектуры, работающий комплект компилятора, GNU Make и работающий
дистрибутив busybox, вы готовы для портирования genkernel.
Для каждой архитектуры, genkernel использует /usr/share/genkernel/имяАрхитектуры для конфигурационных файлов.
Как работает начальная загрузка системы
-
Bootloader загружает образ ядра, собранный по конфигурационным спецификациям
из директорий genkernel, а так же initrd, подготовленный genkernel.
-
Ядро загружается, назначает небольшое количество RAM, в котором
инициализируется busybox, который пытается загрузить для санной системы
из списка modules_load.
-
После завершения, и при условии, что real_root параметр, который является загрузочным root устройством, был найден
busybox, система загружается с этого устройства.
Файлы настроек
-
busy-config: конфигурация, которая используется для сборки
busybox для вашей архитектуры.
-
config.sh: скрипт, который устанавливает различные внутренние переменные genkernel. Посмотрите один
из config.sh файлов для примера.
-
modules_load: файл, содержащий разделенный пробелами список модулей, которые загружаются для поддержки
SCSI, FireWire, ATARAID и PCMCIA. Если ни один не доступен для вашей платформы, оставьте файл пустым. Посмотрите один
из modules_load файлов для примера.
-
kernel-config: конфигурация ядра по умолчанию, используемая для любой версии ядра.
-
kernel-config-2.4: конфигурация ядра по умолчанию, используемая для ядер серии 2.4.
-
kernel-config-2.6: конфигурация ядра по умолчанию, используемая для ядер серии 2.6.
The contents of this document are licensed under the Creative Commons -
Attribution / Share Alike license.