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



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

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

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

Kconfig

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.

生成文件

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

#ifdef CONFIG_MY_DEFINE
#define THE_REAL_DEAL 1
#endif

因此,Kconfig 部分定义了用户界面信息。 .config是 makefile 语法,它由 menuconfig 等输出。 这是在您键入 make 时来源的。 也就是说,通过menuconfig或其他工具选择的所有内容都可以在Makefiles中找到。 Kconfig 变量添加了CONFIG_前缀。

您可以选择"生成文件"或"源"部分来获取定义。 如果要选择一个范围,则可以将 CONFIG_MY_DEFINE 的值传递给编译器。 即,包括几乎任何内核标头都将包括config.h,并且CONFIG_MY_DEFINE的"C"值将设置为用户在该范围内选择的任何值。

<小时 />请参阅 kbuild

wiki 了解更多信息,其中主要引用内核的 kbuild 文档。

最新更新