Custom Kernel Compilation with ABS (Русский)

From ArchWiki
Jump to: navigation, search

Система 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')
Note: Это предполагает, что вам не нужно перекомпилировать linux-headers, -manpages или -docs. Если нужно, тогда измените все три строки соответственно.

Теперь все переменные вашего пакета будут изменены в соответствии с новым именем. Например, после установки этого пакета модули будут расположены в /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"
...
}

Компиляция

Tip: Одновременный запуск процессов компиляции может значительно сократить время компиляции на многоядерных системах.

Теперь можно приступить к компиляции ядра обычной командой makepkg


Note: Ядру нужно время чтобы скомпилироваться. Компиляция в течение 1 часа это вполне нормально.


Установка

После makepkg, вы можете посмотреть на файл linux.install. Вы увидите, что некоторые переменные изменились. Теперь, вы должны, как обычно, установить пакет с помощью pacman (или эквивалентной программы):

# pacman -U <kernel_package>

Загрузчик

Теперь, папки и файлы для вашего собственного ядра были созданы, например, /boot/vmlinuz-linux-test. Для проверки вашего ядра, обновите свой загрузчик (/boot/grub/menu.lst для GRUB) и добавьте новые записи ('default' and 'fallback') для вашего собственного ядра. Таким образом, вы можете паралельно иметь и основное и ваше настроенное ядро.