找不到Obj-m命令

时间:2012-09-19 17:28:18

标签: linux module

我有这个引导任务,我必须在Linux VM(版本2.6)中运行,我正在尝试使用此文件

test_module.c

/*
*   test module.
*/

#include <linux/module.h>
#include <linux/config.h>
#include <linux/init.h>

MODULE_LICENSE("GPL");

static int __init initialization_routine(void) {

printk ("Hello, world!\n");

return 0;
}

static void __exit cleanup_routine(void) {

printk ("Unloading module!\n");
}

module_init(initialization_routine);
module_exit(cleanup_routine);

然后我应该能够在这个make文件上使用make命令

生成文件

    make:
         obj-m += test_module.o

但它一直给我错误的obj-m找不到。我在网上看了,似乎找不到任何东西。为了获得对象模块命令,我必须安装一些东西吗?这是我与gcc有关的事情吗?

4 个答案:

答案 0 :(得分:0)

当你使用obj-m作为命令时,它不应该在目标之后列出。

编译模块的最简单方法是遵循this guide,或者在您的情况下只需复制它们的简单makefile,这样可以非常方便地构建它;

obj-m += test_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

答案 1 :(得分:0)

我不确定这是你的情况,但是当用户尝试运行包含“... make:obj-m + = test_module.o”的文件时,经常会出现“obj-m:not found”。 相反,在“Makefile”中输入“... make:obj-m + = ...”内容并在此目录中运行命令“make”。

答案 2 :(得分:0)

->您可以编写如下的C程序:

test_mod.c

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

int init_module(void)
{
    printk("Hello All\n This is a test init\n");
    return 0;
}

void cleanup_module(void)
{
    printk("Good Bye");
}

->制作目标文件:

echo "obj-m := test_mod.o" > Makefile

->通过运行进行编译:

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

->如下加载模块:

insmod ./test_mod.ko

查看输出:

dmesg | tail

->卸载模块: rmmod test_mod.ko

答案 3 :(得分:0)

它说找不到命令,因为它不是命令。

运行echo "obj-m := test_mod.o" > Makefile

,然后如下编译:

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