首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用shell脚本试图找到我的机器所需的所有内核模块

使用shell脚本试图找到我的机器所需的所有内核模块
EN

Stack Overflow用户
提问于 2012-07-13 12:24:00
回答 1查看 5.9K关注 0票数 10

我现在正在开发内核模块,构建时间开始变得很困难。作为一个副作用,我采取了太多的“咖啡”休息在建筑期间。

因此,我正在寻找一种方法,以建立我需要的东西,我的平台。简而言之,"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根本不起作用。原因如下:

代码语言:javascript
复制
make clean
make mrproper
cp /boo/config-'uname -r' .config
make localmodconfig

它停了下来

代码语言:javascript
复制
vboxguest config not found!!
nf_defrag_ipv6 config not found!!
vboxsf config not found!!
vboxvideo config not found!!

问题是,我的内核开发环境在virtualbox中。这些vbox模块是在我选择安装"virtualbox来宾加载项“时安装的。

并且netfilter模块可能是分发特定的模块(许多netfilter模块不是主线内核的一部分,因此它对我来说并不是一个冲击),它不包括在主线内核中。

现在解决这个问题的方法显然是卸载这些模块并再次尝试。但我在想,如果有streamline_config.pl补丁,用户可以排除某些模块(如果S/他想要的话)。问题是我对perl一无所知,我喜欢这样。

所以简单地说我的问题

  1. 修补streamline_config.pl,这样我就可以给出一个模块名列表作为参数,它将排除在处理配置文件之外。 脚本位于kernel.org
  2. 编辑:删除有关perl脚本未运行的内容。正如木根健一( mugen kenichi )指出的(我有多蠢?)但是,由于源代码树下没有一些模块代码,所以仍然无法使localmodconfig工作。修补streamline_config.pl仍然是有效的要求。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-14 11:41:53

其他任何试图构建最小内核映像的人也希望减少构建时间,请执行以下操作:

1)在源树中复制分发内核配置。这可以通过以下任一命令来完成:

代码语言:javascript
复制
$zcat /proc/config.gz > .config

代码语言:javascript
复制
$cp /boot/config-'uname -r' .config

2)使用localmodconfig目标。

代码语言:javascript
复制
$make localmodconfig

它将使用lsmod来查找当前加载的模块。然后,它将搜索发行版的.config,以启用它们并禁用其他。

重要的是要知道,它并不总是完美无缺的工作。因此,您应该使用make menuconfig进一步调整配置。您将看到仍有一些模块被标记为要构建,这实际上对您的系统来说是不必要的。

有时,离开树模块可能会导致失败。如果是这样的话,你可以用两种方式解决这个问题:

( a)卸载树外模块,然后重试make localmodconfig。b)直接运行perl脚本:

代码语言:javascript
复制
$chmod +x script/kconfig/streamline_config.pl
$perl script/kconfig/streamline_config.pl > .config

3)安装ccache1。它将大大提高您的构建时间。它缓存物体。因此,它将减少后续构建。

ccache可能包含在发行版的存储库中,这样您就可以通过apt-getyum安装它。在CentOS中,它可以在EPEL repo.2中获得。

4)为构建工作提供尽可能多的核心

代码语言:javascript
复制
$make -j8 CC="ccache gcc"

我的结果是:

代码语言:javascript
复制
real 3m10.871s
user 4m36.949s
sys 1m52.656s

1 2

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11470447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档