J'ai un problème avec la commande modprobe
... J'ai compilé le module hello world et je l'ai chargé avec insmod
, cela fonctionne bien et lorsque je fais lsmod
, je peux le voir dans la liste de résultats. Mais quand j'insère ce module en utilisant modprobe
, j'obtiens une erreur FATAL:
root@okapi:/home/ravi# modprobe ./hello.ko
FATAL: Module ./hello.ko not found.
root@okapi:/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
La raison en est que modprobe
cherche dans /lib/modules/$(uname -r)
pour les modules et ne fonctionnera donc pas avec le chemin du fichier local. C'est l'une des différences entre modprobe
et insmod
.
La meilleure chose à faire est d’utiliser le makefile du noyau pour installer le module:
Voici des extraits à ajouter à votre Makefile
en haut 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 alors vous pouvez délivrer
Sudo make install
cela le mettra soit dans/lib/modules/$ (uname -r)/extra /
ou/lib/modules/$ (uname -r)/misc /
et exécuter depmod de manière appropriée
Essayez insmod
au lieu de modprobe. Modprobe Cherche dans le répertoire du module/lib/modules/uname -r
tous les modules et autres fichiers
je pense qu'il devrait y avoir une entrée de 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
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)
OR
After your normal make, you copy module module_name.ko into directory /lib/modules/<var>/extra/
puis modprobe nom_du_module (sans l'extension .ko)
Assurez-vous que votre réseau est arrêté avant de charger le module:
Sudo stop networking
Cela m'a aidé - https://help.ubuntu.com/community/UbuntuBonding