0

J'apprends la programmation de modules noyau Linux. J'utilise Beaglebone noir pour ça. J'ai fait une application simple 'Hello World' et makefile. J'ai vérifié mon makefile c'est correct. Mais quand je commande 'make', il me donne l'erreur suivante:Erreur de compilation pour la programmation du module noyau Linux

[email protected]:/home/sonu# make 
make: Warning: File `Makefile' has modification time 2.2e+02 s in the future 
make -C /lib/modules/3.8.13-bone70/build M=/home/sonu modules 
make: *** /lib/modules/3.8.13-bone70/build: No such file or directory. Stop. 
make: *** [all] Error 2 

Bien que j'ai référé quelques sites Web. Mais, tout ce qu'ils me demandent d'installer des paquets. Comme je suis un débutant. Je ne sais même pas comment configurer et démarrer une connexion internet sur Beaglebone en utilisant ethernet. S'il vous plaît aidez-moi, je suis coincé. Merci d'avance.

code est:

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

static int __init hello(void) 
{ 
    printk(KERN_INFO "Hello World!"); 
    return 0; 
} 

static void __exit hello_cleanup(void) 
{ 
    printk(KERN_INFO "Bye"); 
} 

module_init(hello); 
module_exit(hello_cleanup); 

Makefile est:

obj-m+=Hello.o 

all: 
     make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 
     $(CC) Hello.c -o test 
clean: 
     make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 
     rm test 
+1

Vous demandez de l'aide, mais vous ne donnez pas le Makefile lui-même (la supposition que c'est correct est * probablement * faux) et il n'y a pas non plus de code (ce qui n'est probablement pas si mal que le Makefile). – tambre

+0

@tambre J'ai vérifié plusieurs fois mon makefile. Je suis sûr qu'il n'y a pas de faute. Pour votre commodité, j'ai le code ci-joint. Passer au travers. –

+3

Mieux. Toujours une bonne idée de l'attacher même si vous pensez qu'il n'y a pas de faute - cela pourrait être utile pour comprendre ce qui se passe. Maintenant, le répertoire '/ lib/modules/3.8.13-bone70/build' existe-t-il? – tambre

Répondre

3

Il semble que vous essayez de construire votre module pour une version du noyau que vous ne l'avez pas installé le en-têtes pour.

Au lieu d'appeler uname directement dans vos règles, il est utile de mettre cela en une variable, vous pouvez passer outre:

obj-m+=Hello.o 

KSRC := /lib/modules/$(shell uname -r)/build 

all: 
     make -C $(KSRC) M=$(PWD) modules 
     $(CC) Hello.c -o test 
clean: 
     make -C $(KSRC) M=$(PWD) clean 
     rm test 

Maintenant, vous pouvez remplacer l'emplacement réel de vos en-têtes du noyau:

make KSRC=/usr/src/linux-headers-4.9.2 all 

Vous pouvez simplifier le Makefile plus loin avec un fourre-tout règle:

obj-m+=Hello.o 

KSRC := /lib/modules/$(shell uname -r)/build 

all: modules 
     $(CC) Hello.c -o test 

%: 
     make -C $(KSRC) M=$(PWD) [email protected] 

clean:: 
     make -C $(KSRC) M=$(PWD) clean 
     $(RM) test 
+0

Malheureusement, je ne peux pas voir le dossier 'linux-headers-xxx' dans/usr/src. Maintenant, pour résoudre tout cela, j'ai besoin d'installer des 'en-têtes linux'.Mais je ne peux pas le faire sans connexion internet. Y a-t-il une solution de contournement? –

+0

Vous aurez besoin de savoir où se trouvent les en-têtes, pour la version que vous voulez construire. Nous ne pouvons pas faire grand-chose pour vous les trouver maintenant. –

+0

Toute commande pour trouver les en-têtes? Je suis coincé. Je ne peux pas aller plus loin. –