实现针对触摸屏的输入引擎移植解析方案

发布者:jingyun最新更新时间:2012-05-19 来源: 21ic 关键字:触摸屏  输入引擎  移植解析 手机看文章 扫描二维码
随时随地手机看文章

1.引言

嵌入式GUI指在嵌入式系统中为特定的硬件设备或者环境而设计的图形用户界面系统。它极大地方便了非专业用户的使用,人们不再需要死记硬背大量的命令,而可以通过窗口、菜单方便地操作。在实际应用中,嵌入式GUI应满足轻型、占用资源少、高性能、高可靠性、可配置等基本要求。

Linux作为一种可裁减的操作系统,兼容多种主流CPU且支持所有的文件系统和网络服务,并具备源代码公开、易于定制、稳定、功能强大和易开发等优点,是发展未来嵌入式设备的绝佳资源。

2.Linux在嵌入式系统上的实现

2.1系统引导

系统上电或者复位后,将对系统硬件设备进行自检,无错误则将硬盘0磁道的第一个扇区,即MBR中的BootLoader调至内存0x07C00处,并将控制权交给BootLoader[1]。BootLoader通常是一段汇编代码,存放在MBR中,作用是将系统启动代码读到内存中。目前可选用的引导工具主要有GRUB和LILO,这里我们选用主流的GRUB,由于选用的存储介质是CF卡,格式化CF卡后建立GRUB安装目录,按照提示安装GRUB后,在 /etc目录下新建grub.conf文件,内容如下:

default=0

timeout=5

title Linux-2.4.34

root (hd0,0)

kernel /boot/vmlinuz-2.4.34 ro root=/dev/hdc1

其中root (hd0,0)指定了/boot所在的分区,kernel一行用来指定Linux的内核,及/所在的分区。

2.2内核配置、编译及裁减

内核是Linux操作系统的核心,它负责管理系统进程和进程调度等大小事务,决定着系统的性能和稳定性,其它应用程序都必须通过它才可以使用系统资源,获取系统服务。由于嵌入式硬件资源的限制,我们需要对Linux内核进行定制,精简出符合实际需要的最小内核文件。

首先在www.kernel.org上获取相应的内核包,解压后进行配置,然后根据目标板的硬件特点和实际需求配置内核的编译选项。这里我们选用基于X86 架构的PC104主板,为了减低不必要的复杂性,内核中取消kernel module支持,将有关CPU类型、内存管理、doc驱动、ext2文件系统支持、串口支持等常用功能编译进内核,SCSI、Floppy之类的外设在我们的嵌入式系统中没有使用,编译时可去掉。这样实际编译出的内核只有 747.6KB。基本步骤如下[2]:

#cd /usr/src/linux //内核包所在目录,这里下载的内核包版本是2.4.34

#make mrproper //确保源代码目录下没有不正确的.o文件以及文件的相互倚赖关系

#make menuconfig //图形界面下编译选项配置

#make dep //确保关键文件在正确位置

#make clean //确保所有有关文件都处于最新版本状态

#make bzImage //编译内核

#cp /usr/src/linux/arch/i386/bzImage /mnt/cf/boot //将内核文件拷贝至boot

2.3根文件系统实现

Linux 的根文件系统以树的结构方式组织,主要由配置文件、设备文件、Linux基本命令、基本C语言库组成。后两者是主要的,也是占空间最大的,用 Busybox和uClibc的组合够建这两部分内容,可以大大节省空间。根据根文件系统的基本结构,我们建立各个对应的目录:

#mkdir proc dev bin boot boot/grub etc src lib //由于是单用户系统,删除了root、home、sbin目录

#cp –r /dev/null /dev/mem … /mnt/cf/dev //拷贝所需设备文件

最后需要在etc目录下建立几个配置文件,分别是/etc/inittab、/etc/init.d/rcS、/etc/fstab,限于篇幅,仅介绍inittab文件,内容如下[4]:

:: sysinit: /etc/init.s/rcS //指定初始化文件

:: askfirst: /bin/sh //启动时执行的shell

:: respawn: /bin/getty 38400 ttyS0 //打开一个串口,波特率为38400

:: restart: /bin/init //重启时执行进程init

:: ctrlaltdel: /bin/reboot //捕捉特定按键动作

