Je veux mettre en œuvre un compteur dans les pilotes de périphérique Linux qui incitent après chaque intervalle de temps fixe. Je veux faire cela avec l'aide des minuteries. Un échantillon d'extraction de code serait très utile. P>
3 Réponses :
Jetez un coup d'œil à l'article suivant IBM DeveloperWorks: minuteries et listes
Il existe un petit exemple de la manière d'utiliser les minuteries de noyau Linux (y compris ici pour plus de commodité, des commentaires sont de moi-même, supprimés des messages d'impression) P>
#include <linux/kernel.h> #include <linux/module.h> #include <linux/timer.h> MODULE_LICENSE("GPL"); static struct timer_list my_timer; void my_timer_callback( unsigned long data ) { /* do your timer stuff here */ } int init_module(void) { /* setup your timer to call my_timer_callback */ setup_timer(&my_timer, my_timer_callback, 0); /* setup timer interval to 200 msecs */ mod_timer(&my_timer, jiffies + msecs_to_jiffies(200)); return 0; } void cleanup_module(void) { /* remove kernel timer when unloading module */ del_timer(&my_timer); return; }
Ma "file d'attente d'édition est pleine", donc je ne peux donc pas poster ce lien fixe sur le message IBM Blog: développeur.ibm.com/tatudials/l-timers-list
Selon ce que vous voulez faire exactement, vous pouvez utiliser directement L'API de la minuterie du noyau est assez intuitive: p> Vous auriez juste besoin de définir une fonction de minuterie, puis d'initialiser et de démarrer la minuterie. p> Vous avez plusieurs sources pour apprendre davantage sur ce sujet: P> Jiffies code> pour mesurer le temps, car il a été suggéré dans les commentaires. Vous pouvez également utiliser des minuteries de noyau et étant donné les informations de votre question, ils semblent être un meilleur ajustement.
autour du noyau Linux 4.15 Libération, Nous devons utiliser P> obj-m = module_with_timer.o
# Get the current kernel version number
KVERSION = $(shell uname -r)
all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
À quelle fréquence voulez-vous incrémenter cela? Pourquoi tu as même besoin de ça? (Il y a déjà des compteurs ici, par exemple
Jiffles code>)
Je veux incrémenter dites après 10 msec. Pouvez-vous donner une autre info sur la manière d'utiliser Jiffles
@Pat L'OP vous demande comment créer une minuterie dans l'espace du noyau. Tandis que
setitimer code> définit une minuterie dans l'espace utilisateur.