英语

Kbuild

输出文件

modules.order

此文件记录模块在 Makefile 中出现的顺序。 modprobe 使用它来确定性地解析匹配多个模块的别名。

modules.builtin

此文件列出了所有构建到内核中的模块。 modprobe 使用它来避免在尝试加载内置模块时失败。

modules.builtin.modinfo

此文件包含构建到内核中的所有模块的 modinfo 信息。 与单独模块的 modinfo 不同,所有字段都以模块名称为前缀。

modules.builtin.ranges

此文件包含构建到内核中的所有模块的地址偏移范围(每个 ELF 段)。 结合 System.map,它可以用于将模块名称与符号相关联。

环境变量

KCPPFLAGS

预处理时要传递的附加选项。 预处理选项将用于 kbuild 进行预处理的所有情况,包括构建 C 文件和汇编文件。

KAFLAGS

汇编器的附加选项(用于内置和模块)。

AFLAGS_MODULE

模块的附加汇编器选项。

AFLAGS_KERNEL

内置模块的附加汇编器选项。

KCFLAGS

C 编译器的附加选项(用于内置模块和模块)。

KRUSTFLAGS

Rust 编译器的附加选项(用于内置模块和模块)。

CFLAGS_KERNEL

当使用 $(CC) 编译作为内置代码编译的代码时,要传递给 $(CC) 的附加选项。

CFLAGS_MODULE

用于 $(CC) 的附加模块特定选项。

RUSTFLAGS_KERNEL

当使用 $(RUSTC) 编译作为内置代码编译的代码时,要传递给 $(RUSTC) 的附加选项。

RUSTFLAGS_MODULE

用于 $(RUSTC) 的附加模块特定选项。

LDFLAGS_MODULE

链接模块时用于 $(LD) 的附加选项。

HOSTCFLAGS

构建主机程序时要传递给 $(HOSTCC) 的附加标志。

HOSTCXXFLAGS

构建主机程序时要传递给 $(HOSTCXX) 的附加标志。

HOSTRUSTFLAGS

构建主机程序时要传递给 $(HOSTRUSTC) 的附加标志。

PROCMACROLDFLAGS

链接 Rust proc 宏时要传递的标志。 由于 proc 宏在构建时由 rustc 加载,因此它们必须以与所使用的 rustc 工具链兼容的方式链接。

例如,当 rustc 使用与用户希望用于主机程序的 C 库不同的 C 库时,这可能很有用。

如果未设置,则默认为链接主机程序时传递的标志。

HOSTLDFLAGS

构建主机程序时要传递的附加标志。

HOSTLDLIBS

构建主机程序时要链接的附加库。

USERCFLAGS

编译 userprogs 时用于 $(CC) 的附加选项。

USERLDFLAGS

链接 userprogs 时用于 $(LD) 的附加选项。 userprogs 是使用 CC 链接的,因此 $(USERLDFLAGS) 应包含 “-Wl,” 前缀(如果适用)。

KBUILD_KCONFIG

将顶级 Kconfig 文件设置为此环境变量的值。 默认名称为 “Kconfig”。

KBUILD_VERBOSE

设置 kbuild 的详细程度。 可以分配与 “V=...” 相同的值。

有关完整列表,请参阅 make help。

设置 “V=...” 优先于 KBUILD_VERBOSE。

KBUILD_EXTMOD

设置在构建外部模块时查找内核源代码的目录。

设置 “M=...” 优先于 KBUILD_EXTMOD。

KBUILD_OUTPUT

指定构建内核时的输出目录。

当针对单独构建目录中预构建的内核构建外部模块时,此变量也可用于指向内核输出目录。 请注意,这不指定外部模块本身的输出目录。(为此,请使用 KBUILD_EXTMOD_OUTPUT。)

输出目录也可以使用 “O=...” 指定。

设置 “O=...” 优先于 KBUILD_OUTPUT。

KBUILD_EXTMOD_OUTPUT

指定外部模块的输出目录。

设置 “MO=...” 优先于 KBUILD_EXTMOD_OUTPUT。

KBUILD_EXTRA_WARN

指定额外的构建检查。 可以通过从命令行传递 W=... 来分配相同的值。

有关支持值的列表,请参阅make help

设置 “W=...” 优先于 KBUILD_EXTRA_WARN。

KBUILD_DEBARCH

对于 deb-pkg 目标,允许覆盖 deb-pkg 部署的正常启发式算法。 通常,deb-pkg 尝试根据 UTS_MACHINE 变量以及某些架构上的内核配置来猜测正确的架构。 KBUILD_DEBARCH 的值被假定(未检查)为有效的 Debian 架构。

KDOCFLAGS

指定构建期间内核文档检查的额外(警告/错误)标志,有关支持哪些标志,请参阅 scripts/kernel-doc。 请注意,这(目前)不适用于文档构建。

ARCH

将 ARCH 设置为要构建的架构。

