6.4输入系统-模拟输入系统驱动
上小节讲解了输入子系统的基本框架,该小节我们编写一个万能模拟输入驱动程序。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输入系统-模拟输入系统驱动相关推荐
- Ubuntu系统---安NVIDIA 驱动后 CUDA+cuDNN 安装
Ubuntu系统---安NVIDIA 驱动后 CUDA+cuDNN 安装 --------------------------------------------@20190726--------- ...
- Win11系统没有声卡驱动怎么解决 Win11系统没有声卡驱动解决方法
Win11系统没有声卡驱动如何解决?现在很多用户都升级Win11系统了,最近有些朋友在升级更新win11系统之后,发现电脑没有声音,检查后才发现原来是没有声卡驱动.那么,安装Win11安装后没有声卡驱 ...
- 【2016年第4期】大数据应用系统的消息驱动架构
贵芳1,李廉1,杨静1,武永卫2 1.合肥工业大学计算机与信息学院,安徽 合肥 230009: 2.清华大学计算机科学与技术系,北京 100084 摘要:基于消息驱动框架的软件开发成为大数据应用系统的 ...
- sm总线控制器找不到驱动程序_细说嵌入式系统下的驱动程序设计
嵌入式系统驱动程序的开发有别于WIndows或Linux.后者除了必须了解新设备的硬件特性,把控制硬件的程序尽快完成之外,还需要设法让驱动程序符合Windows或Linux的规定(大且复杂的架构).但 ...
- win10 android叹号,win10系统设备管理器驱动显示黄色感叹号的详细技巧
win10系统使用久了,好多网友反馈说win10系统设备管理器驱动显示黄色感叹号的问题,非常不方便.有什么办法可以永久解决win10系统设备管理器驱动显示黄色感叹号的问题,面对win10系统设备管理器 ...
- 自动清理源计算机设备驱动,win10系统删除过期驱动程序设备的设置技巧
有关win10系统删除过期驱动程序设备的操作方法想必大家有所耳闻.但是能够对win10系统删除过期驱动程序设备进行实际操作的人却不多.其实解决win10系统删除过期驱动程序设备的问题也不是难事,小编这 ...
- linux安装系统前安装驱动(driver)方法
在Cent OS 下装HBA/Raid card driver方法: 1.从安装盘启动: 2.进入系统菜单选择界面(一般有3个选项),迅速按下"E"键: 3.用键盘的方向键定位到& ...
- 细说嵌入式系统下的驱动程序设计
嵌入式系统驱动程序的开发有别于WIndows或Linux.后者除了必须了解新设备的硬件特性,把控制硬件的程序尽快完成之外,还需要设法让驱动程序符合Windows或Linux的规定(大且复杂的架构).但 ...
- 高通平台使用64位win7系统无法安装驱动的解决方法
XP停止服务,于是果断告别XP换上win7,可是突然发现高通平台驱动在windows 7 64位电脑上安装不了有木有?! 其实不用担心!这个很好搞定哦! 首先咱们得知道64位的win7考虑了系统安 ...
- Linux系统下adb驱动安装步骤 及 问题总结
Linux系统下adb驱动安装步骤 及 问题总结 一.安装ADB工具 sudo apt-get update sudo apt-get install android-tools-adb 二.adb驱 ...
最新文章
- VTK与ITK的详细安装指南
- 安装Loadrunner11及破解步骤
- 【收集】几款浏览器兼容性测试工具
- Redis 中常用命令
- JDBC的SQL注入漏洞
- 使用AWS使Spring Boot应用程序无服务器运行
- pandas 转换为文本类型_分享5个高效的pandas函数!
- 谷歌AI为达目的,把自己的身体改造成了这样……
- 机器 学习中的方差和偏差
- 卡巴斯基KEY被列入黑名单
- mysql数据类型及占用字节数
- Linux小知识--通过MAC地址查询厂家OUI(成功率很高)
- 计算机操作员中级操作技能,计算机操作员中级操作技能试卷.doc
- ROS激光SLAM导航理解
- 游戏开发之地图编辑器
- 编程入门先学什么 c语言软件,编程入门先学什么软件
- 基于加速度计的倾角检测算法-C语言程序
- 面试后说hold什么意思_面试结束后就傻傻等通知?你还可以做这三件事!
- 如何把PDF文件转换成其他格式或者转换成可编辑的PDF格式
- Python多线程操作
热门文章
- ubuntu修改桌面主文件夹为英文
- 360Tray.exe是什么进程?360Tray.exe程序及常见问题介绍
- Doclist压缩方法简介
- 忍无可忍?英特尔执行副总裁撰文《高通的诡辩被戳穿了》指责高通
- Rimworld Mod制作教程7 comp组件
- ecshop与java的关系_ecshop模板的原理分析
- 求助:如何实现EA自动判断趋势,寻找高低点,并获取高低点K线价格数据,然后根据价格画出支撑阻力区域.
- Python利用xpath和正则re爬取新浪新闻
- numpy 之average
- View事件分发机制分析