完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 xble 于 2016-7-25 17:48 编辑 创龙提供的光盘里面为我们提供了丰富的资料和学习素材。我认为button_test是一个不错的例子,将这个例子前前后后,上上下下都研究透彻,非常有利于提高我们的水平。 ![]() 编译一下,在am4379开发板上运行一下,不错,能够出现下面的信息,不过不论你们按开发板上的4个按键,程序也没有任何反应,当然你按了重启键,系统就会重启。 ![]() 我们该怎么分析这个文件呢?代码逻辑很简单我们很容易找到有两处关键点,/dev/input/event2是linux设备节点,‘5’和‘6’代表是哪个key(猜测)。 这里就要提到一个概念linux input子系统. 输入设备(如按键,键盘,触摸屏,鼠标等)是典型的字符设备,其一般的工作机制是低层在按键,触摸等动作发生时产生一个中断(或驱动通过timer定时查询),然后cpu通过SPI,I2C或者外部存储器总线读取键值,坐标等数据,放一个缓冲区,字符设备驱动管理该缓冲区,而驱动的read()接口让用户可以读取键值,坐标等数据。从网上找来的这个图很清晰的解析其大概流程。 ![]() 在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件处理层就为我们用户空间的应用程序提供了统一访问设备的接口和驱动层提交来的事件处理。所以这使得我们输入设备的驱动部分不在用关心对设备文件的操作,而是要关心对各硬件寄存器的操作和提交的输入事件。 ![]() 具体我们这里,我们就要找到keypad的input子系统的驱动代码在哪里? /dev/input/event2似乎给我们指明了努力的方向,它就是一个input类型的设备节点,可是我们在无法找到其具体实现。我们可以通过命令: cat /proc/bus/input/devices查看到详细信息。 ![]() 其实我们仔细分析input.c还是能其实现,具体实现大家可以自己研究input_proc_init函数。 这里我们知道其实我们应该打开/dev/input/event1,而不是event2. 在gpio_keys.c文件中,gpio_keys_get_devtree_pdata函数则是示例程序中'5'和‘6’的出处。 找到我们使用的devtree文件am437x-gp-evm.dts,两个button的定义显然应该是‘7’和‘8’。 ![]() |
|
相关推荐
|
|
RK这2款旗舰芯片RK3588 PK RK3576,谁是最优选
419 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-文件系统之应用开机自启
1003 浏览 0 评论
2046 浏览 0 评论
迅为RK3568开发板Dev-Eco studio 的界面布局-导航栏-事件通知区
1169 浏览 0 评论
迅为RK3568开发板Dev-Eco studio 的界面布局-导航栏-工程目录区
1101 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-7-12 20:35 , Processed in 0.556391 second(s), Total 68, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191