//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全...