開發板:tiny6410
核心版本:linux2.6.38
要想寫出案件驅動:需要複習的知識:1、混雜裝置的使用原理 2、系統呼叫驅動函式的原理 3、中斷處理機制 4、阻塞性裝置驅動的書寫規範
1、混雜裝置的註冊和使用比較簡單,以前也複習過,這裡不再複習
3、中斷處理機制 也有部落格內容中斷處理機制部落格鏈結
4、阻塞型字元驅動的書寫規則:
實現read和write函式的時候可能會出現阻塞的情況。因此,在這種情況下,我們的驅動程式應該(預設)阻塞該程序,將其置入休眠狀態直到請求可以繼續。
等待佇列,在核心裡面,等待佇列是有很多用處的,尤其是在中斷處理,程序同步、定時等場合,可以通過等待佇列來實現阻塞程序的喚醒。它是以隊列為基礎資料結構、與程序排程機制緊密結合,能夠用於實現核心中的非同步事件通知機制,同步對系統資源的訪問等。
等待佇列的型別在核心源**的標頭檔案 include/linux/wait.h
struct_wait_queue_head ;
typedef struct_wait_queue_head wait_queue_head_t;
使用核心等待佇列的步驟:
1、定義核心等待佇列
2、初始化核心等待佇列
3、等待事件
4、喚醒佇列
分別使用什麼函式實現著這四個步驟:
1、定義核心等待佇列
wait_queue_head_t my_queue;//定義等待佇列
2、初始化核心等待佇列
init_waitqueue_head(&my_queue);//初始化核心等待佇列
以上兩步:可以並作一步來實現,定義並初始化 使用乙個巨集函式來直接實現核心等待佇列的定義和初始化。
3、等待事件
等待時間通常由如下程式設計介面來實現:
wait_event(queue,condition);//但是使用這個函式結構,程序將被置於非中斷休眠-------所以通常不適用這個介面函式
當condition(bool變數) 為真時,立即返回。否則將當前程序放入等待佇列queue中,並將該程序的狀態設定為task_interrupteible(可中斷的睡眠模式)
通常使用的事件介面函式:
wait_event_interruptible(queue,condition);//這個函式介面可以被某個訊號中斷
4、喚醒佇列
喚醒佇列的函式介面:
有兩個函式供呼叫:
wake_up(wait_queue_t *q);//喚醒等待佇列的所有程序
wake_up_interruptible(wait_queue_t *q);//喚醒等待佇列中程序狀態為task_interruptible的所有程序。
在阻塞型驅動中,read實現方式如下:如果程序呼叫read,但裝置沒有資料或資料不足,則程序阻塞。當新資料到達後,喚醒被阻塞的程序。
Linux系統按鍵驅動
linux系統下對於按鍵裝置不僅可以進行讀操作,還可以進行寫操作。對鍵盤 滑鼠等裝置進行寫操作可以實現模擬按鍵的功能。另外,想知道 dev input eventx分別是哪些裝置可以通過執行下面的命令進行檢視,如下所示 yuhaiping neolix cat proc bus input devi...
linux鍵盤按鍵驅動
1.先來介紹以下幾個結構體使用和函式,下面 中會用到 1 input dev驅動裝置結構體中常用成員如下 struct input dev2.然後開始寫 1 向核心申請input dev結構體 2 設定input dev的成員 3 註冊input dev 驅動裝置 4 初始化定時器和中斷 5 寫中斷...
Linux 按鍵驅動程式設計
一。混雜裝置驅動模型 1.混雜裝置驅動描述 在linux系統中,存在一類字元裝置,它們擁有相同的主裝置號 10 但次裝置號不同,我們稱這類裝置為混雜裝置 miscdevice 所有的混雜裝置形成乙個鍊錶,對裝置訪問時核心根據次裝置號查詢到相應的混雜裝置。linux中使用struct miscdevi...