Kbuilder

出自 ArchWiki

kbuilder 是一个 bash 脚本,允许您在本地使用您自己的可选补丁和配置,以不同的软件包名称构建四个官方支持的内核之一。

例如,您可以获取 linux-lts 内核的源代码,应用一个为英特尔处理器优化内核的补丁,并将该内核安装为 linux-lts-intel-optimized

安装

可以使用以下方法获取 kbuilder

构建内核

要获取默认的 vanilla linux 内核源代码,并使用默认名称 linux-kbuilder-custom 构建软件包

$ kbuilder build
注意: 构建目录是 ~/.kbuilder/cache

在构建过程中,kbuilder 会将一个 bash shell 注入到 PKGBUILD 中。shell 将在调用 build() 之前运行,允许您添加任何补丁或以交互方式更改内核配置。一旦您退出 shell,构建将继续。

要安装构建的软件包

$ kbuilder install

构建变量

虽然 kbuilder 没有配置文件,但您可以使用环境变量来控制构建过程。

  • KBUILDER_SOURCE_PKG 应设置为 'linux'、'linux-lts'、'linux-zen' 或 'linux-hardened'。kbuilder 将获取并构建使用此变量指定的内核。默认为 'linux'。有关官方内核的更多信息,请参阅kernel
注意: 在一个内核上工作的补丁不一定在另一个内核上工作。
  • KBUILDER_PKG_NAME_APPEND 可以设置为任何字符串。它将附加到内核版本和内核包的末尾。默认为 'kbuilder-custom'。
  • KBUILDER_BUILD_JOBS 应设置为整数。kbuilder 将把 PKGBUILD 中的 make all 行替换为 make -jX all,其中 X 是指定的整数。

使用示例

$ KBUILDER_BUILD_JOBS=4 KBUILDER_PKG_NAME_APPEND="my-custom-patch" KBUILDER_SOURCE_PKG="linux-zen" kbuilder build

钩子

kbuilder 在 /etc/kbuilder/hooks/ 中查找钩子,并使用 run-parts 在调用 build() 之前执行它们。run-parts 命令使用标志 --regex "kbuilder-hook-*" 执行。

一个示例钩子

/etc/kbuilder/hooks/05-kbuilder-hook-cpu-optimize.sh
#!/bin/bash
#
# kbuilder hook for applying graysky2's kernel compiler patch:
# https://github.com/graysky2/kernel_compiler_patch
#

SOURCE="https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master"
PATCH="more-uarches-for-kernel-5.17+.patch"
HOOK_NAME="cpu-optimize-hook"

curl -o $PATCH $SOURCE/$PATCH || { echo "$HOOK_NAME failed when fetching $PATCH from $SOURCE" ; exit 1 ; }
patch -Np1 -i "$PATCH" || { echo "$HOOK_NAME failed when applying $PATCH" ; exit 1 ; }

要创建钩子,创建并使文件可执行,文件名遵循 xx-kbuilder-hook-hookname 形式:它们将按照 xx 值顺序运行。

参见