summaryrefslogtreecommitdiff
path: root/Documentation/translations/zh_CN/kbuild/kbuild.rst
blob: e5e2aebe1ebc84ac189be62c6a23e2d8bd35fac5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
.. SPDX-License-Identifier: GPL-2.0

.. include:: ../disclaimer-zh_CN.rst

:Original: Documentation/kbuild/kbuild.rst
:Translator: 慕冬亮 Dongliang Mu <dzm91@hust.edu.cn>

======
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) 的额外选项。

CFLAGS_MODULE
-------------
编译外部模块时,传递给 $(CC) 的额外模块特定选项。

RUSTFLAGS_KERNEL
----------------
在编译内置代码时,传递给 $(RUSTC) 的额外选项。

RUSTFLAGS_MODULE
----------------
用于 $(RUSTC) 的额外模块特定选项。

LDFLAGS_MODULE
--------------
用于 $(LD) 链接模块时的额外选项。

HOSTCFLAGS
----------
在构建主机程序时传递给 $(HOSTCC) 的额外标志。

HOSTCXXFLAGS
------------
在构建主机程序时传递给 $(HOSTCXX) 的额外标志。

HOSTRUSTFLAGS
-------------
在构建主机程序时传递给 $(HOSTRUSTC) 的额外标志。

HOSTLDFLAGS
-----------
链接主机程序时传递的额外选项。

HOSTLDLIBS
----------
在构建主机程序时链接的额外库。

.. _zh_cn_userkbuildflags:

USERCFLAGS
----------
用于 $(CC) 编译用户程序(userprogs)时的额外选项。

USERLDFLAGS
-----------
用于 $(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
-------------
指定内核构建的输出目录。

在单独的构建目录中为预构建内核构建外部模块时,这个变量也可以指向内核输出目录。请注意,
这并不指定外部模块本身的输出目录。

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

设置 "O=..." 优先于 KBUILD_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
---------
指定在构建过程中用于 kernel-doc 检查的额外(警告/错误)标志,查看
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 的前缀,通常由构建根
(build roots)所需。它没有在 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 指定了设备树二进制文件的安装位置,通常由构建根(build roots)所需。
它没有在 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
--------------------
用于依赖其他模块符号的模块。详见 modules.rst。

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
------------------------------------
这两个变量允许覆盖启动时显示的 user@host 字符串以及 /proc/version 中的信息。
默认值分别是 whoami 和 host 命令的输出。

LLVM
----
如果该变量设置为 1,Kbuild 将使用 Clang 和 LLVM 工具,而不是 GCC 和 GNU
binutils 来构建内核。