【问题标题】:Linux kernel module compilingLinux内核模块编译
【发布时间】:2011-05-03 02:15:31
【问题描述】:

我尝试编译简单的linux内核模块:

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

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

void cleanup_module(void)
{
        printk(KERN_ALERT "Goodbye world 1.\n");
}

我的生成文件:

obj-m = testmodule.o
KVERSION = $(shell uname -r)
all:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

现在我的 .c 文件中没有错误。

但是当我在终端中尝试 make 时:make: Nothing to be done for `all'。

怎么了?

谢谢。

【问题讨论】:

    标签: c linux kernel kernel-module


    【解决方案1】:

    makefile 中的默认命令是

    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
    

    这指示 make cd 到 /lib/modules/$(KVERSION)/build 并运行

    make module m=YOUR_CURRENT_DIR
    

    反过来,该 makefile 没有找到任何可做的事情。据推测,该 makefile 期望在您的当前目录中找到一些特定的结构。

    您需要更仔细地阅读引导您设置此 makefile 的所有说明。

    【讨论】:

    • 我遇到了同样的问题。将命令放入命令行时工作正常,不使用make。结果我的编辑器在复制Makefile 时放置了空格而不是制表符。
    【解决方案2】:

    你确实没有提供足够的信息来确定正确的答案,但我会给你一些东西来研究。

    你是如何编译它的?您的构建中有正确的包含路径吗?构建路径使用 gcc 的 -I 选项指定。确保您指向您的内核源代码树。

    您是否构建了内核?当您执行make 时,会设置某些允许您构建的东西。执行make 不会构建所有内容(如模块),但会为您设置初始内容。

    【讨论】:

      【解决方案3】:

      确保您的发行版安装了提供这些包含文件的内核头文件/开发包。

      如果已安装,请搜索这些包含文件在您的计算机上的位置,并将这些目录添加到您的编译器包含搜索路径(-I 选项)。

      【讨论】:

        【解决方案4】:

        这是因为你的 Makefile 在给出 make 命令之前不包含选项卡

        make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
        

        所以通常你的文件应该如下所示:

        obj-m = test.o                                                                   
        
        KVERSION = $(shell uname -r)                                                     
        
        all:                                                                             
                make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules                  
        clean:                                                                           
                make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean  
        

        【讨论】:

          猜你喜欢
          • 2011-06-06
          • 2012-02-22
          • 2014-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-01
          相关资源
          最近更新 更多