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

Система Arch Build System может быть использована для создания собственного ядра на основе официального пакета Linux. Этот способ автоматизируест процесс компиляции, и основан на протестированных пакетах. Вы можете редактировать PKGBUILD для использования пользовательских настроек ядра или для добавления дополнительных патчей.

## Получение необходимых пакетов

    # 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')

Обратите внимание: Это предполагает, что вам не нужно перекомпилировать 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`

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

## Установка

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

    # pacman -U <kernel_package>

## Загрузчик

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

Categories:

- Kernel (Русский)
- Русский