:: shutdown: /bin/umount –a –r //关机时动作,卸载所有文件系统[page]

3.嵌入式GUI研究

3.1基于嵌入式Linux的GUI系统底层实现基础

一个能够兼容多硬件平台的嵌入式GUI系统,应至少抽象出两类设备:基于图形显示设备(如VGA卡)的图形抽象层 GAL(Graphic Abstract Layer)和基于输入设备(如键盘,触摸屏等)的输入抽象层 IAL(Input Abstract Layer)[3]。抽象层的概念类似Linux内核虚拟文件系统的概念,它定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的图形操作和输入处理都建立在抽象接口上,而用于实现该抽象接口的底层代码称为“图形引擎”或“输入引擎”,类似操作系统中的驱动程序,这实际是一种面向对象的程序结构。利用该抽象接口,嵌入式GUI可以非常方便的移植到其他POSIX系统上,只需要根据抽象层接口实现新的引擎即可。

3.2嵌入式GUI基本性能需求

嵌入式GUI应在基于操作系统的基础上,为用户提供丰富的图形编程接口,使其能够方便快速的编制界面友好的应用程序。

GUI模块的性能指标为单位时间实例化个数,如下所列:

基本图形绘制速度,即点、线、框、块、圆、弧、椭圆等图形单元绘制速度。在显示设备可见范围内任意位置产生随机大小的基本图形。量化指标为单位时间内绘制的个数,并以较长测试时间中取得的单位时间平均值为准。

窗口创建速度。在显示设备可见范围内任意位置创建随机大小的窗口。量化指标为单位时间内成功创建及绘制完毕的窗口个数,并以较长测试时间中取单位时间平均值为准。

控件创建速度。在显示设备可见范围内任意位置创建随机大小、包含随机内容的窗口。量化指标为单位时间内成功创建及绘制完毕的控件个数,并以较长测试时间中取单位时间平均值为准。

事件驱动机制反应速度。针对窗口及不同控件的典型事件及耗时事件,测试其完成时间。窗口及控件的大小、复杂程度随机产生。量化指标为单位时间内成功处理完毕的事件数,并以较长测试时间中取单位时间平均值为准。

3.3输入引擎移植

在基于Linux的嵌入式系统中,输入设备可能只有触摸屏和为数不多的按键,相对图形引擎来说,输入设备的处理没有统一接口,在此情况下,提供一个抽象的输入层,显得尤为重要。

这里我们参考MiniGUI,并结合实际工程机械控制系统来实现输入引擎的移植工作。MiniGUI简单可分为三层,最顶层为API,即编程接口;中间层是 MiniGUI的核心层,其中包括了窗口系统必不可少的各个模块,如消息事件处理模块、图形设备接口等;而最底层则是GAL和IAL。

该实际工程机械控制系统拟采用触摸屏作为主要的输入设备,需要编写自己的输入引擎。首先定义一个结构体用来从触摸屏设备(/dev/ts)中接受数据,结构体定义如下:

typedef struct

{

unsigned short b; //触摸屏状态(是否被点击)

unsigned short x; //触摸屏x坐标

unsigned short y; //触摸屏y坐标

unsigned short pad; //32位填充域,无实际意义

} POS;

接下来定义输入引擎的初始化函数,该函数打开触摸屏设备文件:/dev/ts,类似PC上的/dev/psaux设备。在成功打开设备文件后,该函数通过 mouse_getxy和mouse_getbutton等函数将获得的状态信息通过INPUT结构体传递给GUI应用程序。

BOOl InitPADInput (INPUT*input,const char*mdev,const char*mtype)

{

ts = open(“/dev/ts”, O_RDONLY);

if (ts<0) {

fprintf (stderr, “PAD:Can not open touch screen! ”);

return FALSE;

}

……

input->get_mouse_xy=mouse_getxy;

input->get_mouse_button=mouse_getbutton;

……

}

static void mouse_getxy(int* x, int* y)

{

*x=mousex;

*y=mousey;

}

static int mouse_getbutton(void)

{

return pos.b;

}

[page]

最后通过wait_event函数调用select系统调用,当select系统调用返回值大于0时,该函数检查是否有可读的数据等待读取,如果是,则从该文件描述符中读取触摸屏数据。

限于篇幅原因,这里只列出了其中输入引擎的移植代码中较为关键的部分。代码编写完成后,还需要在“/src/ial/ial.c”中添加自定义的输入引擎的入口项。

