J’essaie de comstackr un module kernel Linux simple:
#include #include int init_module(void) { printk("Hello world 1.\n"); return 0; } void cleanup_module(void) { printk(KERN_ALERT "Goodbye world 1.\n"); }
Mon makefile:
obj-m = testmodule.o KVERSION = $(shell uname -r) all: make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules clean: make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
Maintenant, je n’ai pas d’erreurs dans mon fichier .c.
Mais quand j’essaie de faire en terminal: make: rien à faire pour “tous”.
Qu’est-ce qui ne va pas?
Je vous remercie.
La commande par défaut dans votre makefile est
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
Cela demande de faire cd à / lib / modules / $ (KVERSION) / build et exécuter
make module m=YOUR_CURRENT_DIR
À son tour, ce fichier makefile ne trouve rien à faire. Vraisemblablement, ce makefile s’attend à trouver une structure particulière dans votre répertoire actuel.
Vous devez lire plus attentivement les instructions qui vous ont amené à configurer ce fichier Make.
Vous ne donnez vraiment pas assez d’informations pour déterminer la bonne réponse, mais je vous donnerai quelques éléments à examiner.
Comment le comstackz-vous? Avez-vous le chemin d’inclusion correct dans votre build? Les chemins de génération sont spécifiés avec l’option -I
à gcc. Assurez-vous de pointer vers l’arbre source de votre kernel.
Avez-vous construit le kernel? Lorsque vous faites un make
, certaines choses sont configurées pour vous permettre de créer. Faire une make
ne construit pas tout (comme les modules), mais vous obtenez la configuration initiale.
Assurez-vous que vos dissortingbutions contiennent les packages d’en-tête / développement du kernel installés qui fournissent ces fichiers d’inclusion.
S’ils sont installés, recherchez les fichiers à inclure sur votre ordinateur et ajoutez ces répertoires à votre compilateur. Chemin de recherche include (option -I
).
C’est parce que votre Makefile ne contient aucun onglet avant de donner la commande
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
Donc normalement votre fichier devrait être comme ci-dessous:
obj-m = test.o KVERSION = $(shell uname -r) all: make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules clean: make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean