# Kernels/Compilation/Arch Build System (简体中文)

翻译状态： 本文是英文页面 Kernels/Compilation/Arch_Build_System 的翻译，最后翻译时间：2012-10-07，点击这里可以查看翻译后英文页面的改动。

Arch Build System 可以用来在官方的 linux 包基础上编译一个自定义内核。这种编译方法可以自动化整个过程，并且是基于一个已经经过详细测试过的内核包。你可以编辑 PKGBUILD 来使用一个自定义内核配置或者添加附加的补丁。

## 获取所需内容

    # pacman -S abs base-devel

首先，需要一个干净的内核作为开始。从 ABS 获取内核包：

    $ ABSROOT=. abs core/linux

然后从相应的来源获取其他需要的文件 (例如自定义配置文件、补丁等)。

## 修改 PKGBUILD

修改`pkgbase`为自定义软件包的名称，例如:

     pkgbase=linux-custom

如果不需要重新编译 linux-headers 和 -docs，请从`pkgname`中删除:

     pkgname=("${pkgbase}")

### 修改 build()

可能需要内核的自定义 .config 文件，只需在 PKGBUILD 文件的 build() 函数中取消相应行的注释。例如：

    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，然后装入自己的配置文件。这样可以避免我遇到过的其他方法中的内核命名问题。

注意: 如果取消 return 1 的注释，可以在 makepkg 完成解压后进入内核代码目录然后 make nconfig。这样可以在多个会话间配置内核。可以编译时，用 .config 文件覆盖 config 或 config.x86_64(根据相应的架构)，然后注释掉 return 1 并使用makepkg -i。 但是不要对自定义补丁使用这种方法，把你的补丁命令放在这行之后。如果你要手动补丁，bztar 解包然后替换你的补丁。

## 编译

小贴士: 同时运行多个编译任务可以在多核系统上显著减少编译时间。

现在可以用命令编译内核了： `makepkg`

如果配置时选择了交互编译(例如 menuconfig)，编译时需要进行配置。

注意: 编译内核需要一些时间，一个小时也是正常的。

## 安装

在 makepkg 后可以查看 linux.install 文件，你会看到一些变量已经改变。现在，你只需要通过 pacman(或其他程序)正常安装软件包了：

    # pacman -U <kernel_package>

## 启动加载器

现在已经创建了定制的内核和目录，例如 `/boot/vmlinuz-linux-test`。要测试内核，请更新启动加载器(GRUB 为 `/boot/grub/menu.lst` )，为定制内核添加新入口('default' 和 'fallback')。这样，就可以并行使用系统内核和定制内核。

Categories:

- Kernel (简体中文)
- 简体中文