linux字元裝置驅動程式的設計之休眠

2021-06-16 09:27:49 字數 1449 閱讀 6729

linux字元裝置驅動程式的設計之休眠

休眠對程序來說,意味著等待將來的某個時間發生。如何以安全的方式進入休眠,需要注意以下兩點:

永遠不要在原子上下文中進入休眠。

當程序被喚醒時,我們永遠無法知道休眠了多長時間,或者休眠期間發生了什麼事情。

等待佇列就是乙個程序鍊錶,其中包含了等待某個特定事件的所有程序。在linux中,乙個等待佇列通過乙個「等待佇列頭(wait quene head)」來管理,等待佇列頭是乙個型別為wait_quene_head_t的結構體,定義在中,可通過靜態定義並初始化乙個等待佇列頭:

declare_wait_quene_head(name);

define declare_wait_queue_head(name) \

wait_queue_head_t name = __wait_queue_head_initializer(name)

或者使用動態方法:

wait_quene_head_t my_quene;

init_waitquene_head (&my_quene);

void __init_waitqueue_head(wait_queue_head_t *q, struct lock_class_key *key)

typedef struct __wait_queue_head wait_queue_head_t;
struct __wait_queue_head ;
<1>、簡單休眠
#define wait_event(wq, condition)      \

do while (0)

#define wait_event_timeout(wq, condition, timeout)			\

()

#define wait_event_interruptible(wq, condition)				\

()

#define wait_event_interruptible_timeout(wq, condition, timeout)	\

()

<2>喚醒休眠wake_up()

#define wake_up(x)			__wake_up(x, task_normal, 1, null)
#define wake_up_interruptible(x) __wake_up(x, task_interruptible, 1, null)

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...

Linux裝置驅動程式 字元裝置驅動程式設計

linux對裝置的操作與對檔案的操作是一樣的,可以看到乙個裝置所對應的檔案。我們平時用的read write等函式也可以用於裝置檔案。字元裝置 以字元為單位 按照順利操作 沒有快取區,故不支援隨機讀寫 例外 幀快取裝置,如顯示卡,是可以隨機訪問的 裝置號由主裝置號與次裝置號組成。主裝置號標識裝置對應...