Module de compilation du kernel Linux

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