Changes between Version 2 and Version 3 of SujetTP2-2018


Ignore:
Timestamp:
Feb 16, 2018, 7:41:00 AM (7 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTP2-2018

    v2 v3  
    159159
    160160
    161 Votre driver devra être paramétré pour lui indiquer le numéro de ports utilisés pour les LEDS et les boutons.
    162 Dans un premier temps vous allez vous contenter d'indiquer le nombre de LED et de bouton pour le module de test, mais il faudra être plus précis pour le vrai driver.
    163 
    164 **Vous devez ajouter** dans module.c (faite d'équivalent pour les boutons):
     161* Votre driver devra être paramétré pour lui indiquer le numéro de ports utilisés pour les LEDS et les boutons.
     162  Dans un premier temps vous allez vous contenter d'indiquer le nombre de LED et de bouton pour le module de test, mais il faudra être plus précis pour le vrai driver.
     163* **Vous devez ajouter** dans module.c (faite d'équivalent pour les boutons):
    165164{{{#!c
    166165static int LED;
     
    175174}
    176175}}}
    177 Le paramètre est défini au moment de l'insertion.
     176* Le paramètre est défini au moment de l'insertion.
    178177{{{#!sh
    179178$ sudo insmod ./module.ko LED=2
    180179}}}
    181 
    182180* **Questions** :
    183181  * Comment **voir** que le paramètre a bien été lu ?
     
    295293  }}}
    296294
     295
     296
    297297== Étape 4 : accès aux GPIO depuis les fonctions du pilote ==
    298298
    299 Nous devons pouvoir accéder aux registres de configuration des GPIO.
    300 * Pour l'accès aux GPIOs, vous voyez que l'on peut simplifier les calculs d'adresses en utilisant une structure représentant l'organisation des registres.
    301 * Vous noterez également que l'adresse physique de base des GPIO (GPIO_BASE 0x20200000) est mappée dans l'espace virtuel du noyau à l'adresse '''io_addresse''' et récupérer avec la macro du noyau `__io_address()`.
    302 
     299
     300
     301=== Création du driver qui accède aux GPIO
     302
     303* Nous devons pouvoir accéder aux registres de configuration des GPIO.
     304  * Pour l'accès aux GPIOs, vous voyez que l'on peut simplifier les calculs d'adresses en utilisant une structure représentant l'organisation des registres.
     305  * Vous noterez également que l'adresse physique de base des GPIO (GPIO_BASE 0x20200000) est mappée dans l'espace virtuel du noyau à l'adresse '''io_addresse''' et récupérer avec la macro du noyau `__io_address()`.
    303306{{{#!c
    304307#include <linux/module.h>
     
    328331*gpio_regs = (struct gpio_s *)__io_address(GPIO_BASE);
    329332}}}
    330 
    331 Les deux fonctions `gpio_fsel()` et `gpio_write()` possibles sont données juste après. Vous pouvez voir comment exploiter la structure.
    332 Nous vous laissons le soin de faire `gpio_read()`, puis d'invoquer ces fonctions dans les fonctions `open_ledbp()`, `read_ledbp()`, etc.
    333 
     333* Les deux fonctions `gpio_fsel()` et `gpio_write()` possibles sont données juste après. Vous pouvez voir comment exploiter la structure.
     334* Vous devez écrire `gpio_read()`, puis invoquer ces fonctions dans les fonctions `open_ledbp()`, `read_ledbp()` et write_ledbp`.
    334335{{{#!c
    335336static void gpio_fsel(int pin, int fun)
     
    350351}}}
    351352
    352 == Étape 5 : Usage d'un timer dans le noyau pour faire clignoter (optionnel) ==
    353 
    354 Le code suivant fait clignoter la led GPIO04.
    355 Vous pouvez adapter votre driver, pour demander un clignotement plutôt qu'un allumage.
    356 En effet, il existe un moyen de faire faire périodiquement une fonction au système grâce à une file d'attente temporelle.
    357 Inspirez-vous de code pour votre pilote.
    358 
     353=== Travail à faire
     354
     355* Ecrivez le driver complet.
     356* Un script de chargement.
     357* un programme de validation utilisant le driver.
     358
     359
     360
     361== Étape 5 (optionnel) : Usage d'un timer dans le noyau pour faire clignoter la led ==
     362
     363* Le code suivant fait clignoter la led GPIO04.\\
     364  Vous pouvez adapter votre driver, pour demander un clignotement plutôt qu'un allumage.
     365  En effet, il existe un moyen de faire faire périodiquement une fonction au système grâce à une file d'attente temporelle.
     366* Le code ci-dessous n'est pas un pilote, il fait clignoter la led dès son insertion dans le noyau, mais vous pouvez vous en inspirer pour votre pilote.
     367* La gestion du timer passe par les fonction `setup_timer()` et `mod_timer()`, vous devez en chercher la documentation.
    359368{{{#!c
    360369#include <linux/module.h>