Changes between Version 8 and Version 9 of SujetTP3-2015
- Timestamp:
- Feb 28, 2015, 1:58:03 PM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SujetTP3-2015
v8 v9 111 111 == Étape 2 : ajout des paramètres au module == 112 112 113 Votre driver devra être paramétré pour lui indiquer le numéro de ports utilisés pour les ledset les boutons.114 Dans un premier temps vous allez vous contenter d'indiquer le nombre de ledet de boutons pour le module de test, mais il faudra être plus précis pour le vrai driver.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. 115 115 116 116 Vous devez ajouter dans module.c (faite d'équivalent pour les boutons): 117 117 {{{ 118 118 static int led; 119 module_param( led, int, 0);120 MODULE_PARM_DESC( led, "Nombre de led");119 module_param(LED, int, 0); 120 MODULE_PARM_DESC(LED, "Nombre de led"); 121 121 122 122 static int __init mon_module_init(void) 123 123 { 124 124 printk(KERN_DEBUG "Hello World !\n"); 125 printk(KERN_DEBUG " led=%d !\n", led);125 printk(KERN_DEBUG "LED=%d !\n", LED); 126 126 return 0; 127 127 } … … 134 134 == Étape 3 : création d'un driver qui ne fait rien mais dans le noyau == 135 135 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 ledset les boutons. Vous utiliserez un nouveau répertoire. Vous modifierez le Makefile en conséquence.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. 137 137 138 138 * Vous ajoutez dans le fichier `.c` du module: … … 155 155 read_ledbtn(struct file *file, char *buf, size_t count, loff_t *ppos) { 156 156 printk(KERN_DEBUG "read()\n"); 157 return 0;157 return count; 158 158 } 159 159 … … 161 161 write_ledbtn(struct file *file, const char *buf, size_t count, loff_t *ppos) { 162 162 printk(KERN_DEBUG "write()\n"); 163 return 0;163 return count; 164 164 } 165 165 … … 170 170 } 171 171 }}} 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 linux172 * 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 {{{ 175 int major = register_chrdev(0, "ledbtn" &fops_ledbtn); // 0 est le numéro majeur qu'on laisse choisir par linux 176 176 }}} 177 177 * Vous allez décharger le driver dans ce module en ajoutant dans la fonction init du module: 178 178 179 179 {{{ 180 unregister_chrdev(0, "ledbtn"); 180 unregister_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 {{{ 189 sudo mknod /dev/ledbtn c major 0 190 sudo chmod a+rw /dev/ledbtn 191 }}} 192 193 Le 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 181 199 }}} 182 200 183 201 == Étape 4 : accès aux GPIO depuis les fonctions du pilote == 184 202 203 [à suivre]