我试图通过创建名为的源文件(cc_newreno.c
位于/usr/src/sys/netinet/cc
)的副本cc_newreno_mod.c
并对其进行更改来修改 FreeBSD (NewReno) 中的默认拥塞控制算法。
假设我做了一些修改。我如何测试它们?直接编译cc_newreno_mod.c
(使用内置的 C 编译器)会导致多个错误,其中一些错误看起来很奇怪(例如netinet/cc/cc_module.h file not found
,尽管文件显然在那里)。
我应该构建一个新内核吗?更改后的文件中的模块会自动创建吗?或者我完全错了,我应该采取不同的方法?
答案1
为了编译内核模块,您应该创建Makefile
并包含内核模块 makefile,/usr/src/share/mk/bsd.kmod.mk
例如:
# Note: It is important to make sure you include the <bsd.kmod.mk> makefile after declaring the KMOD and SRCS variables.
# Declare Name of kernel module
KMOD = module
# Enumerate Source files for kernel module
SRCS = module.c
# Include kernel module makefile
.include <bsd.kmod.mk>
最后运行 make 来编译它,这样您就可以测试它是否正确编译。
由于它没有出现在内核模块 ( /boot/kernel/*.ko
) 中,但它列在sys/conf/files
我认为您应该重新编译内核以应用更改。欲了解更多信息,你可以看到这个页。由于它是副本,因此cc_newreno.c
您可以将原始副本重命名/usr/src/sys/netinet/cc/cc_newreno.c
为其他名称以保存它,将新副本复制到那里并重新编译。
答案2
netinet 目前不是内核模块,因此我建议将修改后的文件添加到 sys/conf/files 中。