内核模块构建失败:sys / types.h:没有这样的文件或目录

时间:2014-08-31 06:10:13

标签: linux gcc kernel-module

由于缺少.h文件,我无法构建内核模块。我正在Ubuntu 14.04上构建模块。

这是我使用的make文件:

$ cat Makefile 
obj-m += my_module.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

这是'make'的输出:

$ make
make -C /lib/modules/3.13.0-34-generic/build M=/home/user/location modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-34-generic'
  CC [M]  /home/user/location/my_module.o
/home/user/location/my_module.c:2:23: fatal error: sys/types.h: No such file or directory
 #include <sys/types.h>
                       ^
compilation terminated.

文件sys / types.h存在:

/usr/include/x86_64-linux-gnu/sys/types.h

包含它的测试程序编译:

$ cat test.c 
#include <sys/types.h>
#include <stdio.h>

int main()
{
    printf ("test\n");
    return 0;
}
$ gcc -o test test.c 
$ 

我查看了几个帖子并确保安装了libc6-dev和build-essential。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

当您开发Linux内核模块时,您应该忘记标准C库(Glibc)的舒适性。相反,您将不得不使用内核C. 所以,你应该写

#include <linux/types.h>

它将解决问题。