Changes between Version 8 and Version 9 of SujetTP3-2015


Ignore:
Timestamp:
Feb 28, 2015, 1:58:03 PM (10 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTP3-2015

    v8 v9  
    111111== Étape 2 : ajout des paramètres au module ==
    112112
    113 Votre driver devra être paramétré pour lui indiquer le numéro de ports utilisés pour les leds et les boutons.
    114 Dans un premier temps vous allez vous contenter d'indiquer le nombre de led et de boutons pour le module de test, mais il faudra être plus précis pour le vrai driver.
     113Votre driver devra être paramétré pour lui indiquer le numéro de ports utilisés pour les LEDS et les boutons.
     114Dans un premier temps vous allez vous contenter d'indiquer le nombre de LED et de boutons pour le module de test, mais il faudra être plus précis pour le vrai driver.
    115115
    116116Vous devez ajouter dans module.c (faite d'équivalent pour les boutons):
    117117{{{
    118118static int led;
    119 module_param(led, int, 0);
    120 MODULE_PARM_DESC(led, "Nombre de led");
     119module_param(LED, int, 0);
     120MODULE_PARM_DESC(LED, "Nombre de led");
    121121
    122122static int __init mon_module_init(void)
    123123{
    124124    printk(KERN_DEBUG "Hello World !\n");
    125     printk(KERN_DEBUG "led=%d !\n", led);
     125    printk(KERN_DEBUG "LED=%d !\n", LED);
    126126    return 0;
    127127}
     
    134134== Étape 3 : création d'un driver qui ne fait rien mais dans le noyau ==
    135135
    136 Votre driver va être intégré dans un module. Vous allez donc créer un module nommé `ledbtn` paramètré avec les numéros de ports pour les leds et les boutons. Vous utiliserez un nouveau répertoire. Vous modifierez le Makefile en conséquence.
     136Votre driver va être intégré dans un module. Vous allez donc créer un module nommé `ledbtn` paramétré avec les numéros de ports pour les LEDS et les boutons. Vous utiliserez un nouveau répertoire. Vous modifierez le Makefile en conséquence.
    137137
    138138* Vous ajoutez dans le fichier `.c` du module:
     
    155155read_ledbtn(struct file *file, char *buf, size_t count, loff_t *ppos) {
    156156    printk(KERN_DEBUG "read()\n");
    157     return 0;
     157    return count;
    158158}
    159159
     
    161161write_ledbtn(struct file *file, const char *buf, size_t count, loff_t *ppos) {
    162162    printk(KERN_DEBUG "write()\n");
    163     return 0;
     163    return count;
    164164}
    165165
     
    170170}
    171171}}}
    172 * Vous allez enregistrer ce driver dans ce module en ajoutant dans la fonction init du module:
    173 
    174 {{{
    175 register_chrdev(0, "ledbtn" &fops_ledbtn); // 0 est le numéro majeur qu'on laisse choisir par linux
     172* Vous allez enregistrer ce driver dans ce module en ajoutant la fonction d'enregistrement dans la fonction init du module. Vous devez aussi prendre en compte les paramètres. C'est à vous de décider comment.
     173
     174{{{
     175int major = register_chrdev(0, "ledbtn" &fops_ledbtn); // 0 est le numéro majeur qu'on laisse choisir par linux
    176176}}}
    177177* Vous allez décharger le driver dans ce module en ajoutant dans la fonction init du module:
    178178
    179179{{{
    180 unregister_chrdev(0, "ledbtn");
     180unregister_chrdev(major, "ledbtn");
     181}}}
     182
     183* Vous devez compiler, déplacer le module (upload) et le charger (insmod).
     184* Vous allez chercher dans le fichier `/proc/devices` le numéro `major` choisi par linux.
     185* vous allez maintenant créer le noeud dans le répertoire `/dev`et le rendre accessible par tous.
     186  Le numéro mineur est 0 car il n'y a qu'une seule instance.
     187
     188{{{
     189sudo mknod /dev/ledbtn c major 0
     190sudo chmod a+rw /dev/ledbtn
     191}}}
     192
     193Le test de votre driver peut se faire par les commandes suivantes (avant de faire un vrai programme):
     194
     195{{{
     196$ echo "rien" > /dev/ledbtn
     197$ dd bs=1 count=1 < /dev/ledbtn
     198$ dmesg
    181199}}}
    182200
    183201== Étape 4 : accès aux GPIO depuis les fonctions du pilote ==
    184202
     203[à suivre]