一。混雜裝置驅動模型
1. 混雜裝置驅動描述
在linux系統中,存在一類字元裝置,它們擁有相同的主裝置號(10),但次裝置號不同,我們稱這類裝置為混雜裝置(miscdevice)。
所有的混雜裝置形成乙個鍊錶,對裝置訪問時核心根據次裝置號查詢到相應的混雜裝置。
linux中使用struct miscdevice來描述乙個混雜裝置。
struct miscdevice
int minor; /* 次裝置號*/
const char *name; /* 裝置名*
const struct file_operations *fops; /*檔案操作*/
struct list_head list;
struct device *parent;
struct device *this_device;
2. 混雜裝置驅動註冊
linux中使用misc_register函式來註冊乙個混雜裝置驅動。
int misc_register(struct miscdevice * misc)
3. 範例驅動設計
混雜裝置驅動設計
二。 中斷處理程式
1. 裸機中斷處理流程回顧
1. 中斷統一入口
2. 實現註冊中斷處理程式
3. 根據中斷源編號,呼叫中斷處理程式
2. linux中斷處理流程分析
1. irq_svc 中斷入口
2. 拿到產生中斷源的中斷號
3. 根據中斷號找到相應的 irq_dese
4. 取出事先註冊好的處理函式
3. linux中斷處理程式設計
1. 註冊中斷
request_irq函式用於註冊中斷。
int request_irq(unsigned intirq,
void (*handler)(int, void*, struct pt_regs *),
unsigned long flags,
const char *devname, void *dev_id)
返回0表示成功,或者返回乙個錯誤碼
#unsigned intirq中斷號。
#void (*handler)(int,void *)中斷處理函式。
#unsigned longflags與中斷管理有關的各種選項。
#const char * devname裝置名
#void *dev_id共享中斷時使用。
在flags引數中,可以選擇一些與中斷管理有關的選項,如:
•irqf_disabled(sa_interrupt)
如果設定該位,表示是乙個「快速」中斷處理程式;
如果沒有設定這位,那麼是乙個「慢速」中斷處理程式。
快/慢速中斷的主要區別在於:快速中斷保證中斷處理的原子性(不被打斷),而慢速中斷則不保證。
換句話說,也就是「開啟中斷」標誌位(處理器if)在執行快速中斷處理程式時是關閉的,
因此在服務該中斷時,不會被其他型別的中斷打斷;
而呼叫慢速中斷處理時,其它型別的中斷仍可以得到服務。
•irqf_shared(sa_shirq)
該位表明該中斷號是多個裝置共享的。
2. 中斷處理
1.中斷處理程式的特別之處是在中斷上下文中執行的,它的行為受到某些限制:
1.不能使用可能引起阻塞的函式
2.不能使用可能引起排程的函式
2. 中斷處理程式
1. 檢查裝置是否產生了中斷
2. 清除中斷產生的中斷
3. 相應的硬體操作
3. 登出中斷
當裝置不再需要使用中斷時(通常在驅動解除安裝時), 應當把它們登出, 使用函式:
void free_irq(unsigned int irq, void *dev_id)
三 。按鍵驅動硬體操作實現
Linux驅動 按鍵驅動
開發板 tiny6410 核心版本 linux2.6.38 要想寫出案件驅動 需要複習的知識 1 混雜裝置的使用原理 2 系統呼叫驅動函式的原理 3 中斷處理機制 4 阻塞性裝置驅動的書寫規範 1 混雜裝置的註冊和使用比較簡單,以前也複習過,這裡不再複習 3 中斷處理機制 也有部落格內容中斷處理機制...
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 寫中斷...