在内核模块中预定义一个宏
Predefine a macro in kernel module
我想使用 -D
标志为我的内核模块定义一个宏,但我不知道如何在自定义可加载内核模块中执行此操作。
为了清楚起见,要将宏 TEST 设置为 1,我通常会这样做:
cc -D TEST=1 file.c -o file
在 file.c 里面我有
#if TEST
//do something
#endif
现在,在内核模块中有相同的代码,如何在不修改代码的情况下将 TEST 设置为 1?
这是我的 Makefile:
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
由于 -C
标志递归调用多个 makefile,添加 -D TEST=1
不起作用,我收到以下错误:
make: invalid option -- 'D'
有人知道如何解决这个问题吗?
提前致谢。
如@n.m 所建议。在评论中,解决方案是使用EXTRA_CFLAGS
。
所以在我的例子中它会是这样的:
all:
make EXTRA_CFLAGS=-DTEST=2 -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
或者干脆
EXTRA_CFLAGS:= -D TEST=2
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
我想使用 -D
标志为我的内核模块定义一个宏,但我不知道如何在自定义可加载内核模块中执行此操作。
为了清楚起见,要将宏 TEST 设置为 1,我通常会这样做:
cc -D TEST=1 file.c -o file
在 file.c 里面我有
#if TEST
//do something
#endif
现在,在内核模块中有相同的代码,如何在不修改代码的情况下将 TEST 设置为 1?
这是我的 Makefile:
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
由于 -C
标志递归调用多个 makefile,添加 -D TEST=1
不起作用,我收到以下错误:
make: invalid option -- 'D'
有人知道如何解决这个问题吗?
提前致谢。
如@n.m 所建议。在评论中,解决方案是使用EXTRA_CFLAGS
。
所以在我的例子中它会是这样的:
all:
make EXTRA_CFLAGS=-DTEST=2 -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
或者干脆
EXTRA_CFLAGS:= -D TEST=2
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules