linux gpio按键驱动程序,Linux GPIO Key 驱动的加载

gpio-keys是基于input子系统实现的一个通用的GPIO按键驱动,基于platform来实现,位于drivers/input/keyboard/gpio_keys.c,这个文件是硬件无关的,而硬件有关的需要我们自己来注册.进入这个gpio_keys.c这个函数,第一步就是初始化.

static int __init gpio_keys_init(void)

{

return platform_driver_register(&gpio_keys_device_driver);

}

然后加载这个结构体:

static struct platform_driver gpio_keys_device_driver = {

.probe = gpio_keys_probe,

.remove = __devexit_p(gpio_keys_remove),

.driver = {

.name = "gpio-keys",

.owner = THIS_MODULE,

#ifdef CONFIG_PM

.pm = &gpio_keys_pm_ops,

#endif

}

};

进入后会执行probe函数,进行设备的probe.当然只是注册设备,没什么必要看.还比如gpio_keys_isr就是去抖动检测,这是上半部分函数.

static irqreturn_t gpio_keys_isr(int irq, void *dev_id)

{

struct gpio_button_data *bdata = dev_id;

struct gpio_keys_button *button = bdata->button;

BUG_ON(irq != gpio_to_irq(button->gpio));

if (button->debounce_interval)

mod_timer(&bdata->timer,

jiffies + msecs_to_jiffies(button->debounce_interval));

else

schedule_work(&bdata->work);

return IRQ_HANDLED;

}

然后由定时器在超时时候,触发的下半部分.

static void gpio_keys_work_func(struct work_struct *work)

{

struct gpio_button_data *bdata =

container_of(work, struct gpio_button_data, work);

gpio_keys_report_event(bdata);

}

既然gpio_keys这么简单,那么看看我们如何绑定.在此之前,先打开相应的头文件.

#ifndef _GPIO_KEYS_H

#define _GPIO_KEYS_H

struct gpio_keys_button {

/* Configuration parameters */

int code; /* input event code (KEY_*, SW_*) */

int gpio;

int active_low;

char *desc;

int type; /* input event type (EV_KEY, EV_SW) */

int wakeup; /* configure the button as a wake-up source */

int debounce_interval; /* debounce ticks interval in msecs */

bool can_disable;

};

struct gpio_keys_platform_data {

struct gpio_keys_button *buttons;

int nbuttons;

unsigned int rep:1; /* enable input subsystem auto repeat */

};

#endif

其中gpio_keys_button就是我们要引用到板级相关文件的一个重要的结构体,他的每个字段的意义,挑重点的说一说.

code字段,意思就是对应Linux的按键事件,gpio要对应gpio号,active_low是低电平有效,desc是功能描述,debounce_interval是消抖间隔.当然这个gpio_keys_button最终要关联到gpio_keys_platform_data里,其中nbuttons就是有的按键总数.在板级文件中要声明.比如做2个引脚,一个是F1,一个是F2的功能.

static struct gpio_keys_button mx28evk_buttons[] =

{

{

.gpio = MXS_PIN_TO_GPIO(MXS_PIN_ENCODE(2, 4)), /*K1 */

.code = KEY_F1,

.desc = "Button 1",

.active_low = 1,

},

{

.gpio = MXS_PIN_TO_GPIO(MXS_PIN_ENCODE(2, 6)), /*K2 */

.code = KEY_F2,

.desc = "Button 2",

.active_low = 1,

},

};

然后声明一个组合起来的platform结构.

static struct gpio_keys_platform_data mx28evk_button_data =

{

.buttons = mx28evk_buttons,

.nbuttons = ARRAY_SIZE(mx28evk_button_data),

};

最后构建device,因为所有初始化都只识别device.

static struct platform_device mx28evk_button_device =

{

.name = "gpio-keys",

.id = -1,

.dev = {

.platform_data = &mx28evk_button_data,

}

};

最后只需要注册设备,就可以顺利使用了.

static struct platform_device *mx28evk_button_device_p[] __initdata = {

&mx28evk_button_device,

};

platform_add_devices(mx28evk_button_device_p,ARRAY_SIZE(mx28evk_button_device_p));

但是,GPIO的驱动有些BUG,下次再说.可能会导致加载失败,只针对MX28平台才错误吧.关键加载如图:

