2010-06-29 7 views
22

J'ai un problème avec la commande modprobe ... J'ai compilé le module hello world et l'ai chargé avec insmod, ça marche bien et quand je fais lsmod, je peux le voir dans le liste de sortie. Mais quand j'insérer ce module à l'aide modprobe Je reçois une erreur FATAL:"FATAL: Erreur module introuvable" en utilisant modprobe

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

Voici le code du module:

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

et 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 

Répondre

23

La raison est que modprobe regarde dans /lib/modules/$(uname -r) pour les modules et ne fonctionneront donc pas avec le chemin de fichier local. C'est l'une des différences entre modprobe et insmod.

+0

donc si je mets mon module dans le répertoire '/ lib/modules/$ (uname -r)' alors ça marchera? –

+0

@Ravi Gupta: Ce serait ma meilleure estimation. – che

+0

essayez de le placer dans/lib/modules/$ (uname -r)/misc/ –

2

Essayez insmod au lieu de modprobe. Modprobe recherche dans le répertoire des modules/lib/modules/uname -r pour tous les modules et autres fichiers

5

La meilleure chose est d'utiliser réellement le makefile du noyau pour installer le module:

Voici est-sont extraits à ajouter à votre Makefile

autour du sommet ajouter:

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 

vers la fin ajouter:

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

et vous pouvez émettre

sudo make install 

cela mettre soit dans/lib/modules/$ (uname -r)/extra/

ou/lib/modules/$ (uname -r)/misc/

et exécuter depmod appropriée

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) 

OU

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

puis faites modprobe module_name (sans .ko extension)

0

je pense qu'il devrait y avoir entrée de votre your_module.ko dans/lib/modules/uname -r /modules.dep et dans/lib/modules/uname -r /modules.dep.bin pour que la commande "modprobe your_module" fonctionne

Questions connexes