2

我有这个必须在 Linux VM(2.6 版)中运行的入门任务,我正在尝试获取这个文件

测试模块.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

4 回答 4

0

当它不是时,您将obj-m其用作命令,它不应该在您正在执行的目标之后列出。

编译模块的最简单方法是遵循本指南,或者在您的情况下,只需复制其简单的 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
于 2012-09-19T17:41:59.850 回答
0

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

于 2016-12-02T12:58:46.163 回答
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

于 2020-03-26T12:36:23.363 回答
0

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

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

然后编译如下:

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

于 2020-03-26T14:43:39.710 回答