cbbc60ceeda00815a1a24a301f43a9c0.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习(3)--常用激活函数的有用性质

1 sigmoid函数 sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。 sigmoid函数由下列公式定义: σ(x)11e−x(1)\sigma(x) \frac{1}{1 e^{-x}} \tag1σ(x)1e−x1​(1) sigmoid函数的级数表示: σ(x)1214x−148x31480x5−1780640x73114515…

kvm虚拟机不通网关_linux ssh 虚拟机下CentOS7开启SSH连接

一. 没开启,连接会报错二. 开启后,连接成功在虚拟机(Vmware Workstation)下,安装了CentOS7,现在想通过SSH工具连接虚拟机中的CentOS71、 首先,要确保CentOS7安装了 openssh-server,在终端中输入 yum list i…

linux netstat服务,linux netstat查看服务和端口状态

netstat可以查看linux系统中正在使用的服务和端口情况常见参数-a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化成数字。-l 仅列出有在 Listen (监听) 的服务状态-p …

memcpy函数实现_等比例缩放c++ opencv 实现

背景&#xff1a;在目标检测算法中&#xff0c; 输入图片等比例resize时mAP比直接resize会高几个点。实现&#xff1a;使用c 和opencv实现(之所以没用python&#xff0c;是因为用于生产环境)先贴代码&#xff1a;#include <math.h> #include <opencv2/core/core.hpp&g…

linux的bh文件停止运行,linux 系统 rcu_bh self-detected stall 问题处理

问题说明近期几台 linux 机器都报了以下 kernel 提示:Apr 24 21:02:09 cztest kernel: INFO: rcu_bh self-detected stall on CPU { 0} (t0 jiffies)Apr 24 21:02:09 cztest kernel: Pid: 0, comm: swapper/0 Not tainted 3.4.95.R620.CentOS6.5-x86_64.OpenBeta.KVM #1Apr 24 …

睡眠音频分割及识别问题(十一)--基于Android的YAMNet音频识别(总结)

WAV文件格式介绍 WAV文件遵守资源交换文件格式之规则&#xff0c;在文件的前44(或46)字节放置标头(header)&#xff0c;使播放器或编辑器能够简单掌握文件的基本信息&#xff0c;其内容以区块(chunk)为最小单位&#xff0c;每一区块长度为4字节&#xff0c;而区块之上则由子区…

安卓第一行代码第3版pdf_SPECFEM2D用户手册——第3章 网格生成——3.1 如何使用SPECFEM2D...

参考资料manual_SPECFEM2D.pdf数值实现Julia 1.4.2/MATLAB 2019a备用系统Ubuntu 64地球物理局 地震波动力学实验室 谱元组 译# 声明 # 欢迎批评指正&#xff0c;禁止转载&#xff01;目 录石中居士&#xff1a;地震波场正演模拟中的谱元法&#xff1a;基本原理与程序实现——目…

黑白棋游戏水平(2)--pytorch剪裁

系统需求 Linux系统&#xff0c;并已安装git、gcc、g、cmake⼯具 下载源码 从github克隆Pytorch仓库 git clone --recursive https://github.com/pytorch/pytorch如果已经克隆过&#xff0c;则使⽤以下命令更新 git submodule sync git submodule update --init --recurs…

linux htb 源代码,LINUX TC:HTB相关源码

LINUX TC:HTB相关源码 收藏HTB(hierarchy token buffer)是linux tc(traffic control)模块中的排队队列的一种。它的配置比CBQ要简单.同时实现功能也很强大。下面&#xff0c;就来看看&#xff0c;HTB在linux中的源码。1、 Qdisc_ops的注册先从module_init函数看起(…

二维码图像去噪文献调研(1)--Real Image Denoising with Feature Attention

简介 &#xff08;1&#xff09; 论文&#xff08;包括期刊和发表时间&#xff09;&#xff1a; Real Image Denoising with Feature Attention&#xff08;ICCV 2019&#xff09; &#xff08;2&#xff09; 论文链接&#xff1a; https://arxiv.org/pdf/1904.07396.pdf &…

idea gui插件_给 IDEA 换了酷炫的主题,研发小姐姐看到:feel so high。。。

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]IntelliJ IDEA介绍IDEA&#xff0c;全称 IntelliJ IDEA &#xff0c;是 Java 语言的集成开发环境&#xff0c; IDEA 在业界被公认为是最好的 java 开发工具之一&#xff0c;尤其在智能 代码助手、代码自动提示、重构、 J2E…

