上小节讲解了输入子系统的基本框架,该小节我们编写一个万能模拟输入驱动程序。linux 的输入子系统不进行讲解了,欢迎大家观看我的文章,在这里就当做大家对linux内核驱动已经比较了解了。最简单字符驱动的框架如下:
APP: open read write ioctl
启动: drv_open    drv_ read    drv_write drv_ioctl
硬件: 进行相应操作
但是在输入子系统中,前人已经定出了很多框架,比如我们一个应用层一个open函数,对应驱动层的多个open函数,具体是使用哪个,还需要进行参数指定,框图如下:

那么应用层怎么知道哪个才是他需要的呢?在dev/input下存在多个设备节点,每个设备节点都有对应的驱动,应用层只需要确定他想要的节点即可。一般来说dev/input/event0,2,3…是原始数据,没有加工的,如果想先获得处理过的数据,例如鼠标,我们可以open(ev/input/monsedev)找安卓中只使用了event.c。

我们硬件驱动需要做的相关工作:根据硬件状态上报数据(原始数据),如果是一个鼠标,我们可以先上报给monsedev,然后进行处理之后,monsedev再继续上报。一般编写流程如下:
1.分配/构造input_device结构体
2.注册:input_register_device(成功时通过connect找ev/input下会创建event节点)
3.有输入事件产生时,中断上报,input_event(dev,type,code,value)

下面我们怎么写出模拟驱动呢?步骤基本和上面一样,只是我们不在操作硬件,上报的时间是我们自己定义的事件。通过另外一个应用程序写进去的,那么为什么可以这样呢?

上面的图示中,驱动层分为了两层,当应用程序open之后调用read函数,在evd_read处,会进行堵塞,或者说休眠等待。他等待缓存区有数据可读,该缓存区域是evdev层分配的一段空间。在硬件驱动层察觉到中断之后,就会往这个缓存区写入数据(即上报数据),那么evd_read就会苏醒,从缓存区而获取到数据然后提交给应用层。是不是感觉层次很分明,如同第一个人(APP)叫第二个人(evdev层)去取数据,但是他不直接去拿,而是一个地方等待,等待第三个人(硬件相关驱动层)去数据给他,等待以后,第二个人在返回给第一个人。那么我们现在第三个人,不用硬件驱动就可以了,我们使用另外一个APP,往缓存区写入数据。

找andriod中,有一个可以直接当做第三个人的应用程序,我们看看如何使用,打开我么你的开发板,进入andriod系统之后,执行:
sendevent
我们可以到打印信息
use: sendevent device type code value
这个就是该程序的使用方法。

6.4输入系统-模拟输入系统驱动相关推荐

  1. Ubuntu系统---安NVIDIA 驱动后 CUDA+cuDNN 安装

    Ubuntu系统---安NVIDIA 驱动后  CUDA+cuDNN 安装 --------------------------------------------@20190726--------- ...

  2. Win11系统没有声卡驱动怎么解决 Win11系统没有声卡驱动解决方法

    Win11系统没有声卡驱动如何解决?现在很多用户都升级Win11系统了,最近有些朋友在升级更新win11系统之后,发现电脑没有声音,检查后才发现原来是没有声卡驱动.那么,安装Win11安装后没有声卡驱 ...

  3. 【2016年第4期】大数据应用系统的消息驱动架构

    贵芳1,李廉1,杨静1,武永卫2 1.合肥工业大学计算机与信息学院,安徽 合肥 230009: 2.清华大学计算机科学与技术系,北京 100084 摘要:基于消息驱动框架的软件开发成为大数据应用系统的 ...

  4. sm总线控制器找不到驱动程序_细说嵌入式系统下的驱动程序设计

    嵌入式系统驱动程序的开发有别于WIndows或Linux.后者除了必须了解新设备的硬件特性,把控制硬件的程序尽快完成之外,还需要设法让驱动程序符合Windows或Linux的规定(大且复杂的架构).但 ...

  5. win10 android叹号,win10系统设备管理器驱动显示黄色感叹号的详细技巧

    win10系统使用久了,好多网友反馈说win10系统设备管理器驱动显示黄色感叹号的问题,非常不方便.有什么办法可以永久解决win10系统设备管理器驱动显示黄色感叹号的问题,面对win10系统设备管理器 ...

  6. 自动清理源计算机设备驱动,win10系统删除过期驱动程序设备的设置技巧

    有关win10系统删除过期驱动程序设备的操作方法想必大家有所耳闻.但是能够对win10系统删除过期驱动程序设备进行实际操作的人却不多.其实解决win10系统删除过期驱动程序设备的问题也不是难事,小编这 ...

  7. linux安装系统前安装驱动(driver)方法

    在Cent OS 下装HBA/Raid card driver方法: 1.从安装盘启动: 2.进入系统菜单选择界面(一般有3个选项),迅速按下"E"键: 3.用键盘的方向键定位到& ...

  8. 细说嵌入式系统下的驱动程序设计

    嵌入式系统驱动程序的开发有别于WIndows或Linux.后者除了必须了解新设备的硬件特性,把控制硬件的程序尽快完成之外,还需要设法让驱动程序符合Windows或Linux的规定(大且复杂的架构).但 ...

  9. 高通平台使用64位win7系统无法安装驱动的解决方法

    XP停止服务,于是果断告别XP换上win7,可是突然发现高通平台驱动在windows 7 64位电脑上安装不了有木有?!   其实不用担心!这个很好搞定哦! 首先咱们得知道64位的win7考虑了系统安 ...

  10. Linux系统下adb驱动安装步骤 及 问题总结

    Linux系统下adb驱动安装步骤 及 问题总结 一.安装ADB工具 sudo apt-get update sudo apt-get install android-tools-adb 二.adb驱 ...

最新文章

  1. VTK与ITK的详细安装指南
  2. 安装Loadrunner11及破解步骤
  3. 【收集】几款浏览器兼容性测试工具
  4. Redis 中常用命令
  5. JDBC的SQL注入漏洞
  6. 使用AWS使Spring Boot应用程序无服务器运行
  7. pandas 转换为文本类型_分享5个高效的pandas函数!
  8. 谷歌AI为达目的,把自己的身体改造成了这样……
  9. 机器 学习中的方差和偏差
  10. 卡巴斯基KEY被列入黑名单
  11. mysql数据类型及占用字节数
  12. Linux小知识--通过MAC地址查询厂家OUI(成功率很高)
  13. 计算机操作员中级操作技能,计算机操作员中级操作技能试卷.doc
  14. ROS激光SLAM导航理解
  15. 游戏开发之地图编辑器
  16. 编程入门先学什么 c语言软件,编程入门先学什么软件
  17. 基于加速度计的倾角检测算法-C语言程序
  18. 面试后说hold什么意思_面试结束后就傻傻等通知?你还可以做这三件事!
  19. 如何把PDF文件转换成其他格式或者转换成可编辑的PDF格式
  20. Python多线程操作

热门文章

  1. ubuntu修改桌面主文件夹为英文
  2. 360Tray.exe是什么进程?360Tray.exe程序及常见问题介绍
  3. Doclist压缩方法简介
  4. 忍无可忍?英特尔执行副总裁撰文《高通的诡辩被戳穿了》指责高通
  5. Rimworld Mod制作教程7 comp组件
  6. ecshop与java的关系_ecshop模板的原理分析
  7. 求助:如何实现EA自动判断趋势,寻找高低点,并获取高低点K线价格数据,然后根据价格画出支撑阻力区域.
  8. Python利用xpath和正则re爬取新浪新闻
  9. numpy 之average
  10. View事件分发机制分析