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

时间:2017-08-27 13:48:29

标签: linux linux-kernel

一般情况下,如何知道构建一些.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/

1 个答案:

答案 0 :(得分:4)

  

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

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

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. 生成的模块由&#34;#34;子句:

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

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

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

    模块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 - 布尔值,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