4412驅動 key 按鍵驅動

2021-07-31 09:50:54 字數 1974 閱讀 2910

//key_driver.c
#include #include #include #include #include #include #include #include #include #include #include static struct class *keydrv_class;

static struct class_device*keydrv_class_dev;

#define dev_name"key-dev"

//定義按鍵配置暫存器的位址 

#define gpx3con     0x11000c60

volatile unsigned long *button_config = null ; 

volatile unsigned long *button_dat = null ; 

//open方法 

int key_open(struct inode *inode, struct file *filp)

//read方法 

ssize_t key_read(struct file *file , char __user *buf ,size_t size ,loff_t *offset)

unsigned char key_val  ;

//獲取按鍵的鍵值,因為按鍵是從該暫存器的第二位開始的,所以需要左移2位,接著與上0xf---1111

//這樣,如果使用者按下按鍵,就會返回乙個鍵值儲存在key_val這個變數裡 

key_val = (*button_dat >> 2) & 0xf ;

//將獲取到的值拷貝到使用者空間 

copy_to_user(buf , &key_val , sizeof(key_val));

//返回鍵值 

return  key_val ;

}//close方法 

int key_close(struct inode *inode, struct file *filp)

struct file_operations fops = ;

int major ;

int test_init(void)

void test_exit(void)

module_init(test_init);

module_exit(test_exit);

module_license("gpl");

module_author("hai");

module_version("2017.4.30");

// key_test.c
#include #include #include #include #include #include #define dev_name"/dev/key-dev"

void delay(void);

int main(int argc, char **argv)

;fd = open(dev_name,o_rdwr) ;

if(-1 == fd)

while(1)

}return 0;

}void delay(void)

//makefile
kern_dir = /home/tools/linux-3.5

all:

make -c $(kern_dir) m=`pwd` modules 

clean:

make -c $(kern_dir) m=`pwd` clean

rm -rf modules.order

obj-m+= key_driver.o

Linux驅動 按鍵驅動

開發板 tiny6410 核心版本 linux2.6.38 要想寫出案件驅動 需要複習的知識 1 混雜裝置的使用原理 2 系統呼叫驅動函式的原理 3 中斷處理機制 4 阻塞性裝置驅動的書寫規範 1 混雜裝置的註冊和使用比較簡單,以前也複習過,這裡不再複習 3 中斷處理機制 也有部落格內容中斷處理機制...

4412驅動 等待佇列

定義等待佇列 wait queue head t button waitq 初始化等待佇列頭 init waitqueue head button waitq 定義並初始化等待佇列頭 相當於上面兩句合併 static declare wait queue head button waitq 定義並初...

按鍵驅動 OS

一 實驗平台 開發板fs2410,採用三星s3c2410的cpu,linux作業系統。二 實現功能 當按下開關時,列印出是哪個開關被按下了。如按下了k1,則顯示k1被按下了。三 實驗原理 fs2410共有16個按鍵,若採用查詢的方式,會占用cpu很多資源,這裡採用中斷的方式。首先將kscan0 3全...