尝试使用shell脚本查找我的机器所需的所有内核模块

Aft*_*nix 10 linux perl kernel kernel-module

我正在开发内核模块,构建时间开始在我的皮肤下.作为副作用,我在构建期间采取了太多的"咖啡"休息时间.

所以我一直在寻找一种方法来构建我的平台所需的东西."Linux内核简介"的第7章和第8章详细介绍了如何手动完成.这是一个很好的阅读:http://www.kroah.com/lkn/

但是虽然我理解这些东西,但仍然需要进行大量调整才能实现这一目标.

2.6.32及更高版本的内核添加了一个新目标make localmodconfig.它会扫描lsmod并适当地更改.config.所以我以为我找到了"自动化".但是这个perl脚本也存在一些问题.

该主题描述了这些问题:https://bbs.archlinux.org/viewtopic.php?pid = 845113

还有一个显然适用于其他人的建议解决方案是直接运行脚本而不是使用make的目标.

虽然对我来说,make localmodconfig根本不起作用.它的原因如下:

make clean
make mrproper
cp /boo/config-'uname -r' .config
make localmodconfig
Run Code Online (Sandbox Code Playgroud)

它停止了

vboxguest config not found!!
nf_defrag_ipv6 config not found!!
vboxsf config not found!!
vboxvideo config not found!!
Run Code Online (Sandbox Code Playgroud)

事情是我的内核开发环境是在virtualbox里面.当我选择安装"virtualbox guest addtion"时安装了这些vbox模块.

netfilter模块可能是一个特定于分发的模块(很多netfilter模块不是主线内核的一部分,所以它对我来说不是一个冲击),它不包含在主线内核中.

现在解决方法显然卸载了这些模块并再次尝试.但我在想是否有补丁streamline_config.pl可以让用户在他/她想要时排除某些模块.问题是我有关Perl的知识,我喜欢这样.

所以我的问题简而言之

  1. 修补,streamline_config.pl所以我可以给出一个模块名称列表作为参数,它将从处理配置文件中排除.

    该脚本位于kernel.org

  2. 编辑:删除了有关perl脚本未运行的内容.正如mugen kenichi指出的那样(我多么愚蠢?).但localmodconfig由于源树下没有一些模块代码,仍然无法工作.修补streamline_config.pl仍然有效的要求.

Aft*_*nix 10

尝试构建最小内核映像的其他任何人也在寻找减少构建时间,应该执行以下操作:

1)在源树中复制分发内核配置.可以使用以下任一命令完成:

$zcat /proc/config.gz > .config
Run Code Online (Sandbox Code Playgroud)

要么

$cp /boot/config-'uname -r' .config
Run Code Online (Sandbox Code Playgroud)

2)使用localmodconfig目标.

$make localmodconfig
Run Code Online (Sandbox Code Playgroud)

它将lsmod用于查找此时加载的模块.然后它将搜索分发的.config以启用它们并禁用其他.

重要的是要知道它并不总是完美无缺.所以你应该进一步使用调整你的配置make menuconfig.您将看到仍然标记了一些模块,这对您的系统来说实际上是不必要的.

有时,树模块外可能会导致make localmodconfig失败.如果是这种情况,您可以通过两种方式解决该问题:

a)卸载树模块,然后再试make localmodconfig一次.b)直接运行perl脚本:

$chmod +x script/kconfig/streamline_config.pl
$perl script/kconfig/streamline_config.pl > .config
Run Code Online (Sandbox Code Playgroud)

3)安装ccache[1].它将显着改善您的构建时间.它缓存对象.因此它将减少后续构建.

ccache可能包含在发行版的存储库中,以便您可以通过apt-get或安装它yum.在CentOS,它在EPEL回购中有售.[2]

4)为构建作业提供尽可能多的内核

$make -j8 CC="ccache gcc"
Run Code Online (Sandbox Code Playgroud)

我的结果是:

real 3m10.871s
user 4m36.949s
sys 1m52.656s
Run Code Online (Sandbox Code Playgroud)

[1] http://ccache.samba.org/ [2] http://fedoraproject.org/wiki/EPEL