2016-01-25 250 views
0

我不能明白爲什麼insmod的給Invalid parameters錯誤(不能看到任何dmesg):無法用insmod程序hello_world內核模塊中的debian 8

$ sudo insmod hello.ko 
insmod: ERROR: could not insert module hello.ko: Invalid parameters 

$ sudo insmod /hello.ko 
insmod: ERROR: could not load module /hello.ko: No such file or directory 

我有我的模塊中沒有參數。這只是你好世界的例子。

我的環境:

$ uname -r 
3.16.0-4-amd64 

我已經安裝了所有可能的內核頭文件包:

linux-headers-3.16.0-4-all 
linux-headers-3.16.0-4-all-amd64 
linux-headers-3.16.0-4-amd64 
linux-headers-3.16.0-4-common 
linux-headers-amd64 

我的代碼:

#include <linux/module.h> /* Needed by all modules */ 
#include <linux/kernel.h> /* Needed for KERN_INFO */ 

int init_module(void) 
{ 
    printk(KERN_INFO "Hello world 1.\n"); 
    return 0; 
} 

void cleanup_module(void) 
{ 
    printk(KERN_INFO "Goodbye world 1.\n"); 
} 

MODULE_LICENSE("GPL"); 

我用以下Makefile

obj-m += hello.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輸出:

$使

make -C /lib/modules/3.16.0-4-amd64/build M=/home/user/c.driver/driver-1 modules 
make[1]: Entering directory '/usr/src/linux-headers-3.16.0-4-amd64' 
Makefile:10: *** mixed implicit and normal rules: deprecated syntax 
make[1]: Entering directory `/usr/src/linux-headers-3.16.0-4-amd64' 
    CC [M] /home/user/c.driver/driver-1/hello.o 
    Building modules, stage 2. 
    MODPOST 1 modules 
    CC  /home/user/c.driver/driver-1/hello.mod.o 
    LD [M] /home/user/c.driver/driver-1/hello.ko 
make[1]: Leaving directory '/usr/src/linux-headers-3.16.0-4-amd64' 

更新:與14.04.1 Ubuntu的

+1

你試過insmod的hello.ko不insmod的./hello.ko? – Maquefel

+0

模塊加載失敗的原因通常是在'dmesg'消息中解釋的。覈實。 – Tsyvarev

+0

@Tsyvarev我知道,但沒有任何內核模塊相關。最後一個 - 「Parallels Linux共享文件夾文件系統驅動1.2.1加載」。它可能是由Parallels引起的嗎? VM在Parallels Desktop下運行。 – avasin

回答

0

也許同樣的結果,那是因爲你忘了

module_init(init_module);               
module_exit(cleanup_module); 

我通常會聲明init_module()和cleanup_module()作爲一個靜態函數。 和fellowing代碼是我的內核模塊模板:

#include <linux/module.h> 
#include <linux/kernel.h> 

static int init_module(void) 
{ 
    ... 
    return 0; 
} 

static void exit_module(void) 
{ 
    ... 
} 

module_init(init_module); 
module_exit(exit_module); 
MODULE_LICENSE("GPL");