这个世界是由概率学统治的,所以每一个成功的人,都应该心怀疚歉和感恩,致敬和他们一样野心聪明勤奋坚持,却没有得到概率女神青睐的人们。
文章目录
零、写在前面的话
一、按键驱动框架
1.1 LED驱动回顾
1.2 按键驱动编写思路
二、编程
2.1 设备树相关
2.1.1 编写设备树
2.2 驱动代码相关
2.2.1 编写驱动程序
零、写在前面的话
停更的这段时间,一直在快马加鞭的干毕设论文,初稿最近刚完成,还需要再完善。毕业前的最后一岗,希望自己依然可以站的完美。停更的期间,博客访问量也在下降,不知道能不能实现毕业前100w的愿望了。
在上一节,我们详细学习了《Linux开发中的中断》,这一节我们我们就来实际操练一下!
在实际开发中,对于GPIO按键,我们并不需要去写驱动程序,使用内核自带的驱动程序
drivers/input/keyboard/gpio_keys.c 就可以,实际需要做的只是修改设备树指定引脚及键值。
但是学习还是要从头写按键驱动,特别是如何使用中断。因为中断是引入其他基础知识的前提,后面的内容都离不开中断:休眠-唤醒、 POLL 机制、异步通知、定时器、中断的线程化处理。这些基础知识是更复杂的驱动程序的基础要素,以后的复杂驱动也就是对硬件操作的封装彼此不同,但是用到的基础编程知识是一样的。
一、按键驱动框架
1.1 LED驱动回顾
对于 LED, APP 调用 open 函数导致驱动程序的 led_open 函数被调用。在里面,把 GPIO配置为输出引脚。安装驱动程序后并不意味着会使用对应的硬件,而 APP 要使用对应的硬件,必须先调用 open 函数。所以建议在驱动程序的 open 函数中去设置引脚。
APP 继续调用 write 函数传入数值, 在驱动程序的 led_write 函数根据该数值去设置 GPIO的数据寄存器,从而控制 GPIO 的输出电平。
怎么操作寄存器?从芯片手册得到对应寄存器的物理地址,在驱动程序中使用 ioremap函数映射得到虚拟地址。驱动程序中使用虚拟地址去访问寄存器。
1.2 按键驱动编写思路
编写按键驱动最简单的方法 - 查询方式