调试内核时,我经常用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分钟,我仍觉得无聊。是否有任何减少内核重建时间的技巧?
答案 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