linux高階字元裝置驅動之 二 核心等待佇列

2021-06-06 12:51:08 字數 1120 閱讀 1971

在linux驅動程式設計中,可以使用等待佇列來實現程序的阻塞,等待佇列可看作儲存程序的容器,在阻塞程序時,將程序放入等待佇列,當喚醒程序時,從等待等列中取出程序。

linux 2.6核心提供了如下關於等待佇列的操作:

1、定義等待佇列

wait_queue_head_t my_queue

2、初始化等待佇列

init_waitqueue_head(&my_queue)

3、定義並初始化等待佇列

declare_wait_queue_head(my_queue)

4、有條件睡眠

1)wait_event(queue,condition)

當condition(乙個布林表示式)為真時,立即返回;否則讓程序進入task_uninterruptible模式的睡眠,並掛在queue引數所指定的等待佇列上。

2)wait_event_interruptible(queue,condition)

當condition(乙個布林表示式)為真時,立即返回;否則讓程序進入task_interruptible的睡眠,並掛在queue引數所指定的等待佇列上。

3)int wait_event_killable(wait_queue_t queue, condition)

當condition(乙個布林表示式)為真時,立即返回;否則讓程序進入task_killable的睡眠,並掛在queue引數所指定的等待佇列上。

5、無條件睡眠(老版本,建議不再使用)

1)sleep_on(wait_queue_head_t *q)

讓程序進入不可中斷的睡眠,並把它放入等待佇列q。

2)interruptible_sleep_on(wait_queue_head_t *q)

讓程序進入可中斷的睡眠,並把它放入等待佇列q。

6、從等待佇列中喚醒程序

1) wake_up(wait_queue_t *q)

從等待佇列q中喚醒狀態為task_uninterruptible,task_interruptible,task_killable 的所有程序。

2) wake_up_interruptible(wait_queue_t *q)

從等待佇列q中喚醒狀態為task_interruptible 的程序。

linux驅動 3 高階字元裝置驅動之ioctl

linux驅動 3 高階字元裝置驅動之ioctl 測試平台 x86 pc linux 4.4.0 scull.c include include include include include include include include include scull.h 裝置私有資料 struct...

linux 字元裝置 驅動框架 二

前面編寫了乙個簡單的 linux字元裝置驅動 linux driver 1 接下來簡單地來看一下字元裝置驅動的框架。在linux 字元裝置裡,有三個比較重要的資料結構,分別是 struct file operations,struct file和struct inode 下面來簡單的說明一下 這個結...

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...