gpt4 book ai didi

linux - 将内核配置变量映射到模块

转载 作者:可可西里 更新时间:2023-11-01 11:51:53 26 4
gpt4 key购买 nike

一般来说,我如何知道构建某些 .ko 文件需要哪些内核配置选项?

例如,我需要'xt_conntrack.ko'。有哪些资源让我知道在我的内核配置中启用 CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m 是否有必要甚至足以生成我构建的 .ko 文件?如何找到生成内核模块所需的全套 kconfig 选项?

http://cateee.net/lkddb/web-lkddb/NETFILTER_XT_MATCH_CONNTRACK.html指示它将构建“xt_conntrack”,但是当我 =m 它及其所有依赖项时我没有看到它。另一方面,这里没有可见的 kconfig 标志集 (http://modules.libres.ch/browse/linux/v3.0/x86_64/xt_conntrack/)

最佳答案

How do I find the full set of kconfig options required to yield a kernel module?

一般来说,确定用于构建内核模块的选项集是一个复杂的过程。下面描述的步骤可能会指导该过程。

1。找到一个Makefile

找到一个构建内核模块的Makefile。该文件与生成 .ko 文件的目录相同;这个目录通常与模块的源文件目录重合。此 Makefile 包含构建模块的行:

obj-${CONFIG_...} := <module_name>.o

示例:

一个模块xt_conntrack.ko由行构建

obj-$(CONFIG_NETFILTER_XT_MATCH_CONNTRACK) += xt_conntrack.o

在文件 net/netfilter/Makefile 中。

2。确定最终选项

配置选项对构建模块的影响有多种方式。

  1. 直接在行中使用选项,生成模块:

    obj-${CONFIG_X} := <module_name>.o

    表示应该为要构建的模块设置选项 CONFIG_X

  2. 给定 Makefile 有条件地包含在上层中:

    obj-${CONFIG_Y} := <dir>/
  3. 生成模块的行由“if”子句保护:

    ifeq ($(CONFIG_F),y)
    obj-m := <module_name>.o
    endif

    或者,守卫可以保护 Makefile 中包含上层:

    ifeq ($(CONFIG_F),y)
    obj-m := <dir>/
    endif

示例:

模块 xt_conntrack 取决于 CONFIG_NETFILTER_XT_MATCH_CONNTRACK 选项中的规则 1。

它还取决于 CONFIG_NETFILTER 选项中的规则 2,因为外部 net/Makefile 通过

包含 net/netfilter/Makefile
obj-$(CONFIG_NETFILTER) += netfilter/

3。查找选项的定义并确定其可用性

注意:这是最复杂的一步,主要是因为选项的可用性是根据其他选项来表示的。建议为此使用现成的工具。例如,make menuconfig 工具可以搜索选项并显示它们的定义。

每个配置选项都在 Kconfig 文件之一中定义

定义决定:

  • 选项的可用性(何时可以使用选项),

  • 选项的可能值(y/n - bool 值,y/m/n - 三态等)

  • 该选项是否可以由用户设置。

示例:

选项 NETFILTER_XT_MATCH_CONNTRACKnet/netfilter/Kconfig 中定义为

config NETFILTER_XT_MATCH_CONNTRACK
tristate '"conntrack" connection tracking match support'
depends on NF_CONNTRACK
default m if NETFILTER_ADVANCED=n
help
This is a general conntrack match module, a superset of the state match.

It allows matching on additional conntrack information, which is
useful in complex configurations, such as NAT gateways with multiple
internet links or tunnels.

To compile it as a module, choose M here. If unsure, say N.

即只有在设置了NF_CONNTRACK选项时,该选项才可用(可以设置)。

Kconfig 文件格式的文档位于 Documentation/kbuild/kconfig-language.txt .

关于linux - 将内核配置变量映射到模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45905642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com