Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ linux/kernel.h:没有这样的文件或目录_C++_Linux_Gcc_Makefile_Header Files - Fatal编程技术网

C++ linux/kernel.h:没有这样的文件或目录

C++ linux/kernel.h:没有这样的文件或目录,c++,linux,gcc,makefile,header-files,C++,Linux,Gcc,Makefile,Header Files,我将在Ubuntu10.10(内核为2.6.35-28-generic)中编写一个Hello World模块。标题位于: /usr/src/linux-headers-2.6.35-28-generic 你好,c: #include <linux/kernel.h> #include <linux/module.h> int init_module(void) { printk("Hello, world\n"); return 0; } void

我将在Ubuntu10.10(内核为2.6.35-28-generic)中编写一个Hello World模块。标题位于:

/usr/src/linux-headers-2.6.35-28-generic
你好,c:

#include <linux/kernel.h> 
#include <linux/module.h>

int init_module(void)
{
    printk("Hello, world\n");
    return 0;
}

void cleanup_module(void)
{
    printk("Goodbye\n");
}
生成时出错

hello.c:1:致命错误:linux/kernel.h:没有这样的文件或目录 编译终止


如何解决此问题?

您是否有指向/usr/src/linux-headers-2.6.35-28-generic的/usr/src/linux符号链接? 如果没有,则使用以下命令创建一个

# cd /usr/src
# ln -sfn linux-headers-2.6.35-28-generic linux

对我来说,这个文件(“linux/kernel.h”)在linux-libc-dev(Kubuntu 10.10)包中。

你不能只使用传统风格的
Makefile
和linux内核模块;虽然你可能会强迫某些东西工作,但这将是一次痛苦的经历

首先阅读
文档/kbuild/modules.txt
文件;它将准确地描述您在编写模块
Makefile
时需要做什么,以便它可以灵活地挂接到内核的
Kbuild
环境中。您的
Makefile
可能会如下所示:

ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
obj-m  := 8123.o
8123-y := 8123_if.o 8123_pci.o 8123_bin.o

else
# normal makefile
KDIR ?= /lib/modules/`uname -r`/build

default:
    $(MAKE) -C $(KDIR) M=$$PWD

# Module specific targets
genbin:
    echo "X" > 8123_bin.o_shipped

endif

请相信我;虽然您可能会认为,让自己的
Makefile
正常工作只是“一个小小的改变”,但即使是内核版本中的微小更改,也会再次彻底破坏您的构建。现在花一个小时为您的模块编写一个兼容的
Kbuild
Makefile
。当引入
Kbuild
基础设施时,我浪费了数周的时间试图维护一个预先存在的
Makefile
。每一个新内核都会让我损失数小时的工作效率。

正如@sarnold所说,您应该使用不同的Makefile。如下所示:

obj-m+=hello.o

全部: make-C/lib/modules/$(shell uname-r)/buildm=$(PWD)模块

并使用以下命令:

insmod hello.ko


安装此模块。

我创建了:ivan@ivan-MS-N031:/usr/src$ls-l总计73080 lrwxrwxrwx 1根src 31 2011-04-10 14:57 linux->linux-headers-2.6.35-28-generic但仍出现错误…Ooops。。。在中有一个空格,我没有做空格,我已经完成了这里写的所有内容,但仍然出现错误:hello.c:1:致命错误:linux/kernel.h:没有终止此类文件或目录编译。libc是c编程语言的库。这怎么会影响linux/module.h?@shbk我指的是关于“linux/kernel.h”而不是module.h的错误消息。在这里你可以看到包裹的内容:伙计,这是工作吗?我已经完成了所有你们选择作为解决方案的答案。但我仍然得到“linux/kernel.h”这样的文件。我浏览了整个互联网,但没有成功。我用的是ubuntu 10.04是的。发布时问题中的代码有一个简单的错误:
#include
中有空格字符(“”),因为我刚刚用简单的驱动程序示例从HTML页面复制了代码。第二个问题由我标记为解决方案的答案解决。检查您创建的链接是否有效并遵循正确的路径,检查路径/usr/src/linux headers-$(uname-r)是否存在。
ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
obj-m  := 8123.o
8123-y := 8123_if.o 8123_pci.o 8123_bin.o

else
# normal makefile
KDIR ?= /lib/modules/`uname -r`/build

default:
    $(MAKE) -C $(KDIR) M=$$PWD

# Module specific targets
genbin:
    echo "X" > 8123_bin.o_shipped

endif