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)
根据我的理解,不可能使模块名称和源名称相同.最好提供模块名称,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)
归档时间: |
|
查看次数: |
16233 次 |
最近记录: |