centos7内核模块编译报错

问题背景
使用Makefile完成Linux内核模块程序的编译,出现了一下问题

代码结构

|-firewall
|------log.h
|------log.c
|------demo.c    // 引入log.h
|------Makefile

Makefile文件

ifneq ($(KERNELRELEASE),)
    obj-m += firewall.o
    firewall-objs := demo.o log.o

else      
    KDIR := /lib/modules/$(shell uname -r)/build
    PWD:= $(shell pwd)

    SUBDIRS := log

all:
    make -C $(KDIR) M=$(PWD) modules

clean:
    rm -f *.ko *.o *.mod.o *.mod.c *.symvers

endif  

报错

make -C /lib/modules/3.10.0-693.el7.x86_64/build M=/root/work/firewall/source modules
make[1]: 进入目录“/usr/src/kernels/3.10.0-693.el7.x86_64”
  CC [M]  /root/work/firewall/source/demo.o
In file included from /root/work/firewall/source/demo.c:7:0:
/root/work/firewall/source/log.h:4:19: 致命错误:stdio.h:没有那个文件或目录
 #include <stdio.h>
                   ^
编译中断。
make[2]: *** [/root/work/firewall/source/demo.o] 错误 1
make[1]: *** [_module_/root/work/firewall/source] 错误 2
make[1]: 离开目录“/usr/src/kernels/3.10.0-693.el7.x86_64”
make: *** [all] 错误 2

由上述可知,报错原因致命错误:stdio.h:没有那个文件或目录,但是系统是包含stdio.h文件的,位置在

find / -name "stdio.h"
/usr/include/bits/stdio.h
/usr/include/stdio.h

并且执行gcc -c test.c是成功的,文件内容如下

/*
*@file test.c 测试stdio.h存在于系统
*/
#include <stdio.h>
int main() {
}

问题
综上所述,根本原因不是缺少stdio.h文件,而是Makefile文件有问题,哪位大神能指点一下?(打字不易,非诚勿扰

阅读 3.4k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进