Comment puis-je mettre en pause pour+ de 100 millisecondes dans un pilote linux module?
Je suis en train d'écrire un pilote de noyau pour un appareil qui produit régulièrement des quantités de données pour la lecture périodiquement. Dans l'espace utilisateur du programme est parfaitement adapté à la réalisation de ce blocage pilote.
Quelles méthodes sont disponibles pour mettre en pause n'importe où de 4 à 100ms dans un pilote (c'est à dire faire le "bloc")? Dans l'espace utilisateur, je ferais quelque chose qui ressemble à:
tv.tv_sec = microsecond_delay /1000000ul;
tv.tv_usec = microsecond_delay % 1000000ul;
(void)select(0, NULL, NULL, NULL, & tv);
ou
gettimeofday(tv,NULL);
et de comparer les structures.
[Modifier mon propre réponse]
Je vais utiliser le code suivant dans mon chauffeur:
#include <linux/jiffies.h>
...
schedule_timeout(file->private_data->my_driver_struct.read_pause_jiffies);
Le tour est joué! Je vais maintenant tester ...
Les réponses sont les bienvenues, mais je viens de trouver ceci
En fait, pas ce que je cherche: je veux dormir un certain temps, de ne pas créer un asynchrones événement de minuterie.
Trouvé:
Double Possible de Comment dormir dans le noyau Linux?
De vérifier la date. J'ai demandé en premier.
En fait, pas ce que je cherche: je veux dormir un certain temps, de ne pas créer un asynchrones événement de minuterie.
Trouvé:
extern signed long schedule_timeout(signed long timeout);
Double Possible de Comment dormir dans le noyau Linux?
De vérifier la date. J'ai demandé en premier.
OriginalL'auteur Jamie | 2011-09-09
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur Jamie
À l'aide de schedule_timeout ne PAS dormir pendant un certain temps, mais pour un minimum de temps spécifié. Si vous voulez vraiment bloc pendant un certain temps, vous aurez à utiliser des verrous. Dormir ne vous garantie un minimum de temps - cela n'a pas d'importance pour vous en fonction de beaucoup de granularité dont vous avez besoin.
Mais un meilleur pilote de dormir jusqu'à ce que le lecteur a demandé plus de données dans tous les cas.
... et un pointeur vers quelque chose au sujet de ma question et votre suggestion de l'utilisation de verrous serait très apprécié. Ou, mieux (beaucoup mieux :)), une réponse avec trois ou quatre lignes pertinentes, le code de l'API!
OriginalL'auteur adrianmcmenamin