1.先來介紹以下幾個結構體使用和函式,下面**中會用到
1)input_dev驅動裝置結構體中常用成員如下:
struct input_dev
2.然後開始寫**1)向核心申請input_dev結構體
2)設定input_dev的成員
3)註冊input_dev 驅動裝置
4)初始化定時器和中斷
5)寫中斷服務函式
6)寫定時器超時函式
7)在出口函式中 釋放中斷函式,刪除定時器,解除安裝釋放驅動
具體**如下(都加了注釋):
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct input_dev *buttons_dev; // 定義乙個input_dev結構體
static struct ping_desc *buttons_id; //儲存dev_id,在定時器中用
static struct timer_list buttons_timer; //定時器結構體
struct ping_desc;
// key1 -> l
// key2 -> s
// key3 -> 空格
// key4 -> enter
static struct ping_desc buttons_desc[5]=
, ,
,,};
/*5. 寫中斷服務函式*/
static irqreturn_t buttons_irq (int irq, void *dev_id) //中斷服務函式
/*6.寫定時器超時函式*/
void buttons_timer_function(unsigned long i)
else //低電平,按下
}static int buttons_init(void) //入口函式
static int buttons_exit(void) //出口函式
module_init(buttons_init);
module_exit(buttons_exit);
module_license("gpl v2");
3.測試執行:掛載鍵盤驅動後, 如下圖,可以通過 ls -l /dev/event* 命令檢視已掛載的裝置節點:
在上一節輸入子系統裡分析到:輸入子系統的主裝置號為13,其中event驅動本身的此裝置號是從64開始的,如上圖,核心啟動時,會載入自帶觸控螢幕驅動,所以我們的鍵盤驅動的次裝置號=64+1
3.1測試執行有兩種,一種是直接開啟/dev/tyy1,第二種是使用exec命令)
方法1:
cat /dev/tty1 //tty1:lcd終端,就會通過tty_io.c來訪問鍵盤驅動,然後列印在tty1終端上
方法2:
exec 03.2 除錯:
若測試不成功,板子又在qt下進行的:
1)可以使用vi命令,在記事本中按按鍵試
2)或者刪除/etc/init.d/rcs 裡面有關qt自啟動的命令,然後重啟
若板子沒在qt下進行,也無法測試成功:
1)可以使用hexdump命令來除錯**
)
Linux驅動 按鍵驅動
開發板 tiny6410 核心版本 linux2.6.38 要想寫出案件驅動 需要複習的知識 1 混雜裝置的使用原理 2 系統呼叫驅動函式的原理 3 中斷處理機制 4 阻塞性裝置驅動的書寫規範 1 混雜裝置的註冊和使用比較簡單,以前也複習過,這裡不再複習 3 中斷處理機制 也有部落格內容中斷處理機制...
驅動中實現模擬鍵盤按鍵
標 題 驅動中實現模擬鍵盤按鍵 作 者 luocong 在ring3中實現模擬鍵盤按鍵有n n種方式,比如sendinput keybd event 但在驅動中要怎麼模擬呢?1 寫埠 define defi8042 data port puchar 0x60 define defi8042 ctrl...
驅動中實現模擬鍵盤按鍵
標 題 驅動中實現模擬鍵盤按鍵 作 者 luocong 在ring3中實現模擬鍵盤按鍵有n n種方式,比如sendinput keybd event 但在驅動中要怎麼模擬呢?1 寫埠 define defi8042 data port puchar 0x60 define defi8042 ctrl...