当前位置:
文档之家› Linux输入子系统在触摸屏驱动上的实现
Linux输入子系统在触摸屏驱动上的实现
图 1 表面声波式触摸屏原理
以 X 轴为例, 当手指去触摸屏幕时, 将吸收相应 位置的声波能量, 声波信号将衰 减, 此 X 轴声波接收 器接收到的波形在时间 t 上形成一个缺口, 通过确24 作者简介: 於琪建 ( 1983- ) , 男, 浙江台州人, 主要从事电子信息系统集成方面的研究. E-m ai:l q ijian1115@ yahoo. com. cn 通信联系人: 张海峰, 男, 副教授, 硕士生导师. E-ma i:l hfzhang0811@ hdu. edu. cn
图 2 file_operations, file, inode关联过程
4 L inux设备模型与输入子系统
L inux 2. 6 内核的一个重要特色是提供了统一的 内核设备模型, 以适应 / 系统的拓扑结构越来越复杂, 智能电源管理、热插拔以及即插即用的支持要求也越 来越高 0的趋势。
简单地说, L inux 设 备模型是基 于内核对 象 kobject来实现的。借助内核对象 kobject机制, 内核通过 / sys向用户控件输出设备的各类信息, 方便了设备的管 理。 / sys是 sysfs文件系统, 它是一个类似于 proc文件 系统的特殊文件系统, 用于将系统中的设备组织成层 次结构, 并向用户模式程序提供关于内核数据结构的 详细信息。
3 L inux字符设备驱动框架
设备驱动程序是操作系统内核和底层硬件之间的 接口。设备驱动程序为上层应用程序屏蔽了硬件的细 节。 L inux系统中设备驱动程序的设计核心思想是: 像 操作普通文件一样对硬件设备进行操作, 它提供了相 应文件 操作函数 的入口点, 如 open( )、read ( ) 、w r ite ( ) 、re lease( ) 等 [ 3-4] 。
图 3 Inpu t子系统层次结构
可以完成触摸屏驱动程序的设计。 D r iver 驱动 层主 要实 现向 内 核注 册 输 入 设备 以 实
现输入设备模型, 并提供将触摸屏采集到的数据上报 Inpu t核心 层的 方法 。 5. 1 输入设备的注册与注销
D r iver 驱动 层通 过调 用如 下 接口 函 数 来 向输 入 子 系统中注册和注销输入设备:
5 触摸屏驱动程序的实现
输入子系统的 3层驱动结构中, Input核心层与 Event处理层已由内核实现, 故采用设备模型与输入子 系统机制, 以简化设备驱动程序的设计。现在只需实 现 Driver驱动层, 即通过调用内核提供的接口函数, 就
# 34#
机电工程
第 26卷
冲区, 而后应用程序根据触摸屏的坐标进行数据校准 ( 坐标转换 ) , 最终光标显示在触摸笔所指的正确的位 置上。
(S choo l of E lectronics Inform ation, H angzhou D ianzi University, H angzhou 310018, Ch ina) Abstrac t: A im ing at simp lify ing the design of traditiona l L inux dr iver and contr ibuting to m anagem ent and m ain tenance o f the dr ive mode,l us ing the input subsystem based on ke rne l ob jec t, the L inux dev ice dr iverps fram ew ork was fu lfilled. The traditiona l m ethod concerned w ith the inte rfaces of file operations w as im proved. The me thod o f only reporting the input event to the L inux system was proposed. T he dr iver w as successfully deve loped. T he test resu lts indicate tha t the driver w orks w el,l and it can control the touch screen prec isely. K ey word s: dev ice dr ive r; dev ice mode;l input subsy stem; touch screen
0引 言
在嵌入式系统中, 触摸屏具有轻便、反应速度快、 节省空间、易于交流等优点, 成为了最简单、方便、自然 的一种人机交互方式。目前, 触摸屏有 4种类型: 电阻 式触摸屏、电容感应式触摸屏、红外线式触摸屏以及表 面声波式触摸屏。它们的实现材料不同, 但在实现原 理上都是一致的。
本研究主要实现 在嵌入式 ARM ( S3C2440) 下的 触摸屏驱动程序, 由于 S3C2440芯片上已有触摸屏的 接口, 为触摸屏驱动的实现创造了条件。
输入子系统 [ 5] 就是借助于 kobject机制 [ 6] 建立起 来的一种设备模型。如图 3所示, 具体由 D river驱动 层、Input核心层、Event处理层 3部分组成。 D river驱 动层主要将输入设备的数据或信息上报给 Input核心 层; Input核心层由 / driver / input / inpu.t c及相关头文件 实现, 它对下提供了 D river驱动层的接口, 对上提供了 Event处理层的接口; Event处理层提供文件操作方法, 它负 责 将数 据 放 到 设备 缓 冲 区, 用 户 程 序 ( 如 M in iGU I) 打开设备节点, 读取缓冲区数据。
L inux设备驱动程序可分为字符设备驱动程序、块 设备驱动程序和网络设备驱动程序, 本研究中触摸屏 设备为字符设备。
字符设备驱动程 序涉及到 3 个重要的数 据结构 体, 即 file_operations, file, inode。它们之间的关系及 其主要结构成员如图 2所示。
用户空间的应用程序要实现对设备文件的操作, 就是对位于 / dev下 的设备文件进行操作。这 些设备 文件在内核中就由 inode结构表示。当用 L inux 系统 提供的 open方法打开一个设备节点文件的时候, 就会 有表示该文件描述符 fd的 file结构指向这个 inode结 构, 具体实现方式是经过 dentry结构体 ( 目录结构体 ) 产生关联。可以有多个文件 描述符指向 inode结 构, 也就是一个设备文件可以按不同的方式打开多次。
( 1) input_reg ister_device( ); ( 2) input_unreg ister_dev ice( ) 。 以上两个函数调用的参数为 input_dev结构体 ( 在 dr iver/ input / inpu.t h中定义 )。注册完成之后, 内核为 输入设备在 Event处理层关联了相应的文件操作方法 ( 在 / driver/ input / tsdev. c中实现 )。这样, 当设备成功 注册后, 就会在 / dev 下生成相应的设备文件, 从而形 成 L inux 设备驱动程序基本框架。 5. 2 触摸屏驱动实现过程 如图 4所示, 首先触摸屏处于等待中断模式 上。 当触摸笔按 下的时候, 触摸屏将 产生一个 中断 INT _ TC。然后触摸屏将触发进入 X /Y 轴单独转化模式, 也 就是当 X 模式转换完成之后, 将产生一个 INT _ADC 中 断, 此时将进入 Y 模式转换, 当 Y 模式转换完成后, 将 又会产生一个 INT _ADC 中断。此时, 进入中断程序, 将分别取得 X 坐标值与 Y 坐标值。然 后驱动程序调 用接口函数 inpu t_report_abs( ), 将取得的值上报给 Inpu t核 心层 。
第 3期
於琪建, 等: L inux 输入子系统在触摸屏驱动上的实现
# 33#
2 S3C2440触摸屏接口
S3C2440芯片支持触摸屏的接口, 其包含触摸屏 控制器、4个外部场效应管及 1个外部电压源, 具体连 接可见芯片手册上的 ADC 和触摸屏接口操作框图 [ 1] 。
该触摸屏接口有 4种工作模式 [ 2 ] : ( 1) 正常转换模式: 用于通用 A /D转化; ( 2) 单独 X /Y 转化模式: 先进行 X 模式转换, 等 X 坐标转换完成之后, 产生 ADC中断, 然后进入 Y 模式转 换, 将 Y 坐标转换完成之后, 又产生一次 ADC中断; ( 3) X /Y 自动转换模式: 触摸屏自动地转换 X 坐 标和 Y 坐标; ( 4) 等待中断模式: 一般触摸屏开始工作后, 将处 于此模式。只有当触摸笔按下时, 触摸屏控制器才产 生一个 INT _TC 中断信号。 触摸屏接口工作模式涉及到 S3C2440 的 A /D 寄 存器主要有 4 个: ADC 控制寄存器、ADC 触摸控制寄 存器、ADC 开始延迟 寄存器、ADC 数据 转化寄存 器。 所得坐标将存入 ADC数据转化寄存器中。
第 26卷第 3期 2009年 3月
机电 工程
M echan ical& E lectrical Eng inee ring M agazine
V o.l 26 N o. 3 M a r. 2009
L inux输入子系统在触摸屏驱动上的实现
於琪建, 张海峰
(杭州电子科技大学 电子信息学院, 浙江 杭州 310018)
图 4 D river驱动层与 Input核心层关联
Input核心层找出对应的事件处理函数, 由 Event 处理层将数据放到设备缓冲区, 如图 5所示。上层驱 动处理函数将在 应用程序 ( 如 M in iGU I) 调用驱 动的 read函数时, 将设备缓冲区的数据拷贝到用户程序缓
摘 要: 为了简化传统 L inux 驱动程序设计及便于对驱动模块的管理与维护, 采用了基于内核对象的输
入子系统, 完成了 L inux设备驱动框架, 改进了传统基于文件操作接口的驱动程序设计方法, 提出了只