一般情况下,如何知道构建一些.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/)
答案 0 :(得分:4)
如何找到生成内核模块所需的全套kconfig选项?
通常,确定构建内核模块的选项集是一个复杂的过程。下面描述的步骤可以指导该过程。
找到构建内核模块的Makefile
。此文件位于生成.ko
文件的同一目录中;此目录通常与模块的源文件目录一致。此Makefile
包含构建模块的行:
obj-${CONFIG_...} := <module_name>.o
示例强>:
模块xt_conntrack.ko
由行
obj-$(CONFIG_NETFILTER_XT_MATCH_CONNTRACK) += xt_conntrack.o
文件net/netfilter/Makefile
中的。
配置选项可能会影响构建模块的几种方式。
该选项直接在该行中使用,生成了模块:
obj-${CONFIG_X} := <module_name>.o
表示应为要构建的模块设置选项CONFIG_X
。
鉴于Makefile
有条件包含在上层中:
obj-${CONFIG_Y} := <dir>/
生成的模块由&#34;#34;子句:
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/
注意:这是最复杂的一步,主要是因为该选项的可用性以其他选项表示。建议使用现成的工具。例如,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
选项时,该选项才可用(可以设置)。
Kconfig
文件格式的文档位于Documentation/kbuild/kconfig-language.txt。