2016-01-25 6 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' 

Update: тот же результат с 14.04.1-Ubuntu

+1

вы пробовали insmod hello.ko не insmod ./hello.ko? – Maquefel

+0

Обычно причины сбоев при загрузке модуля объясняются в сообщениях 'dmesg'. Проверь это. – Tsyvarev

+0

@ Цыварев я знаю, но ничего не связано с модулями ядра. Последний - '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"); 

 Смежные вопросы

  • Нет связанных вопросов^_^