Custom Kernel Compilation with ABS (Русский)
Система Arch Build System может быть использована для создания собственного ядра на основе официального пакета Linux. Этот способ автоматизируест процесс компиляции, и основан на протестированных пакетах. Вы можете редактировать PKGBUILD для использования пользовательских настроек ядра или для добавления дополнительных патчей.
Contents |
Получение необходимых пакетов
# pacman -S abs base-devel
Прежде всего, вам нужно чистое ядро, чтобы начать настройку. Выберите файлы пакетов ядра с ABS:
$ ABSROOT=. abs core/linux
Затем, получите все остальные файлы, которые вам потребуются (например, пользовательские файлы конфигурации, патчи и т.д.) из соответствующих источников.
Редактирование PKGBUILD
Отредактируйте PKGBUILD официального пакета linux.
Изменение pkgname
Первые строки должны выглядеть вот так:
PKGBUILD
# $Id: PKGBUILD 130991 2011-07-09 12:23:51Z thomas $
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
# Maintainer: Thomas Baechler <thomas@archlinux.org>
pkgbase=linux
pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel
# pkgname=linux-custom # Build kernel with a different name
_kernelname=${pkgname#linux}
...
Как вы видите, здесь закомментированная строка для сборки ядра с другим именем. Все что вам нужно сделать, так это раскомментировать эту строку, изменить суффикс 'custom' на ту, что вам нужна. Если вы хотите иметь два ядра (ARCH и test), вам нужно отключить секцию conflicts. Файлы linux.install и linux.preset нужно изменить на Linux-custom.install и Linux-custom.preset. Ваши файлы должны выглядеть так:
PKGBUILD
...
#pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel
pkgname=linux-test # Build kernel with a different name
...
#next lines give you problems with nvidia drivers which depend on kernel
#provides=('kernel26')
#conflicts=('kernel26')
#replaces=('kernel26')
Теперь все переменные вашего пакета будут изменены в соответствии с новым именем. Например, после установки этого пакета модули будут расположены в
/usr/lib/modules/<kernel_release>-test/.
Изменение build()
Вероятно вам потребуется изменённый .config файл для вашего ядра. Вы можете раскомментировать один из возможных вариантов build() функции в PKGBUILD, например:
PKGBUILD
... # load configuration # Configure the kernel. Replace the line below with one of your choice. #make menuconfig # CLI menu for configuration make nconfig # new CLI menu for configuration #make xconfig # X-based configuration #make oldconfig # using old config from previous kernel version # ... or manually edit .config ...
Если у вас уже есть файл конфигурации ядра, я предлагаю раскомментировать инструмент конфигурации nconfig, и загрузить ваш конфиг оттуда. Это позволит избежать проблем с названиями ядер, которые могут быть при использовании других методов.
Изменение функции package_linux()
Теперь вы можете написать пользовательские функции, чтобы рассказать своей системе, как установить пакет. Проще всего это сделать, изменив имя функции package_linux() на package_linux-test(), и адаптации инструкций для ваших потребностей. Если у вас нет конкретных потребностей, ваш package_linux-test () должен выглядеть так:
PKGBUILD
...
package_linux-test() {
pkgdesc="The Linux Kernel and modules"
...
}
Компиляция
Теперь можно приступить к компиляции ядра обычной командой
makepkg
Установка
После makepkg, вы можете посмотреть на файл linux.install. Вы увидите, что некоторые переменные изменились. Теперь, вы должны, как обычно, установить пакет с помощью pacman (или эквивалентной программы):
# pacman -U <kernel_package>
Загрузчик
Теперь, папки и файлы для вашего собственного ядра были созданы, например, /boot/vmlinuz-linux-test. Для проверки вашего ядра, обновите свой загрузчик (/boot/grub/menu.lst для GRUB) и добавьте новые записи ('default' and 'fallback') для вашего собственного ядра. Таким образом, вы можете паралельно иметь и основное и ваше настроенное ядро.