我正在修改现有的内核模块SCTP。我已经使它成为可加载的内核模块,以便我可以在运行时修改模块并进行测试。模块的Makefile是:
#
# Makefile for SCTP support code.
#
obj-$(CONFIG_IP_SCTP) += sctp.o
obj-$(CONFIG_NET_SCTPPROBE) += sctp_probe.o
sctp-y := sm_statetable.o sm_statefuns.o sm_sideeffect.o \
protocol.o endpointola.o associola.o \
transport.o chunk.o sm_make_chunk.o ulpevent.o \
inqueue.o outqueue.o ulpqueue.o command.o \
tsnmap.o bind_addr.o socket.o primitive.o \
output.o input.o debug.o ssnmap.o auth.o
sctp_probe-y := probe.o
sctp-$(CONFIG_SCTP_DBG_OBJCNT) += objcnt.o
sctp-$(CONFIG_PROC_FS) += proc.o
sctp-$(CONFIG_SYSCTL) += sysctl.o
sctp-$(subst m,y,$(CONFIG_IPV6)) += ipv6.o
当我运行make时,它正在创建3个文件sctp_probe.o, sctp.o and modules.order
。但sctp_probe.ko and sctp.ko
不是由上面的Makefile创建的。
如何修改上面的Makefile来创建这两个内核目标文件?
更新了@vinay hunachyal的答案的其他部分。
我试过这个方法。在诊断出一些错误之后。现在我在内核编译结束时遇到了这个错误。
depmod: WARNING: /lib/modules/3.16.1/kernel/fs/dlm/dlm.ko needs unknown symbol sctp_do_peeloff
sh ./arch/x86/boot/install.sh 3.16.1 arch/x86/boot/bzImage \
System.map "/boot"
depmod: WARNING: /lib/modules/3.16.1/kernel/fs/dlm/dlm.ko needs unknown symbol sctp_do_peeloff
答案 0 :(得分:1)
如果您要在kerenel树源中构建,那么在menuconfig
中,您需要选择Module代替Y
到M
make menuconfig
之后转到
Networking support --->
在这里转到
Networking options --->
如果y
更改为m
。
{y} The SCTP Protocol --->
将此更改为{M} The SCTP Protocol --->
这将使sctp-y
能够构建为dynamic module
而不是静态。
之后进入SCTP协议
<y> SCTP: Association probing change to The SCTP Protocol
这将使sctp_probe-y
能够构建为dynamic module
而不是静态。
最后保存并退出,现在构建
ELSE
执行以下操作
如果要构建外部源代码树。
将net / sctp / copy复制到kerenel源树外。
例如cp net / sctp / home / vinay / dd /。 -r
清理内核源代码树。
make clean
make dist clean
然后make menuconfig
make modules_prepare
取代KERNELDIR:= give path of configured kernel source tree
例如,如果/home/vinay/linux-x.x.x中的kerenel源代码
KERNELDIR:=/home/vinay/linux-x.x.x
**注意默认情况下应退出TAB并清除目标。
在Makefile的末尾添加以下行。
KERNELDIR:=<path to configured kernel source tree >
PWD:=$(shell pwd)
default:
<tab> $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
<tab> $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
这使构建变得简单
答案 1 :(得分:0)
据我了解内核makefile,这些文件将不会被创建,因为您已经特别要求内核make系统将该功能作为Kernel monolith的一部分。
如果你用m替换y,你就会得到内核模块。
请将sctp-y
替换为sctp-m
,依此类推。
答案 2 :(得分:0)
我很确定您的宏CONFIG_IP_SCTP和CONFIG_NET_SCTPPROBE没有&#34; m&#34;值,它们设置为&#34; y&#34;。 您可以在最终的.config文件中验证这些宏值。 这些宏应该定义如下
CONFIG_NET_SCTPPROBE=m
CONFIG_IP_SCTP=m
Thnaks