设为首页收藏本站
查看: 16586|回复: 0

linux下gpio-key测试例程

[复制链接]

137

主题

46

回帖

5014

积分

管理员

积分
5014
kaiyueperfect 发表于 2015-10-16 14:49:21 | 显示全部楼层 |阅读模式
MYD-SAMA5D3X有4个用户按键,分别是RESET,wakeupcs-bootuser。浏览driver/input/keyboard目录,发现gpio-keys.c其功能是实现了通用的gpio按键。再去看了下DTS,发现DTS中有对gpio-keys的引用,新的内核不需要自己编写输入子系统驱动,可以通过配置DTS直接解决按键问题。下面是实验笔记及本人的一些理解。
1)确定GPIO管脚
通过查看MYD-SAMA5D3X的原理图可以看到,MYD-SAMA5D3X的4个按键原理图如下:

2)查看原有的dts配置 图片1.png
进行DTS文件修改之前可以阅读下内核相关文档,在Documentation/devicetree/目录下有很多关于devicetree的记载,其实,这些第一手的资料才是最具参考价值的资料。sama5d3mb.dtsi 代码片段如下:
[mw_shl_code=c,true]/* Added by MYIR, gpio key on main board */
gpio_keys {
compatible = "gpio-keys";
#address-cells = <1>;
#size-cells = <0>;
pb_user1 {
label = "pb_user1";
gpios = <&pioE 29 0>;
linux,code = <158>;
gpio-key,wakeup;
};
};[/mw_shl_code]
其中,linux,code后面对应的是linux标准的键值,可以在linux系统中找到,路径是:/usr/include/linux/input.h由于我要操作的user gpio-keys驱动将按键事件映射到了/dev/input/event1设备节点上,因此,由于linuxinput_event事件定义如下:
[mw_shl_code=c,true]struct input_event {  
     struct timeval time;  
    __u16 type;  
    __u16 code;  
    __s32 value;  
};[/mw_shl_code]
对于一些通用的功能,可以不修改内核源码、不重新编译内核,仅修改dts配置就能实现所需的功能,如这里的gpio按键功能。dts方式启动内核有着巨大的优势,
例程代码在附件中可以尝试测试gpio-key功能实现。

myirtech.zip

3.4 KB, 下载次数: 12112

回复

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-11-23 01:23 , Processed in 0.047673 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表