|
| 1 | +.. SPDX-License-Identifier: GPL-2.0 |
| 2 | +
|
| 3 | +.. include:: ../disclaimer-zh_CN.rst |
| 4 | + |
| 5 | +:Original: Documentation/kbuild/kbuild.rst |
| 6 | +:Translator: 慕冬亮 Dongliang Mu < [email protected]> |
| 7 | + |
| 8 | +====== |
| 9 | +Kbuild |
| 10 | +====== |
| 11 | + |
| 12 | + |
| 13 | +输出文件 |
| 14 | +======== |
| 15 | + |
| 16 | +modules.order |
| 17 | +------------- |
| 18 | +该文件记录模块在 Makefile 中出现的顺序。modprobe 使用该文件来确定性 |
| 19 | +解析匹配多个模块的别名。 |
| 20 | + |
| 21 | +modules.builtin |
| 22 | +--------------- |
| 23 | +该文件列出了所有内置到内核中的模块。modprobe 使用该文件来避免尝试加载 |
| 24 | +内置模块时出错。 |
| 25 | + |
| 26 | +modules.builtin.modinfo |
| 27 | +----------------------- |
| 28 | +该文件包含所有内置模块的 modinfo。与单独模块的 modinfo 不同,所有字段 |
| 29 | +都带有模块名称前缀。 |
| 30 | + |
| 31 | +modules.builtin.ranges |
| 32 | +---------------------- |
| 33 | +该文件包含所有内核内置模块的地址偏移范围(每个 ELF 节)。结合 System.map |
| 34 | +文件,它可以用来将模块名称与符号关联起来。 |
| 35 | + |
| 36 | +环境变量 |
| 37 | +======== |
| 38 | + |
| 39 | +KCPPFLAGS |
| 40 | +--------- |
| 41 | +在预处理时传递的额外选项。kbuild 进行所有预处理(包括构建 C 文件和汇编文件) |
| 42 | +时,都会使用这些预处理选项。 |
| 43 | + |
| 44 | +KAFLAGS |
| 45 | +------- |
| 46 | +传递给汇编器的额外选项(适用于内置模块和外部模块)。 |
| 47 | + |
| 48 | +AFLAGS_MODULE |
| 49 | +------------- |
| 50 | +外部模块的额外汇编选项。 |
| 51 | + |
| 52 | +AFLAGS_KERNEL |
| 53 | +------------- |
| 54 | +内置模块的额外汇编选项。 |
| 55 | + |
| 56 | +KCFLAGS |
| 57 | +------- |
| 58 | +传递给 C 编译器的额外选项(适用于内置模块和外部模块)。 |
| 59 | + |
| 60 | +KRUSTFLAGS |
| 61 | +---------- |
| 62 | +传递给 Rust 编译器的额外选项(适用于内置模块和外部模块)。 |
| 63 | + |
| 64 | +CFLAGS_KERNEL |
| 65 | +------------- |
| 66 | +在编译内置代码时,传递给 $(CC) 的额外选项。 |
| 67 | + |
| 68 | +CFLAGS_MODULE |
| 69 | +------------- |
| 70 | +编译外部模块时,传递给 $(CC) 的额外模块特定选项。 |
| 71 | + |
| 72 | +RUSTFLAGS_KERNEL |
| 73 | +---------------- |
| 74 | +在编译内置代码时,传递给 $(RUSTC) 的额外选项。 |
| 75 | + |
| 76 | +RUSTFLAGS_MODULE |
| 77 | +---------------- |
| 78 | +用于 $(RUSTC) 的额外模块特定选项。 |
| 79 | + |
| 80 | +LDFLAGS_MODULE |
| 81 | +-------------- |
| 82 | +用于 $(LD) 链接模块时的额外选项。 |
| 83 | + |
| 84 | +HOSTCFLAGS |
| 85 | +---------- |
| 86 | +在构建主机程序时传递给 $(HOSTCC) 的额外标志。 |
| 87 | + |
| 88 | +HOSTCXXFLAGS |
| 89 | +------------ |
| 90 | +在构建主机程序时传递给 $(HOSTCXX) 的额外标志。 |
| 91 | + |
| 92 | +HOSTRUSTFLAGS |
| 93 | +------------- |
| 94 | +在构建主机程序时传递给 $(HOSTRUSTC) 的额外标志。 |
| 95 | + |
| 96 | +HOSTLDFLAGS |
| 97 | +----------- |
| 98 | +链接主机程序时传递的额外选项。 |
| 99 | + |
| 100 | +HOSTLDLIBS |
| 101 | +---------- |
| 102 | +在构建主机程序时链接的额外库。 |
| 103 | + |
| 104 | +.. _zh_cn_userkbuildflags: |
| 105 | + |
| 106 | +USERCFLAGS |
| 107 | +---------- |
| 108 | +用于 $(CC) 编译用户程序(userprogs)时的额外选项。 |
| 109 | + |
| 110 | +USERLDFLAGS |
| 111 | +----------- |
| 112 | +用于 $(LD) 链接用户程序时的额外选项。用户程序(userprogs)是使用 CC 链接的, |
| 113 | +因此 $(USERLDFLAGS) 应该根据需要包含 "-Wl," 前缀。 |
| 114 | + |
| 115 | +KBUILD_KCONFIG |
| 116 | +-------------- |
| 117 | +将顶级 Kconfig 文件设置为此环境变量的值。默认名称为 "Kconfig"。 |
| 118 | + |
| 119 | +KBUILD_VERBOSE |
| 120 | +-------------- |
| 121 | +设置 kbuild 的详细程度。可以分配与 "V=..." 相同的值。 |
| 122 | + |
| 123 | +有关完整列表,请参见 `make help`。 |
| 124 | + |
| 125 | +设置 "V=..." 优先于 KBUILD_VERBOSE。 |
| 126 | + |
| 127 | +KBUILD_EXTMOD |
| 128 | +------------- |
| 129 | +在构建外部模块时设置内核源代码的搜索目录。 |
| 130 | + |
| 131 | +设置 "M=..." 优先于 KBUILD_EXTMOD。 |
| 132 | + |
| 133 | +KBUILD_OUTPUT |
| 134 | +------------- |
| 135 | +指定内核构建的输出目录。 |
| 136 | + |
| 137 | +在单独的构建目录中为预构建内核构建外部模块时,这个变量也可以指向内核输出目录。请注意, |
| 138 | +这并不指定外部模块本身的输出目录。 |
| 139 | + |
| 140 | +输出目录也可以使用 "O=..." 指定。 |
| 141 | + |
| 142 | +设置 "O=..." 优先于 KBUILD_OUTPUT。 |
| 143 | + |
| 144 | +KBUILD_EXTRA_WARN |
| 145 | +----------------- |
| 146 | +指定额外的构建检查。也可以通过在命令行传递 "W=..." 来设置相同的值。 |
| 147 | + |
| 148 | +请参阅 `make help` 了解支持的值列表。 |
| 149 | + |
| 150 | +设置 "W=..." 优先于 KBUILD_EXTRA_WARN。 |
| 151 | + |
| 152 | +KBUILD_DEBARCH |
| 153 | +-------------- |
| 154 | +对于 deb-pkg 目标,允许覆盖 deb-pkg 部署的正常启发式方法。通常 deb-pkg 尝试根据 |
| 155 | +UTS_MACHINE 变量(在某些架构中还包括内核配置)来猜测正确的架构。KBUILD_DEBARCH |
| 156 | +的值假定(不检查)为有效的 Debian 架构。 |
| 157 | + |
| 158 | +KDOCFLAGS |
| 159 | +--------- |
| 160 | +指定在构建过程中用于 kernel-doc 检查的额外(警告/错误)标志,查看 |
| 161 | +scripts/kernel-doc 了解支持的标志。请注意,这目前不适用于文档构建。 |
| 162 | + |
| 163 | +ARCH |
| 164 | +---- |
| 165 | +设置 ARCH 为要构建的架构。 |
| 166 | + |
| 167 | +在大多数情况下,架构的名称与 arch/ 目录中的子目录名称相同。 |
| 168 | + |
| 169 | +但某些架构(如 x86 和 sparc)有别名。 |
| 170 | + |
| 171 | +- x86: i386 表示 32 位,x86_64 表示 64 位 |
| 172 | +- parisc: parisc64 表示 64 位 |
| 173 | +- sparc: sparc32 表示 32 位,sparc64 表示 64 位 |
| 174 | + |
| 175 | +CROSS_COMPILE |
| 176 | +------------- |
| 177 | +指定 binutils 文件名的可选固定部分。CROSS_COMPILE 可以是文件名的一部分或完整路径。 |
| 178 | + |
| 179 | +在某些设置中,CROSS_COMPILE 也用于 ccache。 |
| 180 | + |
| 181 | +CF |
| 182 | +-- |
| 183 | +用于 sparse 的额外选项。 |
| 184 | + |
| 185 | +CF 通常在命令行中如下所示使用:: |
| 186 | + |
| 187 | + make CF=-Wbitwise C=2 |
| 188 | + |
| 189 | +INSTALL_PATH |
| 190 | +------------ |
| 191 | +INSTALL_PATH 指定放置更新后的内核和系统映像的路径。默认值是 /boot,但你可以设置 |
| 192 | +为其他值。 |
| 193 | + |
| 194 | +INSTALLKERNEL |
| 195 | +------------- |
| 196 | +使用 "make install" 时调用的安装脚本。 |
| 197 | +默认名称是 "installkernel"。 |
| 198 | + |
| 199 | +该脚本将会以以下参数调用: |
| 200 | + |
| 201 | + - $1 - 内核版本 |
| 202 | + - $2 - 内核映像文件 |
| 203 | + - $3 - 内核映射文件 |
| 204 | + - $4 - 默认安装路径(如果为空,则使用根目录) |
| 205 | + |
| 206 | +"make install" 的实现是架构特定的,可能与上述有所不同。 |
| 207 | + |
| 208 | +提供 INSTALLKERNEL 以便在交叉编译内核时可以指定自定义安装程序。 |
| 209 | + |
| 210 | +MODLIB |
| 211 | +------ |
| 212 | +指定模块的安装位置。 |
| 213 | +默认值为:: |
| 214 | + |
| 215 | + $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) |
| 216 | + |
| 217 | +该值可以被覆盖,在这种情况下将忽略默认值。 |
| 218 | + |
| 219 | +INSTALL_MOD_PATH |
| 220 | +---------------- |
| 221 | +INSTALL_MOD_PATH 指定了模块目录重定位时 MODLIB 的前缀,通常由构建根 |
| 222 | +(build roots)所需。它没有在 makefile 中定义,但如果需要,可以作为 |
| 223 | +参数传递给 make。 |
| 224 | + |
| 225 | +INSTALL_MOD_STRIP |
| 226 | +----------------- |
| 227 | +如果 INSTALL_MOD_STRIP 被定义,内核模块在安装后会被剥离。如果 |
| 228 | +INSTALL_MOD_STRIP 的值为 '1',则会使用默认选项 --strip-debug。否则, |
| 229 | +INSTALL_MOD_STRIP 的值将作为 strip 命令的选项。 |
| 230 | + |
| 231 | +INSTALL_HDR_PATH |
| 232 | +---------------- |
| 233 | +INSTALL_HDR_PATH 指定了执行 "make headers_*" 时,用户空间头文件的安装位置。 |
| 234 | + |
| 235 | +默认值为:: |
| 236 | + |
| 237 | + $(objtree)/usr |
| 238 | + |
| 239 | +$(objtree) 是保存输出文件的目录。 |
| 240 | +输出目录通常使用命令行中的 "O=..." 进行设置。 |
| 241 | + |
| 242 | +该值可以被覆盖,在这种情况下将忽略默认值。 |
| 243 | + |
| 244 | +INSTALL_DTBS_PATH |
| 245 | +----------------- |
| 246 | +INSTALL_DTBS_PATH 指定了设备树二进制文件的安装位置,通常由构建根(build roots)所需。 |
| 247 | +它没有在 makefile 中定义,但如果需要,可以作为参数传递给 make。 |
| 248 | + |
| 249 | +KBUILD_ABS_SRCTREE |
| 250 | +-------------------------------------------------- |
| 251 | +Kbuild 在可能的情况下使用相对路径指向源代码树。例如,在源代码树中构建时,源代码树路径是 |
| 252 | +'.'。 |
| 253 | + |
| 254 | +设置该标志请求 Kbuild 使用源代码树的绝对路径。 |
| 255 | +在某些情况下这是有用的,例如在生成带有绝对路径条目的标签文件时等。 |
| 256 | + |
| 257 | +KBUILD_SIGN_PIN |
| 258 | +--------------- |
| 259 | +当签署内核模块时,如果私钥需要密码或 PIN,此变量允许将密码或 PIN 传递给 sign-file 工具。 |
| 260 | + |
| 261 | +KBUILD_MODPOST_WARN |
| 262 | +------------------- |
| 263 | +KBUILD_MODPOST_WARN 可以设置为在最终模块链接阶段出现未定义符号时避免错误。它将这些错误 |
| 264 | +转为警告。 |
| 265 | + |
| 266 | +KBUILD_MODPOST_NOFINAL |
| 267 | +---------------------- |
| 268 | +KBUILD_MODPOST_NOFINAL 可以设置为跳过模块的最终链接。这仅在加速编译测试时有用。 |
| 269 | + |
| 270 | +KBUILD_EXTRA_SYMBOLS |
| 271 | +-------------------- |
| 272 | +用于依赖其他模块符号的模块。详见 modules.rst。 |
| 273 | + |
| 274 | +ALLSOURCE_ARCHS |
| 275 | +--------------- |
| 276 | +对于 tags/TAGS/cscope 目标,可以指定包含在数据库中的多个架构,用空格分隔。例如:: |
| 277 | + |
| 278 | + $ make ALLSOURCE_ARCHS="x86 mips arm" tags |
| 279 | + |
| 280 | +要获取所有可用架构,也可以指定 all。例如:: |
| 281 | + |
| 282 | + $ make ALLSOURCE_ARCHS=all tags |
| 283 | + |
| 284 | +IGNORE_DIRS |
| 285 | +----------- |
| 286 | +对于 tags/TAGS/cscope 目标,可以选择不包含在数据库中的目录,用空格分隔。例如:: |
| 287 | + |
| 288 | + $ make IGNORE_DIRS="drivers/gpu/drm/radeon tools" cscope |
| 289 | + |
| 290 | +KBUILD_BUILD_TIMESTAMP |
| 291 | +---------------------- |
| 292 | +将该环境变量设置为日期字符串,可以覆盖在 UTS_VERSION 定义中使用的时间戳 |
| 293 | +(运行内核时的 uname -v)。该值必须是一个可以传递给 date -d 的字符串。默认值是 |
| 294 | +内核构建某个时刻的 date 命令输出。 |
| 295 | + |
| 296 | +KBUILD_BUILD_USER, KBUILD_BUILD_HOST |
| 297 | +------------------------------------ |
| 298 | +这两个变量允许覆盖启动时显示的 user@host 字符串以及 /proc/version 中的信息。 |
| 299 | +默认值分别是 whoami 和 host 命令的输出。 |
| 300 | + |
| 301 | +LLVM |
| 302 | +---- |
| 303 | +如果该变量设置为 1,Kbuild 将使用 Clang 和 LLVM 工具,而不是 GCC 和 GNU |
| 304 | +binutils 来构建内核。 |
0 commit comments