make不是创建内核对象文件

时间:2014-08-20 09:51:04

标签: linux-kernel makefile kernel kernel-module

我正在修改现有的内核模块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

3 个答案:

答案 0 :(得分:1)

如果您要在kerenel树源中构建,那么在menuconfig中,您需要选择Module代替YM

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

/ home / vinay / dd / sctp /

取代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