我在机器上启用了许多配置选项,以便利用新纳入的 wireguard
模块输入Linux 5.6.0-rc1。
这有点费力:我有一个最小的工作配置,并以我在尝试设置wireguard
网络接口时收到的错误为指导,我必须一一启用我不熟悉的内核配置选项,直到wireguard
工作为止(例如,选项,说,CONFIG_IP_NF_MANGLE
)。
我现在想尽可能在另一台机器上自动复制此过程。而另一台笔记本电脑则有一个相对较小的定制配置内核;这是一台完全不同的机器,所以make localmodconfig
于当前的machine 并不是一个真正的选择,因为无论如何我都必须以某种方式合并这两个配置。
我想实现什么
我想要一个进程,它采用模块名称作为输入,如lsmod
(例如iptable_mangle
)列出的那样,并返回与启用它相关的内核选项(大概CONFIG_IP_NF_MANGLE=m
在这种情况下?)。
我努力了
iptable_mangle
在 Linux 源代码(克隆)中grep 查找内核模块github
,希望能找到将其链接到相应内核选项的东西;在当前机器上运行
modinfo <target module name>
,希望显示的信息会提到内核配置选项。
这些都不起作用:输出CONFIG_IP_NF_MANGLE
在任何一种情况下都没有提及。
答案1
啊哈!我相信我已经找到了一些相当可靠的东西。
浏览 Linux 树后递归地配置和 grep 查找我的模块名称(例如iptable_raw
或xt_addrtype
或您有的东西)总是会在许多匹配行中产生以下形式之一
<whatever>/Makefile:obj-$(<RELEVANT KERNEL CONFIG OPTION>) += <module name>.o`
具体来说,运行
grep -rE '\+\=\s*nf_defrag_ipv6'
在源树的根中产生
net/ipv6/netfilter/Makefile:obj-$(CONFIG_NF_DEFRAG_IPV6) += nf_defrag_ipv6.o
这告诉我这CONFIG_NF_DEFRAG_IPV6
是启用nf_defrag_ipv6
.
我已经在多个模块上尝试过此操作,并且总是有一个由 . 返回的这种形式的唯一行grep
。现在这似乎非常容易编写脚本,粗略地说,可以生成一个哈希值
lsmod
作为键返回的模块名称- 将内核配置选项匹配为值
编辑:
关于文档的一句话:原则上,上述模式可以通过所描述的 grep 发现,但真正让我注意到的是+= <object file name>
中提到的语法Kconfig文档,我正在仔细阅读以获取灵感。