.. 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 æ¥æž„å»ºå†…æ ¸ã€‚