在大多数情况下,架构的名称与 arch/ 目录中找到的目录名称相同。

但是,某些架构(例如 x86 和 sparc)具有别名。

  • x86: i386 表示 32 位,x86_64 表示 64 位

  • parisc: parisc64 表示 64 位

  • sparc: sparc32 表示 32 位,sparc64 表示 64 位

CROSS_COMPILE

指定 binutils 文件名的可选固定部分。 CROSS_COMPILE 可以是文件名的一部分或完整路径。

CROSS_COMPILE 也用于某些设置中的 ccache。

CF

sparse 的附加选项。

CF 通常在命令行上使用,如下所示

make CF=-Wbitwise C=2

INSTALL_PATH

INSTALL_PATH 指定将更新的内核和系统映射映像放置在何处。 默认为 /boot,但您可以将其设置为其他值。

INSTALLKERNEL

使用 “make install” 时调用的安装脚本。 默认名称为 “installkernel”。

将使用以下参数调用该脚本

  • $1 - 内核版本

  • $2 - 内核映像文件

  • $3 - 内核映射文件

  • $4 - 默认安装路径(如果为空,则使用根目录)

“make install” 的实现特定于架构,并且可能与上述有所不同。

提供 INSTALLKERNEL 以便在交叉编译内核时可以指定自定义安装程序。

MODLIB

指定将模块安装在何处。 默认值为

$(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)

该值可以被覆盖,在这种情况下,默认值将被忽略。

INSTALL_MOD_PATH

INSTALL_MOD_PATH 指定 MODLIB 的前缀,用于构建根所需的模块目录重定位。 这未在 Makefile 中定义,但如果需要,可以将参数传递给 make。

INSTALL_MOD_STRIP

如果定义了 INSTALL_MOD_STRIP,将导致模块在安装后被剥离。 如果 INSTALL_MOD_STRIP 为 “1”,则将使用默认选项 --strip-debug。 否则,INSTALL_MOD_STRIP 值将用作 strip 命令的选项。

INSTALL_HDR_PATH

INSTALL_HDR_PATH 指定执行 “make headers_*” 时安装用户空间头文件的位置。

默认值为

$(objtree)/usr

$(objtree) 是保存输出文件的目录。 输出目录通常使用命令行上的 “O=...” 设置。

该值可以被覆盖,在这种情况下,默认值将被忽略。

INSTALL_DTBS_PATH

INSTALL_DTBS_PATH 指定安装设备树 blob 的位置,用于构建根所需的重定位。 这未在 Makefile 中定义,但如果需要,可以将参数传递给 make。

KBUILD_ABS_SRCTREE

Kbuild 使用相对路径来指向树(如果可能)。 例如,在源代码树中构建时,源代码树路径为 “.”。

设置此标志会请求 Kbuild 使用源代码树的绝对路径。 在某些情况下,这样做很有用,例如,当生成带有绝对路径条目的标记文件等时。

KBUILD_SIGN_PIN

如果私钥需要密码或 PIN 码,则此变量允许将密码或 PIN 码传递给 sign-file 实用程序,以便在签署内核模块时使用。

KBUILD_MODPOST_WARN

可以设置 KBUILD_MODPOST_WARN 以避免在最终模块链接阶段出现未定义符号的错误。 它会将此类错误更改为警告。

KBUILD_MODPOST_NOFINAL

可以设置 KBUILD_MODPOST_NOFINAL 以跳过模块的最终链接。 这仅对于加速测试编译有用。

KBUILD_EXTRA_SYMBOLS

对于使用来自其他模块的符号的模块。 有关更多详细信息,请参见构建外部模块

ALLSOURCE_ARCHS

对于 tags/TAGS/cscope 目标,您可以指定要包含在数据库中的多个架构,并用空格分隔。 例如

$ make ALLSOURCE_ARCHS="x86 mips arm" tags

要获取所有可用的架构,您还可以指定 all。 例如

$ make ALLSOURCE_ARCHS=all tags

IGNORE_DIRS

对于 tags/TAGS/cscope 目标,您可以选择哪些目录不包含在数据库中,并用空格分隔。 例如

$ make IGNORE_DIRS="drivers/gpu/drm/radeon tools" cscope

KBUILD_BUILD_TIMESTAMP

将此设置为日期字符串会覆盖 UTS_VERSION 定义中使用的时间戳(运行内核中的 uname -v)。 该值必须是可以传递给 date -d 的字符串。 默认值是构建期间某个时刻的 date 命令的输出。

KBUILD_BUILD_USER, KBUILD_BUILD_HOST

这两个变量允许覆盖启动期间和 /proc/version 中显示的user@host字符串。 默认值分别是 whoami 和 host 命令的输出。

LLVM

如果此变量设置为 1,则 Kbuild 将使用 Clang 和 LLVM 实用程序而不是 GCC 和 GNU binutils 来构建内核。