Как передать параметры из makefile в исходный код модуля ядра Linux
у меня есть исходный код:
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hello world %in", BUILD_NUMBER);
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.n");
}
и makefile:
obj-m += hello-1.o
BUILD_NUMBER := 42
# How to pass BUILD_NUMBER to hello-1.c ???
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
теперь, как передать параметр BUILD_NUMBER из файла makefile в исходный код?
3 ответов
поскольку система сборки Linux использует ядро, предоставленные Makefiles, которые разумно не могут быть изменены. Я бы предложил поместить номер вашей версии непосредственно в исходный код, а не в Makefile.
есть вероятность мысли. Вы можете определить CPPFLAGS
переменные среды. Он должен быть передан файлом Makefile ядра в командную строку компилятора C. Если вы определяете эту переменную CPPFLAGS как -DVERSION=42
, может быть, вы можете использовать этот VERSION
макрос внутри источника файл.
all:
CPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
отметим, что CPPFLAGS
означает "флаги препроцессора C". Он не связан с C++.
после тестирования его. Это не работает. Однако есть решение. Файл Makefile ядра позволяет (и использует) определение переменной среды KCPPFLAGS, которая будет добавлена в файл Makefile ядра, определенный собственными CPPFLAGS.
вы должны использовать:
all:
KCPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD)
попробуйте добавить:
-DBUILD_NUMBER=$(BUILD_NUMBER)
в параметрах компилятора. Это должно иметь тот же эффект, что и определение BUILD_NUMBER
С #define
в коде.
в командной строке правильный способ передачи аргументов в gcc в соответствии сдокументация / kbuild / makefiles.txt установить CFLAGS_MODULE
.
например, для построения модулей в текущем каталоге с помощью BUILD_NUMBER=42
:
make CFLAGS_MODULE=-DBUILD_NUMBER=42 M="$PWD" modules
если вы хотите представить несколько -D
используйте одинарные кавычки:
make CFLAGS_MODULE='-DBUILD_NUMBER=42 -DSOME_OTHER_MACRO' M="$PWD" modules
Примечание: это не ограничивается установкой макросов, например, вы можете использовать CFLAGS_MODULE=-O0
.