【问题标题】:Linking Custom Library to Linux Kernel Module in the Makefile在 Makefile 中将自定义库链接到 Linux 内核模块
【发布时间】:2014-11-09 12:10:26
【问题描述】:

所以我正在尝试重构我之前编写的内核模块(通过将某些函数删除到不同的不同 .h/.c 文件中。这是我当前的 Makefile:


EXTRA_CFLAGS += 
KERNEL_SRC:= /lib/modules/$(shell uname -r)/build
SUBDIR= $(PWD)
GCC:=gcc
RM:=rm

.PHONY : clean

all: clean modules

obj-m:= kernel_module.o

modules:
    $(MAKE) -C $(KERNEL_SRC) M=$(SUBDIR) modules

clean:
$(RM) -f *.ko *.o *.mod.c Module.symvers 

当我尝试制作它时,我得到:错误:'ref_sleep' undeclared(在此函数中首次使用)。 如何修改 Makefile 以确保我的库正在编译,并且正确链接到我的内核模块?库需要在内核模块中定义变量是不值得的,反之亦然。

提前致谢。

【问题讨论】:

  • Offtopic:您可以在“干净”目标中使用以下内容而不是 $(RM) <...> 来删除构建期间生成的所有文件:“$(MAKE) -C $( KERNEL_SRC) M=$(SUBDIR) 清洁”。如果“干净”是现在的样子,一些文件可能仍然存在。

标签: linux-kernel makefile kernel kernel-module


【解决方案1】:

如果我正确理解了这个问题,您想从几个源文件(例如,source1.c、source2.c、source3.c)构建您的内核模块(例如,my_module.ko)。如果是这样,您可以在 Makefile 中进行如下操作:

obj-m := my_module.o
my_module-y := source1.o source2.o source3.o

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多