Kernels/Compilation/Arch Build System (简体中文)
Arch Build System 可以用来在官方的 linux 包基础上编译一个自定义内核。这种编译方法可以自动化整个过程,并且是基于一个已经经过详细测试过的内核包。你可以编辑 PKGBUILD 来使用一个自定义内核配置或者添加附加的补丁。
Contents
获取所需内容
# 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,然后装入自己的配置文件。这样可以避免我遇到过的其他方法中的内核命名问题。
编译
现在可以用命令编译内核了:
makepkg
如果配置时选择了交互编译(例如 menuconfig),编译时需要进行配置。
安装
在 makepkg 后可以查看 linux.install 文件,你会看到一些变量已经改变。现在,你只需要通过 pacman(或其他程序)正常安装软件包了:
# pacman -U <kernel_package>
启动加载器
现在已经创建了定制的内核和目录,例如 /boot/vmlinuz-linux-test
。要测试内核,请更新启动加载器(GRUB 为 /boot/grub/menu.lst
),为定制内核添加新入口('default' 和 'fallback')。这样,就可以并行使用系统内核和定制内核。