如何加快Linux内核编译?

我有与8GB内存的核心i5。 我的机器上安装了VMware工作站10.0.1。 我有安装在VMware上的fedora 20桌面版作为来宾操作系统。

我正在研究Linux内核源代码v 3.14.1。 我正在开发一个Linux内核的I / O调度器。 每次修改代码后,大约需要1小时30分钟才能编译和安装整个内核代码以查看更改。

编译和安装命令: make menuconfigmakemake modulesmake modules_installmake install

所以我的问题是可以减less1小时30分钟的时间,只有10到15分钟?

Solutions Collecting From Web of "如何加快Linux内核编译?"

不要为你对源代码所做的每一个改变都make menuconfig ,因为无论你的改变多么微不足道,它都会触发一切的全部编译。 这只在内核的配置选项发生变化时才需要,而且在开发过程中很少发生。

做就是了:

 make 

或者如果你喜欢并行编译:

 make -j4 

或者你喜欢的任何数量的并发任务。

然后make install等可能需要部署最近建立的二进制文件,当然。

另一个技巧是将内核配置为测试所需的最小值。 我发现,对于许多任务来说,UML编译(User Mode Linux)是最快的。 你也可以找到有用的make localmodconfig而不是make menuconfig来开始。

每次进行更改时,不需要再次运行make menuconfig – 只需要一次就可以创建内核.config文件。 (或者如果您编辑Kconfig文件来添加或修改配置选项,也可能再次发生,但这当然不应该经常发生。)

只要你的.config保持独立,运行make应该只重新编译你改变的文件。 有几个文件必须每次编译,但绝大多数不是。

  1. 使用-j选项make并行构建
  2. 仅针对目标架构进行编译,否则将会为每个列出的架构构建内核。

即例如而不是跑步:

 make 

跑:

 make ARCH=<your architecture> -jN 

其中N是您计算机上的核心数( cat /proc/cpuinfo列出核心数)。 例如,对于具有4 cores i386目标和主机(输出cat /proc/cpuinfo ):

 make ARCH=i386 -j4 

同样,你可以用-jN标志运行其他make目标( modulesmodules_installinstall )。

注意: make会对修改过的文件进行检查,只编译那些已经被修改过的文件,所以只有初始的构建需要时间,后续的构建会更快。

make -j将使用所有可用的CPU。

也许除了以前的建议之外,使用ccache软件( https://ccache.samba.org/ )和SSD驱动器上的编译目录可以大大缩短编译时间。

如果你有足够的内存,并且你不会在内核生成的时候使用你的机器,你可以产生大量的并发作业。 但要确保你的内存是足够的,否则你的系统会挂起和崩溃。

ccache应该能够大大加快你的编译时间。 它通过缓存先前的编译和检测重新编译的时间来加速重新编译。 由于需要填充缓存,所以第一次使用ccache进行编译会比较慢,但后续的编译应该快得多。

如果你不想大惊小怪地使用ccache配置,你可以像这样编译内核来运行它:

 ccache make