static INPUT inputs [] =

{ ……

#ifdef _PC104_IAL

{"pc104", InitYKInput, TermYKInput},

#endif

……

}

4.结束语

本文具体介绍了Linux作为嵌入式操作系统的实现方法,结合嵌入式GUI技术,在PC104主板上利用Linux创建了一个拥有用户界面的微型操作系统,并通过对抽象层接口及相关技术的分析,自定义输入引擎,实现了设备的可定制,在实际工程机械项目中有较大的实用价值和市场前景。

创新点:利用Linux在嵌入式主板上搭建了一个微型操作系统,在此基础上实现了针对触摸屏的输入引擎的移植。

关键字:触摸屏  输入引擎  移植解析 引用地址:实现针对触摸屏的输入引擎移植解析方案

上一篇:电流互感器用于检测智能电表中的交流电流解析方案
下一篇:判断遥控接收器工作是否正常的方法解析方案

推荐阅读最新更新时间:2024-05-02 22:04

浅析触摸屏显示技术原理及其应用前景
    如今,在各种手持消费电子设备、医疗应用设备、自动售货机/售票机/ATM机、销售终端(POS),工业和过程控制设备中都可以看到触摸显示屏。触摸屏显示器正逐渐进入办公自动化,汽车和船舶仪表,家电和游戏机应用领域。     影响选择触摸屏技术的各种因素     可以用各种方式实现触摸屏。除了成本之外,技术方面的选择取决于以下几个因素:     性能 :性能包括诸如速度、灵敏度、精确度、分辨率、拖动、Z轴、双/多触摸方式,视差角度和校准的稳定性。     输入灵活性: 输入灵活性参数影响着人机交互的方式,诸如手套、手套材料、指甲、触笔,手写识别和获取签名。     环境: 环境因素为温度、湿度、耐化学性、耐划伤
[嵌入式]
Touch Panel Systems扩充产品群,满足触摸屏液晶显示器需求扩大
    带触摸面板的21.5英寸液晶显示器“2201L”(右下方为新产品)(点击放大) 带触摸面板的55英寸数字标牌用大型液晶显示器(点击放大)   日本Touch Panel Systems投产了5款带触摸面板的15~21.5英寸液晶显示器新产品,以及带触摸面板的55英寸数字标牌用大尺寸液晶显示器。   Touch Panel Systems对5款带触摸面板的15~21.5英寸液晶显示器新产品的定位是,通过提供多种画面尺寸和触摸面板方式选项,广泛满足使用POS系统及Kiosk终端的店铺及流通领域和待客服务领域的需求。此次投产了画面尺寸为15英寸的“1515L”、17英寸的“1715L”、15.6英寸宽屏的“1519L”、18
