`
soboer
  • 浏览: 1311242 次
文章分类
社区版块
存档分类
最新评论

按键驱动程序设计笔记

 
阅读更多


1.中断处理函数

static irqreturn_t buttons_interrupt(int irq, void *dev_id);

每次按键触发中断,进入中断处理函数,进行相关操作。

中断资源弥足珍贵,最好选择在打开设备即需要使用时注册,而不是装载模块时,若退出模块时请切记释放中断资源。

2.工作队列

static DECLARE_WAIT_QUEUE_HEAD(button_waitq);

创建了一个等待队列,每当有一按键按下,激活队列中一个等待的任务。

poll_wait(file, &button_waitq, wait);
监测进程队列button_waitq里的进程,如果ev_press置1,就跳出等待。

wait_event_interruptible(button_waitq, ev_press);
等待,当ev_press为1时,跳出。

wake_up_interruptible(&button_waitq);

数组可读,唤醒休眠的进程。

当加进udelay(20000);消抖动时,出现错误,没网上,有空再搞搞

insmodbutton.ko

button:Unknownsymbol__bad_udelay

insmod:cannotinsert'button.ko':unknownsymbolinmoduleorinvalidparamete









  


  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics