之前的文章讨论了字符设备驱动的框架以及通过自负设备驱动程序来控制开发板上的LED
嵌入式Linux驱动开发(一)——字符设备驱动框架入门
嵌入式Linux驱动开发(二)——字符设备驱动之控制LED
在这里我们可以简单的复习一下。
首先,字符设备驱动程序的框架核心是file_operations
结构体,其中注册上层应用和底层驱动程序的对应关系。正式通过这个结构体,应用层的write才能找到驱动程序中与之相对应的硬件操作的函数。如果这样理清了思路,就很容易看到,入口函数和出口函数的目的,就是告诉内核我们自己写的file_operations
结构体的内容是啥,也就告诉内核上层和底层的映射关系是什么。
其次,对于控制LED来说,主要是对框架的实践,操作硬件的原理也很简单,主要是操作与之相对应的寄存器的值。而,驱动程序和单片机程序操作寄存器的区别在于,驱动程序操作的虚拟地址,而单片机程序操作的是物理地址,其核心的原理完全相同。
那么我们通过了写入寄存器相应的数据,来完成了LED的控制,主要是建立了write的映射关系,那么在上层应用中,还有一个很常用的函数,就是read函数。我们应该如何做呢?
如果我们查看定义在fs.h
文件中的file_operations
结构体,可以看到其中有read属性,那么很自然的我们就能想到,用这个属性来映射他们之间的关系即可。
思路清晰明确!Let's go!
首先,我们阅读一下原理图,大致知道该硬件上面的按键是什么样的情况。下面是按键的接线原理图:
通过接线原理图,很容易看到,如果当按键按下后,电路和地线相连,此时EINTx 的线上应该是低电平。如果这时候与对应的按键连线的引脚设置为输入引脚,我们只要检测出低电平就说明按键被按下了。
思路有更加清晰了一步。