Я sh для компиляции двух модулей ядра (вне дерева), которые совместно используют общую библиотеку: module1. c использует функции из библиотеки. c и module2. c также использует функции из библиотеки. c. Но библиотека. 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) устанавливаются перед вызовом make-файла.
Этот make-файл создает следующий вывод:
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 is компилируется дважды для каждого модуля, который его использует. Итак, есть два разных объекта «my_variables», которые живут независимо, чего я хочу избежать.
Как я могу сначала изменить Makefile, скомпилировать библиотеку. c => library.o, затем использовать тот же library.o для компиляции каждого модуля ядра?
Большое спасибо.