2015-11-02 2 views
1

J'ai un module de noyau de travail que j'installe manuellement avec la commande insmod/modprobe comme appris en lisant le livre. Cependant, je me demandais s'il y avait moyen de le faire automatiquement après la compilation - Donc, fondamentalement, comment automatiser insmod/modprobe commande?pouvons-nous installer le module du noyau avec le fichier make

Mon modprobe a un fichier dépendant thread_module.o ainsi

Mon Makefile jusqu'à présent

obj-m := wakeup_counter.o 
obj-m += thread_module.o 
$INSTALL_MOD_PATH = /lib/modules/2.6.32-5-amd64/ 

all: 
    make -C /lib/modules/2.6.32-5-amd64/build M=$(PWD) modules 

install: 
    make $(INSTALL_MOD_PATH) =/build modules_install 
clean: 
    make -C /lib/modules/2.6.32-5-amd64/build M=$(PWD) modules 

sortie après l'exécution: make install

[email protected]:/home/xyz/Desktop/Drivers/symbols# make install 
make -C /lib/modules/2.6.32-5-amd64/build M=/home/xyz/Desktop/Drivers/symbols modules_install 
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-5-amd64' 
    INSTALL /home/xyz/Desktop/Drivers/symbols/thread_module.ko 
    INSTALL /home/xyz/Desktop/Drivers/symbols/wakeup_counter.ko 
    DEPMOD 2.6.32-5-amd64 
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-5-amd64' 

Edit: Après avoir traversé les commentaires et https://www.kernel.org/doc/Documentation/kbuild/modules.txt J'ai essayé d'ajouter la commande d'installation, mais je ne vois aucun module dans le chemin de compilation - Aussi à haut niveau je reçois ce que nous écrivons dans l'invite de cmd nous tapons Makefile mais si quelqu'un peut donner un exemple cela m'aiderait à comprendre avec un joli cas de référence.

+1

L'installation du logiciel est généralement effectuée par 'make install' commande. Créez simplement la cible "install" dans votre makefile et placez toutes les actions nécessaires dans ses recettes. – Tsyvarev

+0

Oui, et appelez 'make ... modules_install'. – 0andriy

+0

Toute commande que vous pouvez exécuter dans le shell de commande, vous pouvez ajouter cette action en tant que règles pour une cible dans makefile. – cm161

Répondre

1
obj-m := wakeup_counter.o 
obj-m += thread_module.o 

KDIR = /lib/modules/2.6.32-5-amd64/build 

all: 
    make -C $(KDIR) M=$(PWD) modules_install 

clean: 
    make -C $(KDIR) M=$(PWD) clean 

Exemple d'instruction de shell de commande utilisé comme règle dans le Makefile:

install: 
    modprobe wakeup_counter 
    modprobe thread_module 
+0

Merci pour la réponse - il y avait un petit changement que je devais faire au lieu de modules_install - je devais le changer en modules ..mais avec vos étapes a souligné je comprends mieux les choses .. merci beaucoup pour la réponse – thedreamer

1

Amélioration de la réponse publié par @ cm161 pour les futurs utilisateurs de mettre en évidence les étapes exactes qui ont travaillé pour moi

Avec ci-dessous Makefile utiliser les étapes suivantes

Étape 1: make (tapez simplement make commande) - pour la création de modules à savoir les fichiers .ko et les fichiers associés

Étape 2: make install

Étape 3: maintenant ne lsmod vous devriez être en mesure de voir les nouveaux modules

obj-m := wakeup_counter.o 
obj-m += thread_module.o 

KDIR = /lib/modules/2.6.32-5-amd64/build 

all: 
    make -C $(KDIR) M=$(PWD) modules 
    cp wakeup_counter.ko /lib/modules/2.6.32-5-amd64/ 
    cp thread_module.ko /lib/modules/2.6.32-5-amd64/ 

install: 
    modprobe wakeup_counter 
    modprobe thread_module 

clean: 
    make -C $(KDIR) M=$(PWD) clean 
+0

Vous pouvez automatiser copie de.ko fichiers à travers le makefile en ajoutant des règles «cp» pour «tous» la cible comme suit: tous: faire .... cp wakeup_counter.ko $ (DEST_DIR) /. cp thread_module.ko $ (DEST_DIR) /. où DEST_DIR = /lib/modules/2.6.32-5-amd64 – cm161

+0

True !! - mis à jour la réponse en conséquence – thedreamer