红联Linux门户
Linux帮助

Linux编写内核模块编译时找不到头文件

发布时间:2013-05-02 15:27:33来源:红联作者:土贼他哥土匪
我在编译以下一个简单的内核模块时,



C/C++ code
?


12345678910111213

#include //所有模块都需要的头文件#include // init&exit 相关宏MODULE_LICENSE("GPL");static int __init hello_init (void){printk("Hello module init\n");return 0;}static void __exit hello_exit (void){printk("Hello module exit\n");}module_init(hello_init);module_exit(hello_exit);

用了gcc -D__KERNEL__ -DMODULE -DLINUX -I /usr/src/linux-headers-2.6.32-24/include h.c命令。

其中 /usr/src/linux-headers-2.6.32-24/include是我的内核源码include路径,h.c是源码文件。执行完后出现以下错误
In file included from /usr/src/linux-headers-2.6.32-24/include/linux/list.h:6,
from /usr/src/linux-headers-2.6.32-24/include/linux/module.h:9,
from h.c:1:
/usr/src/linux-headers-2.6.32-24/include/linux/prefetch.h:14:27: error: asm/processor.h: 没有那个文件或目录
/usr/src/linux-headers-2.6.32-24/include/linux/prefetch.h:15:23: error: asm/cache.h: 没有那个文件或目录
In file included from /usr/src/linux-headers-2.6.32-24/include/linux/module.h:9,
from h.c:1:
/usr/src/linux-headers-2.6.32-24/include/linux/list.h:7:24: error: asm/system.h: 没有那个文件或目录
底下还有一大堆,都是“asm/***.h: 没有那个文件或目录”这样的错误
我看了下,是我包含的那两个头文件里面包含了prefetch.h这个头文件,然后prefetch.h又包含了asm/processor.h等等。但是我去include里面找,能找到processor.h这个文件,但是不是在asm文件夹下面。也没有asm这个文件夹。这怎么回事?

我现在连这个最简单的内核模块都运行不起来,求各位高手指点下。
还是说我编译内核模块的方法不对?
文章评论

共有 4 条评论

  1. guozhiquan 于 2013-11-23 13:09:08发表:

    看看Makfile文件里面引入的内核头文件路径合适不

  2. guozhiquan 于 2013-11-23 13:07:10发表:

    Makefile 文件呢?

  3. MORR 于 2013-05-03 08:32:53发表:

    帮你顶个

  4. 土贼他哥土匪 于 2013-05-02 15:29:26发表:

    不好意思,上面代码有点乱,看这个[code]#include //所有模块都需要的头文件
    #include // init&exit 相关宏
    MODULE_LICENSE("GPL");
    static int __init hello_init (void)
    {
    printk("Hello module init\n");
    return 0;
    }
    static void __exit hello_exit (void)
    {printk("Hello module exit\n");
    }
    module_init(hello_init);
    module_exit(hello_exit);[/code]