我有这个引导任务,我必须在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有关的事情吗?
答案 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