2010-06-29 6 views
22

У меня проблема с командой modprobe ... Я скомпилировал мир hello module и загрузил его insmod, он отлично работает, и когда я делаю lsmod, я могу видеть его в вывода. Но когда я ввожу этот модуль с помощью modprobe я получаю фатальную ошибку:«FATAL: Module not found error» с помощью modprobe

[email protected]:/home/ravi# modprobe ./hello.ko 
FATAL: Module ./hello.ko not found. 
[email protected]:/home/ravi# 

Вот код модуля:

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

MODULE_LICENSE("Dual BSD/GPL"); 

static int hello_init(void) 
{ 
     printk(KERN_ALERT "Hello, world\n"); 
     return 0; 
} 
static void hello_exit(void) 
{ 
     printk(KERN_ALERT "Goodbye, cruel world\n"); 
} 

module_init(hello_init); 
module_exit(hello_exit); 

и 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 

ответ

23

Причины заключается в том, что modprobe смотрит в /lib/modules/$(uname -r) для модулей и, следовательно, не будет работать с локальным путем файла. Это одна из отличий между modprobe и insmod.

+0

, так что если я поместил свой модуль в каталог '/ lib/modules/$ (uname -r)', тогда он будет работать? –

+0

@ Ravi Gupta: Это было бы мое лучшее предположение. – che

+0

попробуйте положить его в/lib/modules/$ (uname -r)/misc/ –

2

Попробуйте insmod вместо загрузки модуля. Modprobe смотрит в каталоге модуля/Библиотеке/модулях/uname -r для всех модулей и других файлов

5

Самое лучшее, на самом деле использовать Makefile ядра для установки модуля:

Здесь есть являются фрагменты, чтобы добавить в свой Makefile

вокруг верхней добавить:

PWD=$(shell pwd) 
VER=$(shell uname -r) 
KERNEL_BUILD=/lib/modules/$(VER)/build 
# Later if you want to package the module binary you can provide an INSTALL_ROOT 
# INSTALL_ROOT=/tmp/install-root 

до конца добавить:

install: 
     $(MAKE) -C $(KERNEL_BUILD) M=$(PWD) \ 
      INSTALL_MOD_PATH=$(INSTALL_ROOT) modules_install 

, а затем вы можете оформить

sudo make install 

это поставит его или в/Lib/модулей/$ (uname -r)/дополнительные/

или/Библиотека/модули/$ (uname -r)/разное/

и запустить depmod надлежащим образом

0
Insert this in your Makefile 

$(MAKE) -C $(KDIR) M=$(PWD) modules_install      

it will install the module in the directory /lib/modules/<var>/extra/ 
After make , insert module with modprobe module_name (without .ko extension) 

ИЛИ

After your normal make, you copy module module_name.ko into directory /lib/modules/<var>/extra/ 

затем сделать Modprobe MODULE_NAME (без .ko расширения)

0

я думаю, что должно быть введите ваш your_module.ko в/lib/modules/uname -r /modules.dep и в/lib/modules/uname -r /modules.dep.bin для команды «modprobe your_module» для работы