免费com域名网站网站建设制作设计营销 中山

web/2025/10/1 6:33:47/文章来源:
免费com域名网站,网站建设制作设计营销 中山,应用市场华为,建网络商城网站我们新项目硬件设计上使用gpio口做按键#xff0c;所以我就需要搞定这个驱动#xff0c;本来想自己写一个gpio口的按键驱动#xff0c;然后看了下内核下面的代码#xff0c;已经有现成的了。Linux内核下游很多很多的现成驱动#xff0c;只要你想得到的#xff0c;基本都是… 我们新项目硬件设计上使用gpio口做按键所以我就需要搞定这个驱动本来想自己写一个gpio口的按键驱动然后看了下内核下面的代码已经有现成的了。Linux内核下游很多很多的现成驱动只要你想得到的基本都是有现成的当然了不包括一些非正常的需求性问题学会在Linux下找驱动看驱动和内核代码我觉得是一件享受和快乐的事情。不过我还是在使用这个驱动上遇到了问题。1. 先说ADC 按键之前的文章有写过adc按键的实现无非就是为了省点GPIO口。RK 利用SARADC 来做多个按键2. GPIO 按键硬件原理图3. 驱动代码kernel-4.4/drivers/input/keyboard/gpio_keys.c 完整代码可查看https://gitee.com/weiqifa/gpio_key/blob/master/gpio_keys.c 驱动代码流程从probe处开始刚开始的时候我连dts文件都不会写因为之前没有接触过这个驱动。然后看了gpio_keys_get_devtree_pdata函数之后又看了内核代码下其他项目其他平台的dts文件才知道怎么写这个驱动的dts文件。实话说这个驱动完成了很多我们需要的功能比如防抖比如中断比如按键label等等。3.1 gpio_keys_get_devtree_pdata 函数解析dts文件这个文件解析的dts 有两种方式一种是直接传入irq的一种是只传入gpio口的。我们的这个项目就只传入了gpio口。3.2 gpio_keys_setup_key 函数这个函数用来设置gpio口的中断的直接看代码会比较清楚。下面这个函数我还没有想清楚它的作用看了回调函数里面的实现是为了把开启的工作队列停止掉。但是我加了打印并没有打印我猜测是为了防止误触发就是按键按下的时间非常短的时候才会调用这个。/*** devm_add_action() - add a custom action to list of managed resources* dev: Device that owns the action* action: Function that should be called* data: Pointer to data passed to action implementation** This adds a custom action to the list of managed resources so that* it gets executed as part of standard resource unwinding.*/ int devm_add_action(struct device *dev, void (*action)(void *), void *data) {struct action_devres *devres;devres  devres_alloc(devm_action_release,sizeof(struct action_devres), GFP_KERNEL);if (!devres)return -ENOMEM;devres-data  data;devres-action  action;devres_add(dev, devres);return 0; } 3.3 驱动修改驱动修改的代码如下--- a/kernel-4.4/drivers/input/keyboard/gpio_keys.cb/kernel-4.4/drivers/input/keyboard/gpio_keys.c-32,6 32,11 #include linux/of_irq.h#include linux/spinlock.h #define LOG_TAG [BUTTON]: %s() line: %d  #define PRINTK_T(fmt, args...)  printk(KERN_INFO LOG_TAG fmt, __FUNCTION__, __LINE__,  ##args)struct gpio_button_data {const struct gpio_keys_button *button;struct input_dev *input;-462,9 467,8  static int gpio_keys_setup_key(struct platform_device *pdev,spin_lock_init(bdata-lock);if (gpio_is_valid(button-gpio)) { - -               error  devm_gpio_request_one(pdev-dev, button-gpio, -                                             GPIOF_IN, desc);PRINTK_T(gpio:%d\n,button-gpio);error  devm_gpio_request(pdev-dev, button-gpio,desc);if (error  0) {dev_err(dev, Failed to request GPIO %d, error %d\n,button-gpio, error);-483,7 487,9  static int gpio_keys_setup_key(struct platform_device *pdev,if (button-irq) {bdata-irq  button-irq;} else {gpio_direction_input(button-gpio);irq  gpio_to_irq(button-gpio);PRINTK_T(weiqifa irq :%d\n,irq);if (irq  0) {error  irq;dev_err(dev,-540,8 546,10  static int gpio_keys_setup_key(struct platform_device *pdev,if (!button-can_disable)irqflags | IRQF_SHARED;-       error  devm_request_any_context_irq(pdev-dev, bdata-irq, -                                            isr, irqflags, desc, bdata);PRINTK_T(weiqifa devm_request_threaded_irq()\n);error  devm_request_threaded_irq(pdev-dev, bdata-irq,NULL,isr, irqflags| IRQF_ONESHOT, desc, bdata);if (error  0) {dev_err(dev, Unable to claim irq %d; error %d\n,bdata-irq, error);-709,6 717,8  static int gpio_keys_probe(struct platform_device *pdev)int i, error;int wakeup  0;       PRINTK_T(start.\n); if (!pdata) {pdata  gpio_keys_get_devtree_pdata(dev);if (IS_ERR(pdata))-779,6 789,8  static int gpio_keys_probe(struct platform_device *pdev)device_init_wakeup(pdev-dev, wakeup);       PRINTK_T(end.\n); return 0;err_remove_group: 可以确定的是如果不修改的话肯定是会出错的。你要知道这个驱动是在2005年就完成编写了中间经过了多少次的系统升级而且很多厂商主推的还是ADC按键驱动GPIO口驱动默认情况下是会被抛弃的厂商释放的SDK根本就不会记得修改这个驱动代码所以别以为你的手机运行正常里面就没有bugbug无处不在只是我们有了重启大法而已。4. dts 代码gpio-keys {compatible  gpio-keys;#address-cells  1;#size-cells  0;autorepeat;//pinctrl-names  default;//pinctrl-0  pwrbtn;button0 {gpios  pio 49 IRQ_TYPE_EDGE_BOTH;linux,code  KEY_F13;label  GPIO F13 Power;linux,input-type  1;gpio-key,wakeup  1;debounce-interval  100;};button1 {gpios  pio 48 IRQ_TYPE_EDGE_BOTH;linux,code  KEY_F14;label  GPIO F14 Power;linux,input-type  1;gpio-key,wakeup  1;debounce-interval  100;};button2 {gpios  pio 51 IRQ_TYPE_EDGE_BOTH;linux,code  KEY_F15;label  GPIO F15 Power;linux,input-type  1;gpio-key,wakeup  1;debounce-interval  100;};}; 5. 测试驱动烧录后按下按键可以看到键值上报.推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~嵌入式Linux微信扫描二维码关注我的公众号

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

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

