首页 文章

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

提问于
浏览
3

一般来说,我如何知道构建一些.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 回答

  • 3

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

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

    1.查找Makefile

    找到构建内核模块的 Makefile . 该文件位于同一目录中,其中生成 .ko 文件;此目录通常与模块源文件的目录一致 . 这个 Makefile 包含一个构建模块的行:

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

    Example

    模块 xt_conntrack.ko 由该线构建

    obj-$(CONFIG_NETFILTER_XT_MATCH_CONNTRACK) += xt_conntrack.o
    

    在文件 net/netfilter/Makefile .

    2.确定最终选项

    配置选项如何影响构建模块有多种方法 .

    • 该选项直接在行中使用,生成模块:
    obj-${CONFIG_X} := <module_name>.o
    

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

    • 鉴于 Makefile 有条件地包括在上面一个:
    obj-${CONFIG_Y} := <dir>/
    
    • 生成的模块由“if”子句保护:
    ifeq ($(CONFIG_F),y)
    obj-m := <module_name>.o
    endif
    

    或者,警卫可以保护 Makefile 免受上层人员的侵害:

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

    Example

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

    它也取决于 CONFIG_NETFILTER 选项的规则2,因为外部 net/Makefile 包括 net/netfilter/Makefile via

    obj-$(CONFIG_NETFILTER) += netfilter/
    

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

    Note: 这是最复杂的一步,主要是因为该选项的可用性以其他选项表示 . 建议使用现成的工具 . 例如, make menuconfig 工具可以搜索选项并显示其定义 .

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

    定义确定:

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

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

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

    Example

    选项 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 .

相关问题