在不重新编译整个内核的情况下更新内核

时间:2014-08-04 09:45:22

标签: linux-kernel kernel kernel-module

我正在使用Linux内核中的协议修改项目。

每次我编辑源代码中的一个单词时,我都需要制作,编译和加载所有模块并重新启动系统以检查修改需要超过10分钟。

有没有办法将修改后的代码添加到特定的内核模块而不重新编译整个内核和/或不重新启动?

我用来重新编译整个内核的代码是

make
make modules_install
make install
reboot

更新:使用@ askb的回答

我尝试了@ askb的答案并收到以下错误。

[@ 3.16.1]# make scripts && make prepare
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CALL    scripts/checksyscalls.sh
[@ 3.16.1]# make ./net/sctp/
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CALL    scripts/checksyscalls.sh
  CC [M]  net/sctp/output.o
  LD [M]  net/sctp/sctp.o
  LD [M]  net/sctp/sctp_probe.o
[@ 3.16.1]# cd ./net/sctp/
[@ sctp]# insmod sctp
insmod: ERROR: could not load module sctp: No such file or directory

2 个答案:

答案 0 :(得分:1)

首先,如果只有一个需要修改的模块,则不需要重建完整的内核代码库。您需要做的就是准备内核kconfig和makefile脚本一次,构建内核模块并加载和卸载它,执行以下步骤。

make menuconfig
make scripts && make prepare
make ./path/to/module/dir
cd ./path/to/module/dir
insmod <module name>
rmmod <module name>

或者,如果您正在寻找测试方法,重新启动和/或升级已修改的内核而不重新启动,请尝试使用kexecksplice

答案 1 :(得分:0)

您可以使用某些IDE,例如Eclipse。因此,您不必每次都构建整个项目并根据需要修改make文件。

因此,您只需要重新启动物理/虚拟机。