8
votes

Comment utiliser les minuteries dans les pilotes de périphérique Kernel Linux?

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.


3 commentaires

À 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 )


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 définit une minuterie dans l'espace utilisateur.


3 Réponses :


12
votes

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;
}


1 commentaires

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



4
votes

Selon ce que vous voulez faire exactement, vous pouvez utiliser directement Jiffies 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.

L'API de la minuterie du noyau est assez intuitive: xxx

Vous auriez juste besoin de définir une fonction de minuterie, puis d'initialiser et de démarrer la minuterie.

Vous avez plusieurs sources pour apprendre davantage sur ce sujet:

  • Comprendre le noyau Linux . Ce livre est une sorte de Bible pour le noyau. Il est en quelque sorte obsolète dans certaines zones, mais toujours une très bonne source d'informations.
  • Pilotes de périphérique Linux . C'est un livre très utile lorsque vous développez des pilotes de périphérique. Il y a une version en ligne aussi ici . Le chapitre traitant de l'heure, des minuteries, etc. est le chapitre 7. Ce livre peut également être un peu obsolète puisqu'il est également à partir de 2005.
  • Développement de noyau Linux . Je n'ai pas vérifié ce livre, mais le bon point est que c'est beaucoup plus récent (à partir de 2010), vous pouvez donc trouver des informations mises à jour par rapport aux deux livres précédents.

0 commentaires

6
votes

autour du noyau Linux 4.15 Libération, VOID SETUP_TIMER (minuterie, fonction, données); stry> est devenu obsolète avec une intention de le supprimer complètement.

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


0 commentaires