wiki:SujetTP3

TP3 : Pilotage d'un écran LCD en mode noyau

Dans ce TP on vous demande de réaliser un pilote Linux de type caractère. Ce pilote doit permettre l'utilisation d'un afficheur LCD depuis l'espace utilisateur par simples écritures.

Par exemple on doit pouvoir écrire la commande suivante dans un terminal:

$ echo "Hello World!" > /dev/lcd0

ou /dev/lcd0 est le fichier spécial dans /dev qui représente le périphérique afficheur LCD.

1. Débuter avec les modules (i.e. pilotes Linux) et leur compilation

Commencez par récupérer les sources du TP:

$ cp -r /users/enseig/jpeeters/m1.peri/lab3 .

Ensuite réaliser d'abord un simple module qui affiche un message au chargement et un autre message au déchargement du module.

Pour compiler le module, n'oubliez pas de sourcer le fichier de configuration pour la chaine de compilation croisée:

$ source /users/enseig/jpeeters/m1.peri/export_rpi_toolchain.sh

Pour compiler votre module, tapez la commande make dans un terminal à la racine du dossier lab3.

Après avoir copier le module compilé (bcm2708_lcd.ko) sur la carte Raspberry Pi, chargez le module comme suit:

$ insmod ./bcm2708_lcd.ko

Vérifiez l'affichage de votre message de chargement en tapant la commande dmesg.

Pour décharger le module, utilisez la commande rmmod:

$ rmmod bcm2708_lcd

Vérifiez l'affichage de votre message de déchargement en tapant à nouveau la commande dmesg.

2. Initialisation/déinitialisation du module

Ajouter le code nécessaire à l'initialisation de votre module. Cela comprend:

  1. L'obtention dynamique d'un nombre majeur (i.e. major number)
  2. L'allocation mémoire (kzalloc) de la structure de donnée du pilote (i.e. variable globale bcm2708_lcd_p).
  3. Initialiser le chardev avec cdev_init
  4. Enregistrer le chardev dans le noyau avec cdev_add
  5. Initialiser l'afficheur LCD

Ajouter également le code réciproque pour la déinitialisation. Cela comprends:

  1. Déinitialiser l'afficheur LCD
  2. Déenregistrer le chardev du noyau avec cdev_del
  3. Libérer libérer le nombre majeur
  4. Déalloué la mémoire associée à la structure de donnée du pilote (kfree).

N'oubliez pas de gérer les cas d'erreurs. Une part importante de la notation sera allouée sur ce point.

Questions:

  • Quel est le nombre majeur associé au pilote et comment le récupère-t-on ?
  • Comment créer le fichier /dev/lcd0 associé au pilote que vous avez créé ?
  • Proposer un moyen de tester que l'initialisation et la déinitialisation fonctionnent correctement.

3. Appels systèmes (open, release, write)

Pour que votre pilote soit utile, il faut qu'il puisse intéragir avec le monde utilisateur. Dans notre cas, il faut au moins implémenter les appels systèmes open, release et write.

Questions:

  • Implémentez ces trois appels système
  • Proposer une méthode de test pour valider leur fonctionnement.

4. Application utilisateur

Reprenez votre application utilisateur du TP précédent et modifiez la pour utiliser votre pilote. Pour cela, ouvrez et écrivez le fichier /dev/lcd0 au lieu de manipuler les GPIOs directement.

Last modified 10 years ago Last modified on Feb 10, 2014, 8:50:06 PM