华为荣耀电脑第三方linux,【第三方Linux版】荣耀MagicBook Pro 16.1英寸全面屏如何?某东入手评测...

这款【第三方Linux版】荣耀MagicBook Pro 16.1英寸全面屏轻薄笔记本电脑(酷睿i5 8G 512G MX250 IPS)冰河银&#xff0c;看网上评测推荐的&#xff0c;后面网上种草了这款笔记本&#xff0c;用过一段日子了&#xff0c;分享使用感受如下&#xff1a;一、【第三方Linux版】荣耀Ma…

二维码提升对比度文献调研(1)--Fast Image Processing with Fully-Convolutional Networks

简介 (1) 论文 &#xff08;期刊和发表时间&#xff09; Fast Image Processing with Fully-Convolutional Networks (ICCV 会议 2017) (2) 论文链接 https://openaccess.thecvf.com/content_iccv_2017/html/Chen_Fast_Image_Processing_ICCV_2017_paper.html (3) 源代码链接 …

python的变量如何理解_Python程序中变量作用范围应该如何理解?

初学Python&#xff0c;自己尝试着写了一个爬虫&#xff0c;主要代码如下import jsonimport scrapyfrom bs4 import BeautifulSoupfrom docx import Documentfrom docx.shared import Ptclass BidsSpider(scrapy.Spider):name bids_spiderallowed_domains [deal.ggzy.gov.cn,…

linux下 c语言 用write open二进制写文件,Linux下用C语言fopen、fread和fwrite函数对二进制文件的操作-Go语言中文社区...

一、前言在做一个镜头的初始化操作&#xff0c;需要加载一个648*522像素大小的文件&#xff0c;厂商提供的是一个excel表&#xff0c;如果要加载数据&#xff0c;可用加载txt文本的方式&#xff0c;我选用二进制方式加载文件&#xff1b;大家都知道电脑真正执行的不是高级语言&…

二维码提升对比度文献调研(2)--Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement

简介 论文 &#xff08;期刊和发表时间&#xff09; Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement (CVPR 会议 2020)论文链接 https://openaccess.thecvf.com/content_CVPR_2020/html/Guo_Zero-Reference_Deep_Curve_Estimation_for_Low-Light_Imag…

python打开是什么样子的图片_黑洞6问:黑洞内部是什么样子?黑洞图片发布,理论和实测的碰撞...

在科学领域&#xff0c;没有什么比你在第一次观察或实验结果中验证一个长期的理论预测时更令人兴奋的了。2012年&#xff0c;大型强子对撞机揭示了希格斯玻色子——标准模型中最后未发现的基本粒子的存在。 几年前&#xff0c;LIGO合作直接探测到了引力波&#xff0c;证实了对爱…

linux初学文档,51CTO博客-专业IT技术博客创作平台-技术成就梦想

linux 里 一切皆文件7种文件类型&#xff1a;普通文件 fd 目录b 块设备 /dev/sda /dev/sda1 /dev/sr0c 字符设备 /dev/pts/0 /dev/ tty0#tty 查看字符设备名称l symbolic link 符号链接 软链接(快捷方式)s socket 套接字 网络进程通信的一种方式p pipe 管道 本地进程间的一种通…

二维码提升对比度文献调研(3)--A Low-Complexity Algorithm for Contrast Enhancement of Digital Images

简介 &#xff08;1&#xff09;论文&#xff08;包括期刊和发表时间&#xff09;&#xff1a;A Low-Complexity Algorithm for Contrast Enhancement of Digital Images &#xff08;2&#xff09;论文链接&#xff1a; http://www.mecs-press.net/ijigsp/ijigsp-v10-n2/IJIG…

安卓checkbox无响应_【安卓手机】无法连接电脑的解决方法

转自&#xff1a;广西南宁平衡信息技术有限公司&#xff0c;作者&#xff1a;平衡LivY一般在对手机的数据采集过程中&#xff0c;尤其是安卓手机&#xff0c;最令人头疼的就是手机接入电脑后无法识别。相信以下窗口是大家在做手机取证的时候最不想看到的。那么这里大伙就会有疑…