Как передать параметры из 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.