1
/*
 *  hello-1.c - The simplest kernel module.
 */

#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */

int init_module(void)
{
        printk(KERN_INFO "Hello world 1.\n");

        /*
         * A non 0 return means init_module failed; module can't be loaded.
         */
        return 0;
}

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

制作文件

obj-m += hello.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 -C /lib/modules/2.6.32-358.el6.x86_64/build M=/home/hello modules
make: *** /lib/modules/2.6.32-358.el6.x86_64/build: No such file or directory.  Stop.
make: *** [all] Error 2
4

2 回答 2

3

make 命令中的 -C 选项指示将目录更改为 -C 提供的目录。在您的情况下,它是 /lib/modules/2.6.32-358.el6.x86_64/build。但是当它尝试更改到该目录时,编译会出现“没有这样的文件或目录”的错误,这意味着您在 /lib/modules/2.6.32-358.el6.x86_64/ 处没有构建目录。

很多时候,给定路径中的构建可能不是目录,但它可能是指向内核源代码目录的软链接。

因此,您需要检查是否应该在包含内核源代码的所需路径中存在构建目录,或者它应该是内核源代码的软链接。

于 2013-10-03T10:24:12.557 回答
0

除了所有这些与构建相关的注释之外,在编写内核模块时您必须遵循的事项很少。即使您修复了这些构建问题,您的代码也不会像您预期的那样工作。为什么?您已经构建了 init 和 cleanup 例程,但是您没有指定/指示哪个是您的 init 例程,哪个是 cleanup。

你必须这样做,

在文件末尾添加这两行。

module_init ( foo_init_fn);

module_exit ( bar_exit_fn);

此外,您必须指定模块许可证详细信息等,如下所示

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Copyright (c) 2006 by xxxx xxxxx, Inc.");

MODULE_DESCRIPTION("klm_vdc");
于 2013-10-04T11:43:16.250 回答