2011-09-09 35 views
8

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 ...

+0

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

+0

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

+0

Tìm thấy nó: 'extern signed long schedule_timeout (đã ký thời gian chờ dài); ' – Jamie

Trả lời

18
#include <linux/delay.h> 

... 
msleep(100); 
... 
1

Sử dụng schedule_timeout KHÔNG ngủ trong một thời gian nhất định nhưng trong một khoảng thời gian quy định tối thiểu. Nếu bạn thực sự muốn chặn trong một thời gian nhất định, bạn sẽ phải sử dụng khóa. Ngủ sẽ chỉ đảm bảo cho bạn một thời gian tối thiểu - điều này có thể không quan trọng đối với bạn tùy thuộc vào mức chi tiết bạn cần. Nhưng một trình điều khiển tốt hơn sẽ ngủ cho đến khi người đọc yêu cầu thêm dữ liệu trong mọi trường hợp.

+0

Được rồi ... khóa, sẽ tìm kiếm. Nhưng mức độ chi tiết sẽ là gì? + - 10msec? (BTW: câu trả lời của bạn là tài liệu bình luận nhiều hơn câu trả lời) – Jamie

+0

... và một con trỏ đến một cái gì đó liên quan đến câu hỏi của tôi và đề xuất của bạn sử dụng ổ khóa sẽ được nhiều đánh giá cao. Hoặc, tốt hơn (tốt hơn nhiều :)), một câu trả lời với ba hoặc bốn dòng mã API có liên quan! – Jamie

Các vấn đề liên quan