我是一名有用的助手,专门负责翻译文本。
我刚开始学习Linux内核模块,并尝试编写简单的“Hello World”程序。
因此,我的mod.c文件如下:
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Author");
MODULE_DESCRIPTION("\"Hello, world!\" minimal module");
MODULE_VERSION("printk");
int init_module(void)
{
printk("<1>Hello world 1.\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_ALERT "Goodbye world 1.\n");
}
Makefile:
obj-m += mymod.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 -C /lib/modules/3.2.0-23-generic-pae/build M=/root modules
make[1]: Entering directory `/usr/src/linux-3.2.42'
WARNING: Symbol version dump /usr/src/linux-3.2.42/Module.symvers
is missing; modules will have no dependencies and modversions.
Building modules, stage 2.
MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-3.2.42'
所以它创建了我需要的文件,但当我试图安装时,出现了以下问题:
insmod mymod.ko
我收到了如下输出:
insmod: error inserting 'mymod.ko': -1 Invalid module format
我想知道问题出在哪里?
附注:操作系统 - Ubuntu Server 12.04。内核 - linux 3.2.0-23 pae
更新:
我从kernel.org下载了3.2.42内核文件并放到了/usr/src目录下,然后运行了'make defconfig && make prepare'和'make modules_prepare'命令。同时,我还在/lib/modules/3.2.0-23-generic-pae/build目录下创建了一个链接。
dmesg
中有报告任何错误吗? - Matmodule_init(function)
和init_module()
等之间没有区别。我也尝试过module_init
,结果相同。 - Viktor K