我现在正在开发内核模块,构建时间开始变得很困难。作为一个副作用,我采取了太多的“咖啡”休息在建筑期间。
因此,我正在寻找一种方法,以建立我需要的东西,我的平台。简而言之,"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它停了下来
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一无所知,我喜欢这样。
所以简单地说我的问题
streamline_config.pl,这样我就可以给出一个模块名列表作为参数,它将排除在处理配置文件之外。
脚本位于kernel.orglocalmodconfig工作。修补streamline_config.pl仍然是有效的要求。发布于 2012-07-14 11:41:53
其他任何试图构建最小内核映像的人也希望减少构建时间,请执行以下操作:
1)在源树中复制分发内核配置。这可以通过以下任一命令来完成:
$zcat /proc/config.gz > .config或
$cp /boot/config-'uname -r' .config2)使用localmodconfig目标。
$make localmodconfig它将使用lsmod来查找当前加载的模块。然后,它将搜索发行版的.config,以启用它们并禁用其他。
重要的是要知道,它并不总是完美无缺的工作。因此,您应该使用make menuconfig进一步调整配置。您将看到仍有一些模块被标记为要构建,这实际上对您的系统来说是不必要的。
有时,离开树模块可能会导致失败。如果是这样的话,你可以用两种方式解决这个问题:
( a)卸载树外模块,然后重试make localmodconfig。b)直接运行perl脚本:
$chmod +x script/kconfig/streamline_config.pl
$perl script/kconfig/streamline_config.pl > .config3)安装ccache1。它将大大提高您的构建时间。它缓存物体。因此,它将减少后续构建。
ccache可能包含在发行版的存储库中,这样您就可以通过apt-get或yum安装它。在CentOS中,它可以在EPEL repo.2中获得。
4)为构建工作提供尽可能多的核心
$make -j8 CC="ccache gcc"我的结果是:
real 3m10.871s
user 4m36.949s
sys 1m52.656s1 2
https://stackoverflow.com/questions/11470447
复制相似问题