正点原子Linux连载第四十九章Li
2023-3-15 来源:不详 浏览次数:次北京白癜风医院 https://wapjbk.39.net/yiyuanfengcai/zn_bjzkbdfyy/
第四十九章Linux按键输入实验
在前几章我们都是使用的GPIO输出功能,还没有用过GPIO输入功能,本章我们就来学习一下如果在Linux下编写GPIO输入驱动程序。I.MX6U-ALPHA开发板上有一个按键,我们就使用此按键来完成GPIO输入驱动程序,同时利用第四十七章讲的原子操作来对按键值进行保护。
49.1Linux下按键驱动原理
按键驱动和LED驱动原理上来讲基本都是一样的,都是操作GPIO,只不过一个是读取GPIO的高低电平,一个是从GPIO输出高低电平。本章实现我们实现按键输入,在驱动程序中使用一个整形变量来表示按键值,应用程序通过read函数来读取按键值,判断按键有没有按下。在这里,这个保存按键值的变量就是个共享资源,驱动程序要向其写入按键值,应用程序要读取按键值。所以我们要对其进行保护,对于整形变量而言我们首选的就是原子操作,使用原子操作对变量进行赋值以及读取。Linux下的按键驱动原理很简单,接下来开始编写驱动。
注意,本章例程只是为了演示Linux下GPIO输入驱动的编写,实际中的按键驱动并不会采用本章中所讲解的方法,Linux下的input子系统专门用于输入设备!
49.2硬件原理图分析
本章实验硬件原理图参考15.2小节即可。
49.3实验程序编写
本实验对应的例程路径为:开发板光盘-2、Linux驱动例程-11_key。
49.3.1修改设备树文件
1、添加pinctrl节点
I.MX6U-ALPHA开发板上的KEY使用了UART1_CTS_B这个PIN,打开imx6ull-alientek-emmc.dts,在iomuxc节点的imx6ul-evk子节点下创建一个名为pinctrl_key的子节点,节点内容如下所示:
示例代码49.3.1.1按键pinctrl节点
1pinctrl_key:keygrp{
2fsl,pins=
3MX6UL_PAD_UART1_CTS_B__GPIO1_IOxF/*KEY0*/
4;
5};
第3行,将GPIO_IO18这个PIN复用为GPIO1_IO18。
2、添加KEY设备节点
在根节点/下创建KEY节点,节点名为key,节点内容如下:
示例代码49.3.1.2创建KEY节点
1key{
2#address-cells=1;
3#size-cells=1;
4