2017-09-19 6 views
0

Je suis débutant de Linux et avoir un problème à propos de makefile J'ai cherché sur Internet, mais cela n'a pas fonctionné pour moi J'utilise ubuntu 16.04v, et la question est sur le problème sur pg. 96-99, affectation de programmation 1, livre des Concepts du Système d'Exploitation 9ème.Makefile très basique linux

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

int simple init(void) 
{ 
printk(KERN INFO "Loading Module\n"); 
return 0; 
} 

void simple exit(void) 
{ 
printk(KERN INFO "Removing Module\n"); 
} 

module init(simple init); 
module exit(simple exit); 

MODULE LICENSE("GPL"); 
MODULE DESCRIPTION("Simple Module"); 
MODULE AUTHOR("SGG"); 

Ceci est le code, et le problème est le suivant.

Ce module du noyau simple.c est compilé en utilisant le Makefile accompagnant le code source avec ce projet. Pour compiler le module, entrez le suivant sur la ligne de commande: make

La compilation produit plusieurs fichiers. Le fichier simple.ko représente le module de noyau compilé . L'étape suivante illustre l'insertion de ce module dans le noyau Linux.

mais je n'ai aucune idée comment faire pour être compilé avec Makefile. J'ai essayé plusieurs fois mais je ne trouve pas pourquoi. peut-être qu'un autre code doit être accompagné? STP dis moi.

+1

Avez-vous le fichier makefile avec vous? Peux tu poster cela ici? Avez-vous des en-têtes de noyau et des sources installés sur la machine sur laquelle vous compilez ce pilote? – Gaurav

+2

"en utilisant le Makefile accompagnant le code source" ceci indique que vous devriez avoir un fichier appelé 'Makefile'. Mettez ce fichier à côté du code source, puis dans le terminal dans le dossier écrire 'make' –

+0

@ HansPetterTaugbølKragset je l'ai eu. Mais quelle est l'erreur de l'OP? Si OP peut publier l'erreur, il nous sera utile de fournir quelques informations. – Gaurav

Répondre

2

Cela peut être utile pour votre squelette Makefile:

obj-m += hello-1.o 

all: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

Taken de http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

Aussi, assurez-vous d'avoir les en-têtes du noyau installé

3

Ceci est très basique. Si vous avez une source c, vous devez compiler. Afin de compiler et de lier makefile est utilisé. Vous pouvez simplement écrire votre propre makefile pour compiler votre module de chargement. C'est dit.


Ceci est l'exemple très générique du module de chargement de noyau simple que vous pouvez modifier les noms de fichiers source et le chemin.


Faites simplement vi Makefile.

modèle makefile

obj-m = hello.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 

enregistrer et fermer le fichier. Avant cela, n'oubliez pas d'éditer le nom de votre module de chargement.


Informations sur le makefile ci-dessus

  1. Makefile première ligne est appelée une définition des objectifs et définit le module à construire hello.o.par exemple obj-m définit un objectif de module chargeable

  2. Le $(shell uname -r) est un appel utile pour retourner le build noyau version actuelle

  3. Ensuite, l'affectation des variables M=$(PWD) indique la commande make où les dossiers de projet existent

Informations détaillées sur Compiling Linux Kernel Modules.