Les drivers sur VxWorks

Frank Singhoff





I. Présentation

L'objectif du TP est de montrer comment réaliser un driver caractère avec VxWorks. Dans un premier temps, un exemple simplifié vous est donné. Puis, on vous demande d'écrire un driver gérant des fichiers en mémoire.

II. Exemple d'un driver caractères

L'exemple que vous allez manipuler est celui étudié en cours. Le code du driver est ici. Il est complété par le fichier d'entête demo.h. Vous disposez du fichier test_demo.c pour tester le driver.


Préparation :
  1. Compilez et chargez dans la cible les fichiers demoDrv.c, puis test_demo.c.
  2. Initialisez le driver sur la cible en invoquant la fonction demoDrv.

Questions :
  1. Quel est la primitive VxWorks permettant d'ajouter un nouveau driver dans l'exécutif ?
  2. Quel est la primitive VxWorks permettant de créer un nouveau périphérique ?
  3. Quelles sont les informations contenues dans le descripteur de périphérique ?
  4. Créer un périphérique dont le nom est /dev/montest.
  5. Effectuer sur /dev/montest une opération d'écriture, puis de lecture.
  6. Ajouter dans le driver une opération ioctl dont le nom est GET_OPEN et qui permet à l'utilisateur de récupérer le nombre actuel de tâches ayant ouvert le périphérique mais ne l'ayant pas encore refermé.

III. Réalisation d'un pseudo-driver

On souhaite écrire un driver qui permet aux utilisateurs d'exploiter des fichiers en mémoire. Pour ce faire, vous disposez des fichiers vfileDrv.c et vfile.h.



Question 1 : fonctionnalités de base du driver

Le driver doit fonctionner de la façon suivante :

  1. Le périphérique est constitué d'enregistrement de taille fixe. A la création du périphérique, la taille maximale des enregistrements est spécifiée. Le nombre d'enregistrement est borné par le driver (cf. MAX_ENR).

  2. L'état du fichier est défini par un offset (position courante de lecture/écriture) et d'une taille courante.

  3. L'opération d'ouverture accepte les modes suivants :

  4. Les contrôles suivants doivent être effectués par le driver

  5. Les fonctions ioctl suivantes doivent être implantées (cf. vfile.h):


On vous demande de :
  1. Complétez le fichier vfileDrv.c.
  2. Pour valider votre solution, vous pouvez utiliser le fichier test_vfile.c comme point de départ. Vous aurez besoin de connaitre les valeurs numériques des constantes O_RDONLY, O_WRONLY, O_RDWR, O_APPEND et O_TRUNC qui sont respectivement 0, 1, 2, 8 et 1024.


Question 2 : gestion de la concurrence


Contrairement à UNIX, dans VxWorks, le code d'un driver est réentrant et plusieurs tâches peuvent donc exécuter le code du driver sur un même périphérique de façon concurrente.

Travail à faire :






Page maintenue par Frank Singhoff (singhoff@univ-brest.fr)
Dernière mise à jour le 13 février 2002