Mini2440的按键驱动程序(mini2440_buttons.c/button_test.c)

2012年2月10日               星期五                     


今天开始重新整理一下之前分析过的驱动程序

Mini2440的按键驱动程序(mini2440_buttons.c/button_test.c)

此驱动程序是将按键设备归于杂项设备类里的,主设备号为10,所以在驱动程序里面没有进行字符设备驱动的注册(cdev_add);

/dev/下的设备文件创建是通过misc_register(&misc)这个函数进行的,这个函数对按键设备的次设备号进行了选择,并调用了misc->this_device = device_create(misc_class, misc->parent, dev, misc, "%s", misc->name);来进行了设备文件的创建,文件名为misc->name,即为buttons,驱动加载后就会出现/dev/buttons文件。


设备文件的调用是通过用户空间的应用程序来完成的,测试程序buttons_test里面,打开了设备文件 buttons_fd = open("/dev/buttons", 0);open这个函数会导致驱动程序里面的s3c24xx_buttons_open函数被调用,这里将button_irqs数组定义的中断,全部进行了注册。其中注册的中断处理函数为buttons_interrupt,在这里对产生的中断号进行了判断,并唤醒等待队列(即阻塞的read进程)。


在buttons_test打开设备文件以后会不停的使用read函数对中断进行查询,read函数的调用会导致驱动中s3c24xx_buttons_read函数的启用,在此函数中定义了等待队列,使read进程进入休眠,当中断产生时,通过中断处理函数buttons_interrupt会将进程唤醒,唤醒进程后,将中断处理函数中判断出来的按键结果传到用户空间。

整个过程就此完成。

 


这个例子中用到的知识点:1、中断的注册,以及中断处理程序的使用。
                         2、等待队列的注册(在全局声明),以及唤醒。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值