| 网站首页 | 科技前沿 | it产品项目 | 软件项目 | 硬件项目 | 发明专利 | 商业城 | 资源中心 | 博客 | 论坛 |  子站: it客栈 多奥网
会员中心
会员注册
繁體中文
推荐:索引 linux arm 手机 嵌入式 os wince dsp 音乐 游戏
 站内搜索:
项目资讯 资源中心
您现在的位置: 爱问科技网 >> 软件项目 >> linux >> 文章正文
[组图]Qt/Embedded在嵌入式Linux系统中的应用 (2)       ★★★★
Qt/Embedded在嵌入式Linux系统中的应用 (2)
作者:佚名 文章来源:本站原创 更新时间:2006-11-16 20:11:38

2 Qt/Embedded的移植与应用

针对Qt/Embedded的实现特点,移植该嵌入式GUI系统一般分为以下几个步骤:

①设计硬件开发平台,并移植Linux操作系统;

②采用静态链接进Linux内核的方式,根据该平台显示设备的显示能力,开发framebuffer驱动程序;

③开发针对该平台的鼠标类设备驱动程序,一般为触摸屏或USB鼠标;

④开发针对该平台的键盘类设备驱动程序,一般为板载按钮或USB键盘(该部分可选);

⑤根据framebuffer驱动程序接口,选择并修改Qt/Embedded中的QlinuxFbScreen和QgfxRaster类;

⑥根据鼠标类设备驱动程序,实现该类设备在Qt/Embedded中的操作接口;

⑦根据键盘类设备驱动程序,实现该类设备在Qt/Embedded中的操作接口(该部分可选);

⑧根据需要选择Qt/Embedded的配置选项,交叉编译Qt/Embedded的动态库;

⑨交叉编译Qt/Embedded中的Example测试程序,在目标平台上运行测试。

Framebuffer设备驱动程序提供出的接口是标准的,除了注意endian问题外,配置Qt/Embedded时选择相应的色彩深度支持即可,因此该部分的移植难点就在于framebuffer驱动程序的实现。Qt/Embedded部分的QWSServer打开/dev/中的framebuffer设备后读出相应的显示能力(屏幕尺寸、显示色彩深度),模板QgfxRaster将根据色彩深度在用户空间设备创建出与显示缓存同样大小的缓冲作为双缓冲,并采用正确方式进行显示。


2.1 在PXA255平台上移植和应用

在笔者参与设计的某Smart-Phone开发平台中,GUI系统实现方案采用了Qt/Embedded 2.3.7和Qtopia 1.7.0(基于Qt/Embedded 2.x系列的手持套件),硬件平台采用了基于Intel XScale PXA255处理器的嵌入式开发系统。该开发系统采用640×480分辨率的TFT LCD和PXA255内部LCD控制模块作为显示设备,ADS7846N作为外部电阻式触摸屏控制器;另外,采用了五方向按键作为板载键盘。由于该系统采用了ISP1161作为USB Host控制器,较好地支持了USB接口的键盘和鼠标,操作系统为ARM Linux 2.4.19。参考Linux 2.4.19内核目录drivers/input部分,可以按照标准内核中input device接口设计实现触摸屏和键盘,在实现了基于ISP1161的EHCI驱动程序后,移植标准的USB接口的人机界面设备驱动HID和USB键盘、鼠标的驱动程序后,可以获得对于该类设备的调用接口。此过程不属本文讨论范畴,此处暂不多述。

Qt/Embedded 2.x系列对于输入设备的底层接口与3.x系列不同,触摸屏设备和键盘设备需要根据具体的驱动程序接口在Qt/Embedded中设备实现对应的设备操作类。其中对应于鼠标类设备的实现位于src/kernel/qmouse_qws.cpp中。由于触摸屏在实现原理上存在着A/D量化误差的问题,因此所有的触摸屏接口实现类需要从特殊的QcalibratedMouseHandler继承,并获得校正功能。

Qt/Embedded 2.x中对于键盘响应的实现函数位于src/kernel/qkeyboard_qws.cpp中。在qkeyboard_qws.h中,定义了键盘类设备接口的基类QWSKeyboardHandler,移植时需要根据键盘驱动程序从该类派生出实现类,实现键盘事件处理函数processKeyEvent(),并在QWSServer::newKeyboardHandler函数中注册自己的键盘类设备即可。其中对于点击键的键码定义在Qt/Embedded的命名空间——src/kernel/qnamespace.h中。

