Tôi đang viết trình điều khiển hạt nhân cho một thiết bị tạo ra lượng dữ liệu thường xuyên để đọc định kỳ. Chương trình không gian người dùng lý tưởng để làm cho trình điều khiển chặn này.Làm cách nào tôi có thể tạm dừng trong hơn 100 mili giây trong mô-đun trình điều khiển linux?
Phương pháp nào có sẵn để tạm dừng ở bất kỳ đâu từ 4 đến 100ms trong trình điều khiển (ví dụ: thực hiện "khối")? Trong không gian người sử dụng tôi muốn làm điều gì đó tương tự như:
tv.tv_sec = microsecond_delay/1000000ul;
tv.tv_usec = microsecond_delay % 1000000ul;
(void)select(0, NULL, NULL, NULL, & tv);
hoặc
gettimeofday(tv,NULL);
và so sánh các cấu trúc.
[Edit - câu trả lời của riêng tôi]
tôi sẽ sử dụng đoạn mã sau trong trình điều khiển của tôi:
#include <linux/jiffies.h>
...
schedule_timeout(file->private_data->my_driver_struct.read_pause_jiffies);
Voila! Bây giờ tôi sẽ kiểm tra ...
Answers được hoan nghênh, nhưng tôi chỉ tìm thấy [này] (http://makelinux.com/ldd3/chp-7-sect-4) – Jamie
Trên thực tế, chứ không phải những gì tôi đang tìm kiếm: Tôi muốn ngủ một thời gian nhất định, không tạo ra một sự kiện bộ đếm thời gian không đồng bộ. – Jamie
Tìm thấy nó: 'extern signed long schedule_timeout (đã ký thời gian chờ dài); ' – Jamie