Logiciels Libres et Systèmes Embarqués

Pilote de périphérique sous Linux

Table des matières

Introduction

Le sujet de ce projet est de créer un pilote de périphérique factice sous un noyau Linux 2.6. Etant donné que l'on n'accédera pas directement à un vrai périphérique, nous utiliserons la mémoire centrale afin de simuler son comportement. Ainsi, lorsque l'on écrira vers le périphérique, notre pilote devra enregistrer ces données, et être capable de nous les restituer lors d'une prochaine lecture. Il est à noter que l'écriture se fera dans un fichier spécial différent de celui de la lecture, et que notre pilote devra être capable de gérer ainsi plusieurs paires de fichiers spéciaux (une par périphérique).

Lors de son chargement, le pilote devra prendre en compte deux paramètres:

Ainsi son chargement avec la commande :
insmod dummy.ko DeviceName="VinMart" DeviceCount=3
produira les entrées suivantes (en supposant que le système nous ai assigné le majeur 253) :
crw-rw-rw-  1 root root 253, 1 1970-01-01 01:00 /dev/VinMart_R0
crw-rw-rw-  1 root root 253, 3 1970-01-01 01:00 /dev/VinMart_R1
crw-rw-rw-  1 root root 253, 5 1970-01-01 01:00 /dev/VinMart_R2
crw-rw-rw-  1 root root 253, 0 1970-01-01 01:00 /dev/VinMart_W0
crw-rw-rw-  1 root root 253, 2 1970-01-01 01:00 /dev/VinMart_W1
crw-rw-rw-  1 root root 253, 4 1970-01-01 01:00 /dev/VinMart_W2
Ainsi, ce qui est écrit dans VinMart_Wx doit être lisible dans VinMart_Rx mais pas dans VinMart_Ry. Il faut préciser que la lecture est destructrive, c'est à dire que la mémoire utilisée pour stocker les données est libérée lors de la lecture. Nous avons pris la décision que les fichiers spéciaux avec un numéro de mineur paire était ceux d'écriture, et donc que les fichiers spéciaux avec un numéro de mineur impaire était ceux de lecture.

En ce qui concerne ce rapport, nous ne nous attarderons pas sur "comment faire un pilote de périphérique sous Linux", puisqu'il s'agirait ni plus ni moins de paraphraser le cours. En revanche, nous nous pencherons dans les sections suivantes sur ce que l'on considère spécifique à notre travail personnel. Enfin, nous invitons le lecteur à consulter la page de Doxygenation du source dummy.c pour tout ce qui concerne la description de notre code, ainsi que la page de Doxygenation de l'entête dummy.h pour tout ce qui concerne les structures de données et les variables globales.

Avertissement:
Il faudra bien éviter la confusion entre les périphériques et les fichiers spéciaux. Ce qui veut dire qu'il y a DeviceCount périphériques pour 2xDeviceCount fichiers spéciaux.
aller à la section suivante