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): |
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()`. |
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. |