相关文章

辽宁网站建设专业学校wordpress 80端口

之前的blog链接:https://blog.csdn.net/weixin_43303286/article/details/131700482?spm1001.2014.3001.5501 我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Lab…

所有网站排名2015年wordpress链接数据库文件

前言 在游戏和图形应用开发领域,大型场景的纹理管理一直是一个具有挑战性的任务。Unity3D中的Virtual Texture(虚拟纹理)技术为这一难题提供了一种创新的解决方案。本文将对Virtual Texture技术进行详细介绍,并提供代码实现的基础…

网站建设进度及实过程外包加工网会员

Nginx在主流硬件上的并发数为十万,网络处理方面的领先地位,归功于突破性的事件驱动架构。 Nginx在每颗内核上创建一个工作进程,有效利用硬件资源。 在单个工作进程中交替处理多个连接,应对突如其来的网络流量。 Nginx资源管理 Nginx使用状态机管理流量。 非阻塞事件…

屏蔽ip网站吗北京微信小程序开发报价

目录 一、socket简介 二、socket编程接口函数介绍 2.1 socket()函数(创建socket) 2.2 bind()函数(绑定地址和端口) 2.3 listen()函数(设置socket为监听模式) 2.4 accept()函数(接受连接…

域名注册没有网站wordpress不用缓存

hash实现 redis的hash数据结构和java的HashMap虽然不同,但是有异曲同工之妙,value是键值对,相当于HashMap,对于hash碰撞也是采用的类似于HashMap的处理方式,数组链表,更适合存储对象,将一个对象…

网站知识架构在线培训系统软件

一.题目要求 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7…

建设银行安徽 招聘网站在线制作网站 如何禁止蜘蛛收录网站

Python是一种高级编程语言,非常适合用于集成API,即应用程序编程接口。API通常是由网站和各种软件提供的接口,可以让不同的程序之间进行数据交换和通信。在Python中调用API,可以帮助我们轻松地获取数据,并将其整合到我们…

网站模板psd旅游公司网站建设ppt

Azure/azure-quickstart-templates Stars: 13.4k License: MIT 这个项目是 Azure Resource Manager QuickStart Templates,它包含了社区贡献的所有当前可用的 Azure 资源管理器模板。维护着一个可搜索的模板索引,并提供如何使用或向该存储库做出贡献的…

网站系统分析报告昆山有建设网站的吗

偶尔听歌的时候发现了一个很小众的音乐分享网站,邻居的耳朵,有个人的电台类型,属于音乐分享文字分享,觉得很不错。从域名来看,属于多米旗下的网站:http://ear.duomi.com/ 看来多米收购了很多这样的小站&am…

网站专题页面案例2015年做那个网站致富

文件上传基础篇 文件上传漏洞原理 ​ 目标网站存在文件上传接口,但是对用户上传的文件没有做仔细甄别,导致黑客可以根据此功能点直接上传木马到网站服务器,造成危害 文件上传存在点 ​ 通常有头像上传,pdf上传 文件上传防护 …

西安网站制作流程中国网库企业黄页

燃财经(ID:rancaijing)原创 作者 | 杜枫 编辑 | 魏佳中国互联网的发展,是一部由大佬撑起的奋斗史,也是一部由大佬主演的打脸史。和传统行业不同,互联网行业日新月异,从业者趋于年轻。马云唱起了摇滚&#x…

做网站主流技术免费网页模板源代码

文 │ 骨朵国漫一、各漫画平台总体趋势1、快看漫画快看漫画平台2019年Q2各月评论数较Q1有较明显的下滑,月评论数都在400万条左右;收藏数方面,2019年2月达到了半年内最高值,为2660.1万条。2、看漫画、知音漫客等平台(小明太极旗下)…

长沙网站改版域名备案 网站名称

2020年艰难而短暂,而互联网的历史车轮还是轰隆隆一路向前,服务网格/云原生/Serverless架构,各种新架构大行其道。重新审视当下主流的编程语言,天下第一的Java已老,下行多年的.NET却浴火重生,焕发生机&#…

福州网站建站建立网站就可以赚钱了吗

共阴极或者共阳极数码管,因为其需要电流大,而一般51输出电流低,需要锁存器。买的开发板使用的共阴极数码管。至于其构造,找个相关方面的书看看,这里主要是对做好的电路板进行编程。刚开始的时候,感觉在数码…

南京营销网站建设开的免费网站能赚钱吗

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse、C Bui…

昂昂溪网站建设建立网站的目的和意义

题解:ABC275D - Yet Another Recursive Function 题目 链接:Atcoder。 链接:洛谷。 难度 算法难度:普及。 思维难度:入门。 调码难度:入门。 综合评价:简单。 算法 记忆化深度优先搜索…

网络营销网站建设存在问题大连网站建设比较好的公司

XML(可扩展标记语言)是一种常用于存储和交换数据的标记语言,而Java是一种强大的编程语言,它具有处理XML的能力。在本篇博客中,我们将探讨XML的基础知识,学习如何在Java中解析和生成XML文档,以及…

学校网站首页制作网站APP注册做任务

目录 一、类型推断和类型注解二.类型注解,声明时指定类型三、类型断言四、基础类型和联合类型字符串数字和浮点类型布尔空和undefined多类型值限定 五、数组 元组 枚举数组元组,?代表可选参数枚举枚举使用 六、函数函数作为参数 七、类、接口与抽象类类访问修饰符类…

深圳专业建设网站哪个公司好传奇网站模板免费下载

最近,我重新发现了我遗忘的JBoss Fuse功能,并且我认为其他人可能会从此提醒中受益 。 这篇文章将重点放在JBoss Fuse和Fabric8上,但所有正在寻找最小侵入性方法来为其静态配置文件添加一定程度的动态支持的开发人员也可能会对此感兴趣。 在…

广州网站建设:深圳推广平台有哪些

文章目录 前言一、新增磁盘二、初始化磁盘1.查看2.初始化3.挂载 总结 前言 虚拟机磁盘空间很散乱,大部分都在/root和/home下不好操作,故考虑新增磁盘、增加挂载点。 一、新增磁盘 右键打开虚拟机设置 二、初始化磁盘 1.查看 fdisk -l2.初始化 …