如何加速Linux内核编译?

mom*_*eem 19 linux time kernel compilation

我有8GB RAM的核心i5.我的机器上安装了VMware工作站10.0.1.我在VMware上安装了Fedora 20 Desktop Edition作为客户操作系统.

我正在研究Linux内核源代码v 3.14.1.我正在为Linux内核开发一个I/O调度程序.每次编译和安装整个内核代码以查看更改大约花费1小时30分钟后,对代码进行任何修改.

编译和安装命令: make menuconfig, make, make modules, make modules_install, make install

所以我的问题是可以将1小时30分钟的时间缩短到10到15分钟吗?

rod*_*igo 22

不要make menuconfig对你对源做出的每一个改变做,因为无论你的改变多么微不足道,它都会触发所有内容的完整编译.只有在内核的配置选项发生变化时才需要这样做,而且在开发过程中很少发生这种情况.

做就是了:

make
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢并行编译:

make -j4
Run Code Online (Sandbox Code Playgroud)

或者你想要的任何数量的并发任务.

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

另一个技巧是将内核配置为测试所需的最小值.我发现对于许多任务来说,UML编译(用户模式Linux)是最快的.你也可能觉得有用make localmodconfig而不是make menuconfig开始.

  • `-j`参数应为核心数的1.5倍 (3认同)

bro*_*oot 10

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

即对于例如而不是运行:

make
Run Code Online (Sandbox Code Playgroud)

跑:

make ARCH=<your architecture> -jN
Run Code Online (Sandbox Code Playgroud)

N您机器上的内核数在哪里(cat /proc/cpuinfo列出内核数)。例如,对于i386目标和主机4 cores(输出cat /proc/cpuinfo):

make ARCH=i386 -j4
Run Code Online (Sandbox Code Playgroud)

同样,您可以使用标志运行其他 make 目标(modules, modules_install, install-jN

注意: make检查已修改的文件并仅编译那些已修改的文件,因此只有初始构建需要时间,后续构建会更快。

  • `使 ARCH=$(arch) -j$(nproc)` 变得通用 (3认同)

Eri*_*ang 6

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

  • 它产生数百个编译器进程并且系统冻结 (5认同)
  • @OlegMikheev 在之前的程序中没有看到这一点,如果发生这种情况,也许您可​​以指定作业计数限制,例如其他答案中建议的“make -j 4”。 (2认同)
  • 你说得对,事实并非如此。但同时这意味着它不限于核心数量,因此它会不断产生进程,从而冻结您的系统。 (2认同)

dus*_*uff 5

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

只要您.config独自一人,运行时make应该只重新编译您更改的文件.每次都必须编译一些文件,但绝大多数都没有.