我刚刚开始学习 linux 内核模块并尝试编写简单的 Hello world 程序。
所以 mymod.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");
}
生成文件:
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
所以我想知道是什么问题?
PS。操作系统 - Ubuntu 服务器 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 中创建了链接。