How do I find the full set of kconfig options required to yield a kernel module?
通常,确定用于构建内核模块的选项集是复杂的过程.下面描述的步骤可以指导该过程.
1.查找一个Makefile
找到一个构建内核模块的Makefile.该文件位于生成.ko文件的同一目录中;该目录通常与模块源文件的目录重合.此Makefile包含用于构建模块的一行:
obj-${CONFIG_...} := .o
例:
该行构建了一个模块xt_conntrack.ko
obj-$(CONFIG_NETFILTER_XT_MATCH_CONNTRACK) += xt_conntrack.o
在文件net / netfilter / Makefile中.
2.确定最终选择
配置选项可能会以多种方式影响构建模块.
>该选项直接用于行中,产生了模块:
obj-${CONFIG_X} := .o
意味着应该为要构建的模块设置选项CONFIG_X.
>给定的Makefile有条件地包含在上一个文件中:
obj-${CONFIG_Y} :=
>模块产生的行由“ if”子句保护:
ifeq ($(CONFIG_F),y)
obj-m := .o
endif
另外,警卫队可以保护上层Makefile的包含:
ifeq ($(CONFIG_F),y)
obj-m :=
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-布尔值,y / m / n-三态等),
>该选项是否可以由用户设置.
例:
选项NETFILTER_XT_MATCH_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_CONNTRACK选项时,该选项才可用(可以设置).