作者:Bright-Ho
联系方式:[email protected]
符合input子系统的设备驱动之按键驱动(一)
前面章节,我们分析了input子系统的软件框架;
说到要学习字符驱动得分为两方面:第一方面,了解硬件工作原理,硬件协议,学会看电路图,时序等等;第二方面:了解驱动框架;了解驱动框架的目的是哪些事情是由我们自己动手做的,哪些事情是由内核帮我们完成的;了解硬件方面的原理的目的就是知道该怎么去做!通过分析input子系统的框架,我们知道了,设备层必须是我们自己来做,至于怎么做?首先得去了解硬件相关的东西;我现在主要以按键驱动为例,来讲解设备层该怎么做;
以按键为例,我打算分三步走,
(1)回顾单片机按键驱动(裸板)是怎么实现按键驱动的?
(2)回顾不带input子系统的按键字符设备驱动是怎么实现的?
(3)自己实现带input子系统的按键字符设备驱动;
注意:之前我说过学习驱动最好的老师就是去阅读理解内核代码;今天再强调另一方面:想了解硬件工作原理,硬件协议,以及时序等等,就去学习裸板开发;这个过程必须去看电路图,数据手册(datasheet),以及芯片协议手册,这个是必备技能!!!
那么接下来我们就回顾裸板的按键驱动是什么实现的?
(1)通过电路图,查找按键连接到核心板的寄存器
(2)通过datasheet来查看该寄存器所对应的GPIO引脚该如何设置;比如引脚,设置为按键引脚,中断引脚上升沿触发还是下降沿触发等等;
裸板程序直接操作设备的物理地址,不涉及操作系统,直接通过设置寄存器来控制硬件;由于按键寄存器设置十分简单,我就不罗列代码了;就是设置寄存器后,再去访问状态寄存器就可以获取到硬件的数据了;
裸板程序特点:
(1)直接操作物理地址来控制硬件,因为不涉及操作系统;直接和硬件打交道;
(2)这是最直接了解硬件工作原理的方法;
下一节回顾不带input子系统的按键字符设备驱动是怎么实现的?