首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法用KBUILD_CFLAGS_MODULE编译内核模块

无法用KBUILD_CFLAGS_MODULE编译内核模块
EN

Unix & Linux用户
提问于 2022-03-15 10:50:49
回答 1查看 645关注 0票数 1

我很难用新内核用KBUILD_CFLAGS_MODULE编译内核模块。编译器给我显示了一个奇怪的错误。这类构建过去用于我的旧内核(5.5),但在我的5.16内核中不再起作用。

下面是一个最小的可重现性示例:

虚拟模块:

代码语言:javascript
复制
#include 
#include 
#include 
MODULE_LICENSE("GPL");
static int __init lkm_example_init(void) {return 0;}
static void __exit lkm_example_exit(void){}
module_init(lkm_example_init);
module_exit(lkm_example_exit);

Makefile:

代码语言:javascript
复制
TARGET ?= test
obj-m += ${TARGET}.o
KBUILD_CFLAGS_MODULE := "-O1" "-mcmodel=medium" # Examples
.PHONY: all
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

如果我注释掉KBUILD_CFLAGS_MODULE行,我的构建工作。

但是,如果未注释我的编译在此错误消息中失败:

代码语言:javascript
复制
make TARGET=test 
make -C /lib/modules/5.16.0/build M=/home/user/test modules
make[1]: Entering directory '/home/user/linux'
  CC [M]  /home/user/test/test.o
In file included from ./include/linux/module.h:22,
                 from /home/user/test/test.c:2:
./include/linux/module.h:183:39: error: expected ',' or ';' before 'KBUILD_MODFILE'
  183 | #define MODULE_FILE MODULE_INFO(file, KBUILD_MODFILE);
      |                                       ^~~~~~~~~~~~~~
./include/linux/moduleparam.h:26:47: note: in definition of macro '__MODULE_INFO'
   26 |   = __MODULE_INFO_PREFIX __stringify(tag) "=" info
      |                                               ^~~~
./include/linux/module.h:183:21: note: in expansion of macro 'MODULE_INFO'
  183 | #define MODULE_FILE MODULE_INFO(file, KBUILD_MODFILE);
      |                     ^~~~~~~~~~~
./include/linux/module.h:230:34: note: in expansion of macro 'MODULE_FILE'
  230 | #define MODULE_LICENSE(_license) MODULE_FILE MODULE_INFO(license, _license)
      |                                  ^~~~~~~~~~~
/home/user/test/test.c:4:1: note: in expansion of macro 'MODULE_LICENSE'
    4 | MODULE_LICENSE("GPL");
      | ^~~~~~~~~~~~~~
make[2]: *** [scripts/Makefile.build:287: /home/user/test/test.o] Error 1
make[1]: *** [Makefile:1846: /home/user/test] Error 2
make[1]: Leaving directory '/home/user/linux'
make: *** [Makefile:6: all] Error 2

你知道这个问题的根本原因是什么吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-03-15 11:20:46

从文档中可以看出这一点,但是您应该添加到KBUILD_CFLAGS_MODULE中。将声明更改为

代码语言:javascript
复制
KBUILD_CFLAGS_MODULE += "-O1" "-mcmodel=medium" # Examples

建筑就能运作了。

构建失败的根本原因是KBUILD_CFLAGS_MODULE丢失了最初的-DMODULE内容,这扰乱了这个MODULE_FILE声明

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/694476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档