Skip to topic | Skip to bottom
Home
Minfo06
Minfo06.TpAsy4r1.2 - 19 Oct 2006 - 11:23 - GuillaumeChazaraintopic end

Start of topic | Skip to actions

Rappels TP précédents

  • Faites en sorte que les images disque soient accessible à tout le monde en écriture :

ssh rl153643@madrid chmod g+w /var/tmp/centos-3.8
ssh ar109855@agadez chmod g+w /var/tmp/centos-3.8
ssh al303166@tombouctou chmod g+w /var/tmp/centos-3.8

L'interface ioctl

Le module que vous allez écrire aujourd'hui se contrôle uniquement avec l'interface ioctl, il va donc falloir écrire les outils de contrôle en C en mode utilisateur (mais quand même dans l'émulateur).

Cahier des charges

Écrivez un module qui implémente un pilote caractère pour un périphérique virtuel de calculette simple, accompagné d'un petit programme en mode utilisateur pour tester le périphérique.

Fonctionnement du périphérique virtuel :

  • Uniquement des ioctls
  • 4 opérations : + - * /
  • Trois ioctls en mode écriture : pour passer les deux opérandes et l'opérateur
  • Une quatrième ioctl en lecture : pour lire le résultat
  • Une cinquième ioctl en écriture : pour passer en une seule fois les deux opérandes et l'opérateur
  • Une sixième en lecture/écriture : pour écrire les opérandes, l'opérateur et récupérer le résultat

Indications

  • Définissez les constantes pour les commandes ioctl dans un fichier d'en-tête partagé entre le code du module en espace noyau et le code utilisateur qui va manipuler le périphérique. Utilisez les macros _IOWR, _IOW, _IOR pour définir les constantes, par exemple : #define OPERANDE1 _IOW('C', 0, int)
    • Les valeurs des constantes d'ioctl sont sans importance tant qu'il n'y a pas d'ambigüité, par convention on encode des informations dans ce numéro de cette façon : _IOW(type, code, taille)
      • type : caractère indiquant le type d'ioctl. Ici 'C' pour calculette.
      • code : le code de la commande en question : 0, 1, 2, 3 ...
      • taille : en spécifiant le type passé en paramètre, le sizeof sera fait automatiquement.
    • Ces valeurs décodées ne sont pas utilisée par Linux, mais permettent au pilote d'effectuer des traitements génériques sur les ioctls. Par exemple, pour une ioctl en lecture seule, le pilote pourra vérifier que la zone mémoire devant être lue est bien lisible. Vous pouvez aussi totalement ignorer la signification des numéros et effectuer un traitement spécifique pour chaque numéro (conviendra pour ce TP).
  • Le programme utilisateur se contentera d'ouvrir le fichier spécial (open(2)), d'effectuer des ioctls avec les bons paramètres, et d'afficher les résultats.
  • Pour les quatre premières ioctls, des types simple suffiront, mais il faudra passer en paramètre des structures pour les autres ioctls. Les types primitifs peuvent être manipulés directement en mode noyau contrairement aux pointeurs qui doivent être manipulés avec get_user/put_user.
  • La méthode ioctl surchargée devra donc aiguiller selon la commande (3ème argument).

-- GuillaumeChazarain - 18 Oct 2006
to top


You are here: Minfo06 > TpAsy4

to top

Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback