如何加快Linux内核的重建速度

时间:2014-11-10 06:15:23

标签: linux build compilation linux-kernel kernel

调试内核时,我经常用make重建内核。即使我只是修改单行,我也必须通过以下所有命令:

make[1]: Nothing to be done for `all'.
  CHK     include/generated/uapi/linux/version.h
make[1]: Nothing to be done for `relocs'.
  CHK     include/generated/utsrelease.h
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  PASYMS  arch/x86/realmode/rm/pasyms.h
  LDS     arch/x86/realmode/rm/realmode.lds
  LD      arch/x86/realmode/rm/realmode.elf
  RELOCS  arch/x86/realmode/rm/realmode.relocs
  OBJCOPY arch/x86/realmode/rm/realmode.bin
  AS      arch/x86/realmode/rmpiggy.o
  CHK     kernel/config_data.h
  LD      arch/x86/realmode/built-in.o
  VDSOSYM arch/x86/vdso/vdso-syms.lds
  VDSOSYM arch/x86/vdso/vdso32-int80-syms.lds
  VDSOSYM arch/x86/vdso/vdso32-syscall-syms.lds
  VDSOSYM arch/x86/vdso/vdso32-sysenter-syms.lds
  VDSOSYM arch/x86/vdso/vdso32-syms.lds
  LD      arch/x86/vdso/built-in.o
  LD      arch/x86/built-in.o
  CC      drivers/gpu/drm/i915/i915_debugfs.o
  LD      drivers/gpu/drm/i915/i915.o
  LD      drivers/gpu/drm/i915/built-in.o
  LD      drivers/gpu/drm/built-in.o
  LD      drivers/gpu/built-in.o
  LD      drivers/built-in.o
  CHK     include/generated/uapi/linux/version.h
make[2]: Nothing to be done for `all'.
make[2]: Nothing to be done for `relocs'.
  LINK    vmlinux
  LD      vmlinux.o
  MODPOST vmlinux.o
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  KSYM    .tmp_kallsyms1.o
  KSYM    .tmp_kallsyms2.o
  LD      vmlinux
  SORTEX  vmlinux
  SYSMAP  System.map
  Building modules, stage 2.
  VOFFSET arch/x86/boot/voffset.h
  CC      arch/x86/boot/version.o
  OBJCOPY arch/x86/boot/compressed/vmlinux.bin
  GZIP    arch/x86/boot/compressed/vmlinux.bin.gz
  MKPIGGY arch/x86/boot/compressed/piggy.S
  AS      arch/x86/boot/compressed/piggy.o
  LD      arch/x86/boot/compressed/vmlinux
  ZOFFSET arch/x86/boot/zoffset.h
  OBJCOPY arch/x86/boot/vmlinux.bin
  AS      arch/x86/boot/header.o
  LD      arch/x86/boot/setup.elf
  OBJCOPY arch/x86/boot/setup.bin
  BUILD   arch/x86/boot/bzImage
Setup is 16688 bytes (padded to 16896 bytes).
System is 4107 kB
CRC 9346a092
Kernel: arch/x86/boot/bzImage is ready  (#29)
  MODPOST 664 modules

对于通过上述命令,几乎需要1~2分钟,我仍觉得无聊。是否有任何减少内核重建时间的技巧?

2 个答案:

答案 0 :(得分:1)

-j标志将告诉make要并行执行的作业数量。例如。 make -j4将同时完成四项工作。

关于你应该将-j设置为什么;我不相信那是一个直截了当的答案。

这里有一个很好的主题: GNU make: should the number of jobs equal the number of CPU cores in a system?

答案 1 :(得分:0)

查看内核源目录中make help的一些选项。

  

$ make help
  其他通用目标:
  all - 构建标有[*]

的所有目标      
      
  • vmlinux - 构建裸内核
  •   
  • modules - 构建所有模块modules_install - 将所有模块安装到INSTALL_MOD_PATH(默认值:/)firmware_install-安装   所有固件都是INSTALL_FW_PATH                   (默认:$(INSTALL_MOD_PATH)/ lib / firmware)dir / - 在dir和dir / file下面构建所有文件。[oisS] - 仅构建指定的目标dir / file.lst - 构建指定的混合源/汇编   仅限目标                   (需要最近的binutils和最近的构建(System.map))dir / file.ko - 构建模块,包括最终链接
      modules_prepare - 设置用于构建外部模块标签/ TAGS
  •   
  • 为编辑器生成标签文件cscope - 生成cscope index gtags - 生成GNU GLOBAL索引kernelrelease
  •   
  • 输出发布版本字符串kernelversion - 输出存储在Makefile image_name中的版本 - 输出图像名称
      headers_install - 将已清理的内核头文件安装到INSTALL_HDR_PATH
  •   

这取决于您正在进行的更改。 如果更改特定于内核模块。那么你的模块应该准备好加载和测试。

  

$ make M = / path / to / module / dir /

如果更改在配置中并且需要重新生成构建脚本

  

$ make prepare   $ make脚本   $ make M = / path / to / module / dir /

在某些情况下,如果需要仅重新生成vmlinux

  

$ make vmlinux