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

Linux 将内核配置变量映射到模块,linux,linux-kernel,Linux,Linux Kernel,通常,我如何知道构建一些.ko文件需要哪些内核配置选项 例如,我需要“xt_conntrack.ko”。有哪些资源让我知道在我的内核配置中启用CONFIG\u NETFILTER\u XT\u MATCH\u CONNTRACK=m是否必要,甚至足以生成我的builded.ko文件?如何找到生成内核模块所需的全套kconfig选项 指示它将生成“xt_conntrack”,但当我=m它及其所有依赖项时,我看不到它。 另一方面,这里没有可见的kconfig标志集() 如何找到生成内核模块所需的全套

通常,我如何知道构建一些.ko文件需要哪些内核配置选项

例如,我需要“xt_conntrack.ko”。有哪些资源让我知道在我的内核配置中启用
CONFIG\u NETFILTER\u XT\u MATCH\u CONNTRACK=m
是否必要,甚至足以生成我的builded.ko文件?如何找到生成内核模块所需的全套kconfig选项

指示它将生成“xt_conntrack”,但当我
=m
它及其所有依赖项时,我看不到它。 另一方面,这里没有可见的kconfig标志集()

如何找到生成内核模块所需的全套kconfig选项

通常,确定构建内核模块的选项集是一个复杂的过程。下面描述的步骤可以指导该过程

1.查找生成文件 查找构建内核模块的
Makefile
。该文件位于同一目录中,其中生成了
.ko
文件;该目录通常与模块源文件的目录一致。此
Makefile
包含一行代码,用于构建模块:

obj-${CONFIG_...} := <module_name>.o
在文件
net/netfilter/Makefile

2.确定最终选项 在构建模块时,配置选项可能会以多种方式产生影响

  • 该选项直接用于生产线,生产模块:

    obj-${CONFIG_X} := <module_name>.o
    
  • 模块产生的线路由“如果”条款保护:

  • 示例

    模块
    xt\u conntrack
    取决于
    CONFIG\u NETFILTER\u xt\u MATCH\u conntrack
    选项中的规则1

    它还取决于
    CONFIG\u NETFILTER
    选项中的规则2,因为外部
    net/Makefile
    包括
    net/NETFILTER/Makefile
    通过

    obj-$(CONFIG_NETFILTER) += netfilter/
    
    3.查找选项的定义并确定其可用性 注意:这是最复杂的步骤,主要是因为该选项的可用性用其他选项表示。为此,建议使用现成的工具。例如,
    makemenuconfig
    工具可以搜索选项并显示它们的定义

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

    定义决定:

    • 选项的可用性(可使用选项时)

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

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

    示例

    选项
    NETFILTER\u XT\u MATCH\u CONNTRACK
    net/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\u CONNTRACK
    选项时,该选项才可用(可以设置)

    有关
    Kconfig
    文件格式的文档位于。

    浏览make nconfig中的符号可以更容易地获取,但需要手动操作。
    ifeq ($(CONFIG_F),y)
    obj-m := <module_name>.o
    endif
    
    ifeq ($(CONFIG_F),y)
    obj-m := <dir>/
    endif
    
    obj-$(CONFIG_NETFILTER) += netfilter/
    
    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.