编译共享代码的多个内核模块

问题描述 投票:0回答:1

我希望编译两个共享公共库的内核模块(不在树中):module1.c使用来自library.c的函数,module2.c也使用来自library.c的函数。但是,library.c实现了一个全局变量“ my_variable”,需要在module1.c和module2.c之间共享。

目前,我有以下Makefile:

# List of files
obj-m   += my_module1.o my_module2.o

my_module1-objs := library.o module1.o
my_module2-objs := library.o module2.o

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

$(KERNEL_DIR)和$(PWD)在调用makefile之前已设置。

该makefile产生以下输出:

CC library.o
CC module1.o
LD my_module1.o
CC library.o
CC module2.o
LD my_module2.o
CC my_module1.mod.o
LD my_module1.ko
CC my_module2.mod.o
LD my_module2.ko

library.c对使用它的每个模块进行两次编译。因此,有两个不同的“ my_variables”对象独立存在,我想避免这种情况。

如何修改Makefile,首先编译library.c => library.o,然后使用相同的library.o来编译每个内核模块?

非常感谢。

c linux makefile module kernel
1个回答
0
投票

没有看到您的代码,很难确切看到正在发生的事情。

但是据我了解,您有两个单独的模块进行编译(包括库)。由于它们是分开的,因此它们将具有自己的变量副本。

如果要共享变量,则需要在一个模块中使用EXPORT_SYMBOL,然后在另一个模块中使用extern-类似this

© www.soinside.com 2019 - 2024. All rights reserved.