Linux 按鍵驅動程式設計

2022-08-31 09:00:09 字數 1922 閱讀 8072

一。混雜裝置驅動模型

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 寫中斷...