正点原子Linux连载第四十九章Li
2025/7/28 来源:不详 浏览次数:次北京哪家白癜风医院最好 https://wapjbk.39.net/yiyuanzaixian/bjzkbdfyy/nxbdf/第四十九章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