[手机便携]
基于嵌入式技术的智能仪器触摸屏接口设计
0 引言 在现代化生产中,为了确保机械设备安全可靠地运行,通常要采用适宜的仪器仪表,利用故障诊断技术及时发现故障,并采取合理的维修或保护措施来排除故障,预防和避免事故的发生。基于对仪器尺寸、便携性和操作方便性的考虑,在工业领域如煤炭、钢铁、冶金、电力、化工等行业中大量的仪器仪表和设备,都逐渐选用触摸屏作为系统的输入设备。 针对这一情况,作者在开发面向机械故障诊断的智能仪表过程中,对触摸屏输入接口进行了研究。设计了四线电阻式触摸屏与PXA255 处理器的接口电路,分析了Linux框架下的字符设备驱动程序设计原理,完成了触摸屏的接口驱动程序开发,并设计了用触摸屏作为输入设备的MiniGUI用户程序。触摸屏作为仪器的输入设备,人机交
[单片机]
基于嵌入式技术的智能仪器<font color='red'>触摸屏</font>接口设计
吉时利触摸屏可提供更大电流源和更宽测量范围
先进电气测试仪器与系统的世界级领导者吉时利仪器宣布,推出其最新的支持电容触摸屏图形用户界面 (GUI) 的台式源测量单元 (SMU) 仪器---2460。该仪器向用户提供基础测量精度为0.012%,分辨率为6位半的更高功率源(可达105V电压、7A DC/7A脉冲电流、最大100W功率),使其成为用于现代材料及高功率器件的高功率、高精度I-V特性分析的理想选择。在 “Touch, Test, Invent”(触摸、测试、创新)设计理念的基础上,2460型仪器可提供更直观的用户界面,并可最大限度缩短学习时间,以帮助工程师和科学家工作更智能、发明更容易。 2460型仪器的特性使它适用于广泛的应用: 其灵活的四象限电压和电流源/负载与精密
[测试测量]
S3C2440触摸屏驱动代码分析
实验环境: 主机:Fedora14 开发板:Tq2440 移植linux内核版本:linux-2.6.30.4 最近学习了一下S3C2440的触摸屏驱动代码,也算是对前期一段时间的复习,让自己回忆起一些关于驱动的知识,关于S3C2440的触摸屏驱动代码主要是基于输入子系统的实现,在转载的文章 嵌入式Linux之我行 S3C2440上触摸屏驱动实例开发讲解 一文中详细的介绍了基本的实现。具体的实现我就在介绍,这篇文章已经写得非常的详细。我主要是采用流程图的方式简要的介绍了一下驱动代码的实现过程。 驱动的初始化过程: 驱动的实现过程: 以上的流程图就大致实现了触摸屏的驱动。
[单片机]
S3C2440<font color='red'>触摸屏</font>驱动代码分析
PLC控制系统核心 触摸屏在工控自动化系统中的应用
引言 用 PLC 做控制系统核心,成本低、稳定性高,程序编写和调试也比较方便。但PLC在人机对话、故障判断、在线修改等方面有些不便,需要对编程非常熟悉的专业人员进行操作。并且,想要直观地了解生产过程和监控信号的动态变化必须选择一个上位机来配合 PLC ,才能组成较好的自动控制系统。因此,本系统采用 触摸屏 与PLC通信,共同组成生产过程的 工控 自动化系统。 1 系统组成 系统主要由 触摸屏 、可编程控制器PLC、开关电源、步进电机驱动器、步进电机、变频器、三相异步电动机等构成,其配置如图1所示。控制系统主要利用程序控制钢领板运行的速度、方向、位移,达到控制成形。 图1 系统配置框图 触摸屏作为人机界面可以进行工艺参数的
[电源管理]
PLC控制系统核心 <font color='red'>触摸屏</font>在工控自动化系统中的应用
国产嵌入式操作系统下触摸屏的实现
国产龙芯1A手持式计算机和ReWorks嵌入式操作系统,通过移植触摸中间件tslib为上层应用提供了统一的接口,实现了触摸屏的校准和测试。    1 、综述   龙芯系列处理器是中国自主研发的通用CPU,其中龙芯1系列处理器面向工业控制、消费电子(手机/MP4/掌上电脑等)等嵌入式应用。龙芯1A芯片片内集成了32位处理器核、2D GPU、VGA和LCD显示接口、以及南桥芯片组功能,可满足超低价位云终端、工业控制/数据采集、网络设备、消费类电子等领域需求。   ReWorks嵌入式操作系统是中国电子科技集团某所基于“九五”、“十五”的技术成果自行研制、拥有全部源代码的嵌入式实时操作系统,适用于多种目标硬件环境(x86、mips
[模拟电子]
国产嵌入式操作系统下<font color='red'>触摸屏</font>的实现
WEINVIEW触摸屏在混合动力客车上的应用
   摘 要: 本文主要介绍WEINVIEW触摸屏在混合动力客车控制系统中的应用。在这个控制系统,触摸屏和微控制器通信并完成相关的数据采集。触摸屏能够监测到燃料电池系统的工作情况,并将电池系统的主要参数:系统电流、系统电压、电池容量、电池温度、系统报警参数进行反馈。这个控制系统能够帮助驾驶者达到混合动力电动汽车(HEV)的最高燃油效率。 一:引言   受金融危机冲击,欧美日等汽车业巨头遭受重创。为获重生,汽车企业一方面通过裁员减产、出售资产等断臂求存,一方面都不遗余力的发展新能源汽车以挽颓势,受制于石油资源储量和环保压力,近年各国都在大力发展新能源汽车。新能源汽车的发展被各国提到前所未有的高度。   相对于传统汽车,我国
[汽车电子]
WEINVIEW<font color='red'>触摸屏</font>在混合动力客车上的应用
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved