BUTTON驱动(一个驱动管理多个button设备)(基于Linux-3.4.2)

本文详述了嵌入式设备驱动开发的关键步骤,包括动态申请设备号、设备结构体内存分配、设备节点自动创建、IRQ注册及处理、GPIO请求、按键抖动消除等,同时介绍了read/write操作的两种阻塞实现方式。

/*

*注意:本文仅用于学习记录和交流,若有错,望指正,谢谢

*/

-----------------------------------------------------分割线-----------------------------------------------------------

1.动态申请设备号后要获取major

2.多个设备结构体的内存申请

3.添加多个设备结构体

另写接口函数很重要:

4.自动创建多个设备节点

一个class,多个device_create

5.open中irq的注册

根据_node->i_cdev->dev这个dev_t找到次设备号,依据minor来注册:

结合实际的button_desc[]

6.irq注册前最好gpio_request

7.IRQ中依据irq找到对应的gpio

法1:上述依据板载实际IRQ与GPIO的对应关系  自己编写接口函数

法2:不同的IRQ对应不同的irq_handler

8.read/write阻塞的两种方式

    法1(隐式使用wait_queue):在read/write中判断为不可读的阻塞时,直接:

    

    使用等待队列等待唤醒,并满足cond;

    并在irq中唤醒:

    

    即:在不可读且阻塞时,陷入睡眠并等待唤醒;当irq发生并在irq_handler中唤醒并置位等待cond后;

            read中的等待队列被唤醒且满足条件则继续执行。

    法2(显示使用wait_queue):

        先定义一个等待队列元素,并将等待队列元素add到等待队列头部;

        在read/write中判断为不可读的阻塞时:

        //set_current_state(TASK_INTERRUPTIBLE);

        //schedule();//显示调用其他进程,让出CPU使用权

        并等待唤醒:(IRQ或者XXX来唤醒):

        

 

0.按键抖动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值