以下内容源于朱有鹏《物联网大讲堂》课程的学习,如有侵权,请告知删除。

1、模板(参考input_programming.txt)

(1)input类设备驱动模式非常固定,用参考模版修改即可

(2)新建驱动项目并粘贴模版内容

2、模板驱动的解析

3、着手移植驱动

4、驱动移植细节

5、驱动实践

#include <linux/input.h>
#include <linux/module.h>
#include <linux/init.h>
#include <asm/irq.h>
#include <asm/io.h>#include <mach/irqs.h>           // arch/arm/mach-s5pv210/include/mach/irqs.h
#include <linux/interrupt.h>
#include <linux/gpio.h>/** X210:** POWER  -> EINT1   -> GPH0_1* LEFT   -> EINT2   -> GPH0_2* DOWN   -> EINT3   -> GPH0_3* UP     -> KP_COL0 -> GPH2_0* RIGHT  -> KP_COL1 -> GPH2_1* MENU   -> KP_COL3 -> GPH2_3 (KEY_A)* BACK   -> KP_COL2 -> GPH2_2 (KEY_B)*/#define BUTTON_IRQ    IRQ_EINT2static struct input_dev *button_dev;static irqreturn_t button_interrupt(int irq, void *dummy)
{ int flag;s3c_gpio_cfgpin(S5PV210_GPH0(2), S3C_GPIO_SFN(0x0));     // input模式flag = gpio_get_value(S5PV210_GPH0(2));s3c_gpio_cfgpin(S5PV210_GPH0(2), S3C_GPIO_SFN(0x0f));     // eint2模式input_report_key(button_dev, KEY_LEFT, !flag);input_sync(button_dev);return IRQ_HANDLED;
}static int __init button_init(void)
{ int error;error = gpio_request(S5PV210_GPH0(2), "GPH0_2");if(error)printk("key-s5pv210: request gpio GPH0(2) fail");s3c_gpio_cfgpin(S5PV210_GPH0(2), S3C_GPIO_SFN(0x0f));        // eint2模式if (request_irq(BUTTON_IRQ, button_interrupt, IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, "button-x210", NULL)) { printk(KERN_ERR "key-s5pv210.c: Can't allocate irq %d\n", BUTTON_IRQ);return -EBUSY; }button_dev = input_allocate_device();if (!button_dev) { printk(KERN_ERR "key-s5pv210.c: Not enough memory\n");error = -ENOMEM;goto err_free_irq; }button_dev->evbit[0] = BIT_MASK(EV_KEY);button_dev->keybit[BIT_WORD(KEY_LEFT)] = BIT_MASK(KEY_LEFT);error = input_register_device(button_dev);if (error) { printk(KERN_ERR "key-s5pv210.c: Failed to register device\n");goto err_free_dev; }return 0;err_free_dev:input_free_device(button_dev);
err_free_irq:free_irq(BUTTON_IRQ, button_interrupt);return error;
}static void __exit button_exit(void)
{ input_unregister_device(button_dev); free_irq(BUTTON_IRQ, button_interrupt);
}module_init(button_init);
module_exit(button_exit); MODULE_LICENSE("GPL");
MODULE_AUTHOR("aston <1264671872@qq.com>");
MODULE_DESCRIPTION("key driver for x210 button.");

