从多个源文件构建内核模块,其中一个源文件与模块具有相同的名称

Adr*_*ien 22 c linux makefile linux-kernel

是否可以从几个源文件构建内核模块,其中一个源文件与模块同名?

例如:我想使用以下源文件构建"mymodule.ko":
mymodule.c
mymodule_func.c

这个makefile不起作用:

#Makefile
obj-m += mymodule.o
mymodule-objs := mymodule.o mymodule_func.o
Run Code Online (Sandbox Code Playgroud)

谢谢

Adr*_*ien 19

我找到了一个解决方案,我将源文件放在子文件夹中:

Makefile
src/mymodule.c
src/mymodule_func.c

#Makefile
obj-m += mymodule.o
mymodule-objs := ./src/mymodule.o ./src/mymodule_func.o

all:
    make -C $(KERNEL_PATH) M=$(PWD) modules

clean:
    make -C $(KERNEL_PATH) M=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)


小智 10

在内核make文件中修复的正确方法如下:

# 
obj-m+= my_module.o

#append other source files except my_module.c which would be include by default
my_module-objs+= src1.o src2.o
Run Code Online (Sandbox Code Playgroud)


Gau*_*aju 5

根据我的理解,不可能使模块名称和源名称相同.最好提供模块名称,module.o并使用Makefile编译可加载的内核模块,如下所示,

Makefile文件

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
    **obj-m := module.o
        module-objs := mymodule.o mymodule_func.o**
    # Otherwise we were called directly from the command
    # line; invoke the kernel build system.
    EXTRA_CFLAGS += -DDEBUG
else
    KERNELDIR   := /lib/modules/$(shell uname -r)/build
    PWD         := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean: 
    $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)