Piszę sterownik jądra dla urządzenia, które regularnie generuje dane do odczytu. Program przestrzeni użytkownika idealnie nadaje się do uczynienia tego sterownika blokującym.Jak mogę zatrzymać na ponad 100 milisekund w module sterownika Linux?
Jakie metody są dostępne dla zatrzymując się wszędzie od 4 do 100ms w sterowniku (to robi „blok”)? W przestrzeni użytkownika zrobiłbym coś w rodzaju:
tv.tv_sec = microsecond_delay/1000000ul;
tv.tv_usec = microsecond_delay % 1000000ul;
(void)select(0, NULL, NULL, NULL, & tv);
lub
gettimeofday(tv,NULL);
i porównać struktur.
[Edit - moja własna odpowiedź]
będę używał następujący kod w moim kierowcą:
#include <linux/jiffies.h>
...
schedule_timeout(file->private_data->my_driver_struct.read_pause_jiffies);
Voila! Teraz przetestuję ...
odpowiedzi są mile widziane, ale ja po prostu znaleźć [to] (http://makelinux.com/ldd3/chp-7-sect-4) – Jamie
Właściwie nie to, czego szukam: Chcę spać w określonym czasie, nie tworzyć asynchronicznego zdarzenia licznika czasu. – Jamie
Znaleziono: 'extern signed long schedule_timeout (signed long timeout);' – Jamie