5 votes

Compilation des modules du noyau Linux

J'essaie de compiler un simple module de noyau linux :

#include <linux/module.h>    
#include <linux/kernel.h>       

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 make dans le terminal : make : Rien à faire pour `all'.

Qu'est-ce qu'il y a ?

Merci.

5voto

bmargulies Points 49855

La commande par défaut dans votre makefile est

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules

Cela indique à make de se rendre dans /lib/modules/$(KVERSION)/build et d'exécuter

make module m=YOUR_CURRENT_DIR

A son tour, ce makefile ne trouve rien à faire. Vraisemblablement, ce makefile s'attend à trouver une structure particulière dans votre répertoire courant.

Vous devez lire plus attentivement les instructions qui vous ont conduit à mettre en place ce makefile.

0voto

LinuxStuff Points 71

C'est parce que votre Makefile ne contient aucune tabulation avant de donner la commande make

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

0voto

Starkey Points 7030

Vous ne donnez vraiment pas assez d'informations pour déterminer la bonne réponse, mais je vais vous donner quelques éléments à examiner.

Comment le compilez-vous ? Avez-vous le bon chemin d'inclusion dans votre compilation ? Les chemins de compilation sont spécifiés avec l'option -I à gcc. Assurez-vous que vous pointez vers l'arbre des sources de votre noyau.

Avez-vous construit le noyau ? Quand vous faites un make certaines choses sont mises en place qui vous permettent de construire. Faire un make ne construit pas tout (comme les modules) mais vous fournira la configuration initiale.

0voto

sth Points 91594

Assurez-vous que vos distributions ont installé les paquets d'en-tête/de développement du noyau qui fournissent ces fichiers inclus.

S'ils sont installés, recherchez l'emplacement de ces fichiers d'inclusion sur votre ordinateur et ajoutez ces répertoires au chemin de recherche d'inclusion de votre compilateur (l'option -I option).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X