【发布时间】:2014-09-26 18:11:55
【问题描述】:
我正在从事 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
【问题讨论】:
-
如果您的代码是可加载模块的一部分,则无需编译内核,只需使用“make modules_install”和“insmod”来测试内核中的唯一功能。另请注意,如果您修改了部分静态内核源代码,则需要按照上述步骤进行操作
-
如果您正在开发的模块是现有内核代码库的一部分或您正在编码的新内容,最好在您的描述中添加。
-
@askb 它是现有内核代码库的一部分。
-
@RatDon 那么提供的步骤应该会有所帮助,要检查您的模块是否已加载模块,请检查 .ko(内核对象)文件的目录。它更容易使用
make menuconfig。按包括将模块代码包含为内核的一部分, 排除, 模块化,即创建一个单独的 .ko。 -
@Ratdon,是的 - 这取决于您是要将功能构建为内核映像 (vmlinux) 的一部分还是可加载模块,一旦内核启动就可以加载该模块。跨度>
标签: linux-kernel kernel kernel-module