Ras*_*sen 11 linux gcc kernel module makefile
我有源代码:
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hello world %i\n", BUILD_NUMBER);
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
Run Code Online (Sandbox Code Playgroud)
和一个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
Run Code Online (Sandbox Code Playgroud)
现在如何将BUILD_NUMBER参数从makefile传递给源代码?
Did*_*set 11
由于Linux构建系统使用内核提供的Makefiles,这些Makefile可以合理地不被更改.我建议将您的版本号直接放在源代码中而不是Makefile中.
有可能想到.您可以定义CPPFLAGS
环境变量.它应该由内核Makefile传递给C编译器命令行.如果将此CPPFLAGS变量定义为-DVERSION=42
,则可以VERSION
在源文件中使用此宏.
all:
CPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)
注意,CPPFLAGS
代表"C PreProcessor FLAGS".它与C++无关.
经过测试后.这不起作用.但是有一个解决方案.内核Makefile允许(并使用)KCPPFLAGS环境变量的定义,该变量将被添加到内核Makefile中定义自己的CPPFLAGS.
你必须使用:
all:
KCPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD)
Run Code Online (Sandbox Code Playgroud)