韦东山嵌入式Liunx入门应用开发二(含课后作业、代码详解)


本人学习完韦老师的视频,因此来复习巩固,写以笔记记之。
看完视频复习的同学观看最佳!
基于 IMX6ULL-PRO
参考视频 Linux快速入门到精通视频
参考资料:01_嵌入式Linux应用开发完全手册V5.1_IMX6ULL_Pro开发板.pdf

一、输入系统应用编程

1-1 输入系统简介

输入设备:常见的有键盘、鼠标、遥控杆、书写板、触摸屏等。用户通过这些输入设备与 Linux 系统进行数据交换。
输入系统:Linux系统为了统一管理这些输入设备,实现了一套能兼容所有输入设备的框架。框架:输入系统。驱动开发人员基于这套框架开发出程序,应用开发人员就可以使用统一的API去使用设备。
输入系统框架如下图所示:
在这里插入图片描述
/dev/input/event0 是Linux操作系统的一个输入设备,代表了计算机上的第一个物理输入设备,通常是键盘、鼠标、触摸屏。所有输入设备都被视为文件,以便于使用文件I/O操作来读写或写入输入设备的数据。

假设用户程序直接访问dev/input/event0 设备节点,数据的流程为:
APP发起读操作,若无数据则休眠;
② 用户操作设备,硬件上产生中断;
③ 输入系统驱动层对应的驱动程序处理中断:读取到数据,转换为标准的输入事件,向核心层汇报。输入事件即“struct input_event ”结构体。
④ 核心层可以决定把输入事件转发给上面哪个 handler来处理:从handler 的名字来看,它就是用来处输入操作的。有多种 handler ,比如:evdev_handler 、kbd_handler 、joydev_handler 等等。

内核中使用input_dev 结构体来表示输入设备,部分内容如下图所示

struct input_dev {
   
   
	const char *name;//输入设备的名字
	const char *phys;//在系统层次结构中设备的物理路径;
	const char *uniq;
	struct input_id id;//输入设备id,包含总线类型,制造商id,产品id和版本号等;
 
	unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)];//设备属性和怪异位图
 
	unsigned long evbit[BITS_TO_LONGS(EV_CNT)];//设备支持的事件类型;EV_KEY, EV_REL;
	unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];//设备具有的按键(能够报告的)
	unsigned long relbit[BITS_TO_LONGS(REL_CNT)];//设备相对轴
	unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
	unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];//设备支持的杂项设备事件
	unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];//设备存在的led位图
	unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];//设备支持的声音效果
	unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];//设备支持的力反馈效果位图
	unsigned long swbit[BITS_TO_LONGS(SW_CNT)];//设备存在的开关位图

APP可以从struct input_event 结构体获取一系列输入事件

struct input_event {
   
   
	struct timeval time;
	__u16 type;  		/*哪类事件*/
	__u16 code;			/*哪个事件*/
	__s32 value;		/*事件值*/
};

① type:表示哪类事件
比如EV_KEY表示按键类、 EV_REL表示相对位移(比如鼠标)、 EV_ABS 表示绝对位置(比如触摸屏)

/* Event type */
#define EV_SYN			0x00
#define EV_KEY			0x01
#define EV_REL			0x02
#define EV_ABS			0x03
#define EV_MSC			0x04
#define EV_SW			0x05
#define EV_LED			0x11
#define EV_SND			0x12
东山视频目录+链接整合-1 : 第1课 环境搭建及工具、概念介绍 第2课 GPIO实验 第3课 存储管理器实验 第4课 MMU实验 第5课 NAND FLASH控制器 第6课 中断控制器 第7课 系统时钟和UART实验 第8课 LCD实验 第9课第1节 u-boot分析之编译体验 第9课第2节 u-boot分析之Makefile结构分析 第9课第3节 u-boot分析之源码第1阶段 第9课第3节 u-boot分析之源码第2阶段 第9课第4节 u-boot分析之u-boot命令实现 第9课第5节 u-boot分析_uboot启动内核 第10课第1节 内核启动流程分析之编译体验 第10课第2节 内核启动流程分析之配置 第10课第3节 内核启动流程分析之Makefile 第10课第4节 内核启动流程分析之内核启动 第11课第1节 构建根文件系统之启动第1个程序 第11课第2节 构建根文件系统之init进程分析 第11课第3节 构建根文件系统之busybox 第11课第4节 构建根文件系统之构建根文件系统 第12课第1节 字符设备驱动程序之概念介绍 第12课第2.1节 字符设备驱动程序之LED驱动程序_编写编译 第12课第2.2节 字符设备驱动程序之LED驱动程序_测试改进 第12课第2.3节 字符设备驱动程序之LED驱动程序_操作LED 第12课第3节 字符设备驱动程序之查询方式的按键驱动程序 第12课第4.1节 字符设备驱动程序之中断方式的按键驱动_Linux异常处理结构 第12课第4.2节 字符设备驱动程序之中断方式的按键驱动_Linux中断处理结构 第12课第4.3节 字符设备驱动程序之中断方式的按键驱动_编写代码 第12课第5节 字符设备驱动程序之poll机制 第12课第6节 字符设备驱动程序之异步通知 第12课第7节 字符设备驱动程序之同步互斥阻塞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值