Linux字元裝置驅動之中斷按鍵

2021-07-05 06:33:05 字數 2134 閱讀 6051

驅動程式:

#include /*模組有關的*/

#include /*核心有關的*/

#include /*檔案系統有關的*/

#include

#include

#include

#include

#include

#include /*linux中斷*/

#include

#include

#include

#include //copy_to_user

#include /*暫存器設定*/s3c2410_gpf0等的定義

#include //s3c2410_gpio_getpin等的定義

#include //irq_eint0等的定義

#include

volatile unsigned long *gpfcon=null;

volatile unsigned long *gpfdat=null;

static declare_wait_queue_head(button_waitq);

/* 中斷事件標誌, 中斷服務程式將它置1,third_drv_read將它清0 */

static volatile int ev_press = 0;

#define device_name  "buttons"

static struct class *buttons_class;

struct pin_desc;

static unsigned char keyval;//jianzhi

/* 鍵值: 按下時, 0x01, 0x02, 0x03, 0x04 */

/* 鍵值: 鬆開時, 0x81, 0x82, 0x83, 0x84 */

struct pin_desc pins_desc[4] = ,,,

,};static irqreturn_t buttons_irq(int irq, void *dev_id)

else

ev_press = 1;                  /* 表示中斷發生了 */

wake_up_interruptible(&button_waitq);   /* 喚醒休眠的程序 */

return irq_handled;

}static int third_drv_open(struct inode *inode, struct file *file)

ssize_t third_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)

int third_drv_close(struct inode *inode, struct file *file)

static struct file_operations three_drv_fops = ;

int major;

static int third_drv_init(void)

static void third_drv_exit(void)

module_init(third_drv_init);

module_exit(third_drv_exit);

module_license("gpl");

測試程式:

#include

#include

#include

#include

#include

/* thirddrvtest 

*/int main(int argc, char **argv)

while (1)

return 0;}

makefile:

makefile其他的部分是不變的,只需要修改檔案名字就可以了。

obj-m :=buttons.o

kerneldir ?= /home/work/linux/linux-2.6.28.7

pwd := $(shell pwd)

default:

$(make) -c $(kerneldir) m=$(pwd) modules

clean:

rm -f  *o  *.mod.o  *mod.c  *.symvers *.order

Linux字元裝置驅動之中斷按鍵

驅動程式 include 模組有關的 include 核心有關的 include 檔案系統有關的 include include include include include include linux中斷 include include include include copy to user ...

Linux裝置驅動程式設計之中斷處理

與linux裝置驅動中中斷處理相關的首先是申請與釋放irq的api request irq 和free irq request irq 的原型為 int request irq unsigned int irq,void handler int irq,void dev id,struct pt r...

Linux 裝置驅動 中斷處理

為什麼需要中斷 1,外設的處理速度一般慢於 cpu 2,cpu 不能一直等待外部事件 所以裝置必須有一種方法來通知 cpu 它 的工作進度,這種方法就是中斷.在 linux 驅動程式中,為裝置實現乙個中斷包含兩個步驟 1,向核心註冊中斷 2,實現中斷處理函式 request irq 用於實現中斷的註...