我剛開始學習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");
}
的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
使outout:
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。 OS - Ubuntu Server 12.04。內核 - Linux的3.2.0-23 PAE
UPDATE:
我從kernel.org內核3.2.42下載並把它放在/ usr/src目錄並沒有 '使defconfig & &做準備', 'make modules_prepare'。另外我在/lib/modules/3.2.0-23-generic-pae/build中創建了鏈接。
在'dmesg'中報告的任何錯誤? – Mat
您是否真的在該src樹中編譯了內核? – delicateLatticeworkFever
@Mat,沒有錯誤 –