图4为笔者在该Smart-Phone开发平台上移植Qt/Embedded 2.3.7和Qtopia 1.7.0后显示的截图。

2.2 在MC9328平台上移植和应用

在某车载导航辅助系统的开发平台设计中,采用了Qt/Embedded 3.3.2版本作为其GUI系统的实现方案。硬件平台采用自行设计的以Motorola MC9328 MX1为核心的开发系统。该系统采用CPU内部LCD控制器和240×320分辨率的16 bpp TFT LCD作为显示设备,采用I2C总线扩展出16按键以及MX1集成的ASP模块和电阻触摸屏。操作系统为ARM Linux 2.4.18。

Qt/Embedded 3.x版本系统中与底层硬件接口相关部分的源码位于src/embedded/目标中。该部分包含三类设备的接口:framebufer、鼠标与键盘。参照该目标中相关设备的具体接口代码,根据自身硬件台增添接口即可。

由于系统LCD的岔道率为240×320,物理尺寸较小,在实现其于该系统的framebuffer驱动程序时并没有将其本身与Linux字符控制台设备挂靠,因此framebuffer并不具备TEXT模式的工作方式。在移植Qt/Embedded时,无需作framebuffer设备的工作方式转换。正确配置色彩显示支持后,Qt/Embedded能够在LCD显示出正确的图形。由于该平台的显示系统为纵向320行,在设计时考虑到人对于非手持设备的视觉习惯为宽度大于高度的观察方式,为了符合这种习惯性的观察方式,在移植Qt/Embedded时采用了Transformed的旋转图形显示方式在软件上实现了显示方向的转换变化。

鼠标设备接口这一基类QWSMouseHandler的实现位于src/embedded/qmouse_qws.cpp中。与2.x版本系列不同的是,3.x中所有的Linux触摸屏示例接口代码均实现在src/embedded/qmouselinuxtp_qws.cpp中的QWSLinuxTPMouseHandler类中。其中对于不同型号的触摸屏的接口实现代码,采用不同的宏定义和预编译的方式将它们分隔开。笔者还通过从QWSLinuxTPMouseHandler中继承自身触摸屏接口类,替代原有的QWSLinuxTPMouseHandlerPrivate类,而在QWSLinuxTPMouseHandler生成自身触摸屏接口对象的方式,较好地将移植部分的代码与原有比较混乱的代码分隔开来。


3.x中键盘接口基类们于src/embedded/qkbd_qws.cpp中,为QWSKeyboardHandler。实现I2C总线扩展出的16键键盘接口类方式与触摸屏类似,此处不多述。需要注意的是,Qt/Embedded提供了事件过滤器(key event filter)的接口,在键盘点击事件从QWSServer截获并发送到相应的client之前会经过函数QWSServer::KeyboardFilter。在此函数中可以按照自身需求生成新的键盘点击事件,而后利用QWSServer::sendKeyEvent()发送新的点击事件到client中。利用该方式可以将各种键盘点击无法输入的unicode字符转换出来,从而可以在较少的按键键盘上实现多unicode字符输入法。Qt/Embedded 3.x键盘接口的移植与鼠标设备接口类似,此处不多述。

3 总结

随着嵌入式处理器运算能力的不断提高,对外设支持的不断丰富,嵌入式Linux系统的应用也逐渐增多。Qt/Embedded延续了Qt在桌面系统的所有功能,丰富的API接口和基于组件的编程模型使得嵌入式Linux系统中的应用程序开发更加便捷。由于Qt/Embedded本身面向高端的手持设备和移动设备,将成为未来嵌入式系统的主要GUI。

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    相关文章
    WINCE的内存配置
    Linux下C语言编程基础知…
    Linux 下串口编程入门
    安装cygwin 注意事项(建…
    推荐:手机Linux系统还需…
    解析Linux内核获取当前进…
    嵌入式Linux在工业控制领…
    Eclipse启动参数大全
    Qt/Embedded在嵌入式Lin…
    智能手机开发:嵌入式Li…
    更多内容
    专题栏目
    更多内容
    最新推荐 更多内容
    | 设为首页 | 加入收藏 | 关于我们 | 版权申明 | 友情链接 | 谷歌 雅虎 百度 | 管理登录 | 

    爱问科技网
    爱问科技网

    21aw@21aw.com
    粤icp备06099319