无法用insmod程序hello_world内核模块中的debian 8

问题描述:

我不能明白为什么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

也许同样的结果,那是因为你忘了

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");