input子系统基础之按键5——按键驱动相关推荐

  1. 8.input子系统基础之按键

    转自 https://edu.csdn.net/lecturer/505 朱老师物联网大讲堂 <5.linux驱动开发-第5部分-5.8.input子系统基础之按键> 第一部分.章节目录 ...

  2. input子系统基础之按键4——输入核心层源码分析

    以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵权,请告知删除. 主要分析input.c文件 一.输入核心层源码分析1 1.核心模块注册:input_init函数 (1)class_r ...

  3. input子系统基础之按键1——什么是input子系统?

    以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵权,请告知删除. 参考:http://www.cnblogs.com/deng-tao/p/6094049.html 本节全面介绍inp ...

  4. input子系统基础之按键3——input子系统架构总览

    以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵权,请告知删除. 1.input子系统分为三层 整体驱动分为三层(不是说应用层和驱动层的关系,而是驱动分层) (1)最上层:输入事件驱动 ...

  5. input子系统基础之按键2——input设备应用层编程实践

    以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵权,请告知删除. 一.input设备应用层编程实践1 1.确定设备文件名 (1)应用层操作驱动有2条路:/dev目录下的设备文件,/sy ...

  6. linux按键驱动中的结构体,linux 驱动之input子系统(gpio-keys)实现

    1.概述 Gpio-keys 是基于input子系统实现的一个通用按键驱动,该驱动也符合linux驱动实现模型,即driver和device分离模型.一般按键驱动,都是基于gpio-keys进行开发的 ...

  7. Linux按键输入实验(体验一下输入驱动,实际开发使用input子系统处理)

    目录 Linux下按键驱动原理(使用原子操作) 硬件原理图分析 实验程序编写 修改设备树文件 按键驱动程序编写 编写测试APP(循环读取按键值) 运行测试 编译驱动程序和测试APP 运行测试(whil ...

  8. 八、INPUT子系统和内核自带的GPIO按键驱动

    Input子系统驱动框架 = 设备层 + 核心层 + 事件处理层 其中,设备层部分的代码跟具体的输入设备相关,由驱动工程师来具体实现,负责监测并上报具体的输入事件.核心层起承上启下的作用,接受设备层上 ...

  9. 31 Linux input子系统按键驱动--4IO驱动16按键

    31.1 前言 按键是设备中是最常见的人机交互方式,本节中将学习两部分. (1)如何4个GPIO 16个按键的实现: (2)Linux input按键驱动开发实例编程: 31.2 4个IO驱动16按键 ...

最新文章

  1. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——删除
  2. 推荐一款最好用Mysql数据库客户端
  3. jQuery动态操作表单
  4. 雷军超燃演讲:人生最后一次创业,押上全部战绩和信誉造车,小米亏得起!...
  5. 2020跨境电商独立站将喷发式增长?
  6. 【java学习之路】(java SE篇)009.IO
  7. 科大讯飞语音转文字_科大讯飞推出TWS真无线耳机:主打商务沟通,实时语音转文字...
  8. Python编程手册系列 - 日历、日期、时间相关内建模块详解
  9. MUSIC算法及MATLAB实现
  10. linux添加变色龙引导,变色龙Chameleon Install 2281引导工具 windows电脑安装黑苹果
  11. JSP PDF打印 随记
  12. 《Linux设备驱动开发详解 A》一一3.1 Linux内核的发展与演变
  13. 新版二开cp盲盒小纸条月老小程序源码【源码好优多】
  14. 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
  15. thinkphp3.2读取Excel文件
  16. 32-Figma-谷歌表格插件替换数据方法
  17. 管廊隧道怎么定位人员?分享管廊隧道人员定位系统解决方案
  18. (HEM/OHEM)hard negative(example)mining难例挖掘 与focal loss、GHM损失函数
  19. 【索引分类】位图索引
  20. APP马甲包优化技巧制作流程(二)

热门文章

  1. cmake 常用命令
  2. git 的安装以及使用:是一个开源的分布式版本控制系统,可以对项目进行版本管理。 早期是linux之父用来管理linux系统源代码的(linux是和windows一样操作系统 开源免费的操作...
  3. runtime官方文档
  4. C语言的“编译时多态”
  5. 好程序员前端分享使用JS开发简单的音乐播放器
  6. 工作中常用的但是又容易忽略的问题
  7. ios 开发日记 21 -自动处理键盘事件的第三方库:IQKeyboardManager
  8. PropertyGrid控件 分类(Category)及属性(Property)排序
  9. Android中实时视频传输(摄像头实时视频传输)解决方案二
  10. PHP多种形式发送邮件