在 Linux 内核的 Kconfig 中添加编译时定义

fas*_*sha 3 linux-kernel kbuild

我知道有一个选项可以将编译时宏/定义添加到可在代码中使用的 Kconfig 文件中。

(例如,常量的一些定义,如#define)。

art*_*ise 5

Kconfig 值作为 Makefile 定义传递。此外,所有选定的 Kconfig 值都放在头文件中并传递给汇编程序和“C”代码。因此,您不能直接在 Kconfig 文件中执行此操作,但可以在 Makefile 或源中执行此操作。

配置文件

config MY_DEFINE
    bool "Select to get some DEFINE"
    default y
    help
      This is a config define that is sent to both make
      and defined in a config.h header.
Run Code Online (Sandbox Code Playgroud)

生成文件

ifeq ($(CONFIG_MY_DEFINE),y)
KBUILD_CFLAGS   += -DTHE_REAL_DEAL=1  # THE_REAL_DEAL now '1' in C files.
endif
Run Code Online (Sandbox Code Playgroud)

来源

#ifdef CONFIG_MY_DEFINE
#define THE_REAL_DEAL 1
#endif
Run Code Online (Sandbox Code Playgroud)

因此,Kconfig部分定义了用户界面信息。该.config是生成文件的语法,这是由输出menuconfig的,等等。当你输入这是来源make。即,由menuconfig或其他工具选择的所有内容都可以在 Makefile 中使用。该的Kconfig变量具有CONFIG_

您可以选择MakefileSource部分来定义。如果要选择范围,则可以将 的值传递CONFIG_MY_DEFINE给编译器。即,包含几乎所有内核头文件都将包含config.h,并且“C”值CONFIG_MY_DEFINE将设置为用户在该范围内选择的任何值。


更多请参见kbuild wiki,主要参考了内核的 kbuild 文档