PatDef.fr

Accueil du site > Debian Linux > Linux Device Drivers > Compilation du module exemple scull

Compilation du module exemple scull

mercredi 19 novembre 2008, par patrick Deflandre

Comment compiler les fichiers sources du module scull décrit dans le chapitre 3 - Char Drivers pour un noyau Linux Debian 2.6.24-etchnhalf.1-amd64

Compilation du module scull :

1ère erreur :

*** CFLAGS was changed in .... Fix it to use EXTRA_CFLAGS.

Solution :

Remplacer les options de compilations CFLAGS par EXTRA_CFLAGS, et ajouter à la ligne de compilation cette nouvelle option.


CFLAGS += $(DEBFLAGS)
CFLAGS += -I$(LDDINC)

devient


EXTRA_CFLAGS += $(DEBFLAGS)
EXTRA_CFLAGS += -I$(LDDINC)

2nd erreur :

error: linux/config.h: Aucun fichier ou répertoire de ce type

Il faut supprimer la référence à linux/config.h

Il semble que ce fichier ait disparu depuis la version 2.6.19 du kernel. On modifie donc main.c de la façon suivante :

#include <linux/config.h>

devient

//#include <linux/config.h>

3ème erreur :


access.c: In function ‘scull_u_open’
access.c:106: error: dereferencing pointer to incomplete type
...
access.c: In function ‘scull_w_open’:
access.c:179: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)

Il faut ajouter dans access.c l’inclusion suivante :

#include <linux/sched.h>

J’ai donc modifié :


#include <asm/atomic.h>
#include <linux/list.h>

#include "scull.h"        /* local definitions */

en


#include <asm/atomic.h>
#include <linux/list.h>
#include <linux/sched.h>

#include "scull.h"        /* local definitions */

Test :

Il ne reste plus qu’à tester ce module fraîchement compilé.

On charge celui ci avec le script # scull_load, qui créer le fichier nécessaire dans le répertoire /dev.

On écrit dans le module avec par exemple la commande $ ls -l > /dev/scull0

On vérifie que l’écriture c’est bien passé en faisant une lecture avec la commande $ cat /dev/scull0

On doit alors obtenir à l’écran l’équivalent de la commande $ ls -l

Il ne reste plus qu’à décharger le module avec la commande # scull_unload

P.-S.

Je n’ai pas réussi à utiliser la commande # scull_init start. Je n’ai pas étudié pour l’instant ce problème.

Suivre la vie du site RSS 2.0 | Contactez-moi | Plan du site | SPIP