首页 QtEmbedded在嵌入式Linux 系统中的应用

QtEmbedded在嵌入式Linux 系统中的应用

举报
开通vip

QtEmbedded在嵌入式Linux 系统中的应用 Qt/Embedded 在嵌入式 Linux 系统中的应用 随着嵌入式 Linux 应用的不断发展,嵌入式处理器运算能力的不断增强, 越来越多的 嵌入式设备开始采用较为复杂的 GUI 系统,手持设备中的 GUI 系统发展得非常迅速。传统 的 GUI 系统,如 Microwindows 等,由于项目规模较小、功能较为薄弱, 缺乏第三方软件 开发的支持等诸多原因,在比较高级的手持或移动终端设备( 如 PDA、Smart-Phone、车载导 航系统)中应用较少。 Qt/Embedded 是著名的Qt 库开...

QtEmbedded在嵌入式Linux 系统中的应用
Qt/Embedded 在嵌入式 Linux 系统中的应用 随着嵌入式 Linux 应用的不断发展,嵌入式处理器运算能力的不断增强, 越来越多的 嵌入式设备开始采用较为复杂的 GUI 系统,手持设备中的 GUI 系统发展得非常迅速。传统 的 GUI 系统,如 Microwindows 等,由于项目规模较小、功能较为薄弱, 缺乏第三方软件 开发的支持等诸多原因,在比较高级的手持或移动终端设备( 如 PDA、Smart-Phone、车载导 航系统)中应用较少。 Qt/Embedded 是著名的Qt 库开发商 Trolltech 公司开发的面向嵌入式系统的Qt 版本, 开发人员多为 KDE 项目的核心开发人员。许多基于 Qt 的 X Window 程序可以非常方便地 移植到 Qt/Embedded 上,与 X11 版本的 Qt 在最大程度上接口兼容, 延续了在 X 上的强 大功能, 在底层彻底摒弃了 X lib,仅采用 framebuffer 作为底层图形接口。Qt/Embedded 类 库完全采用 C++ 封装。丰富的控件资源和较好的可移植性是 Qt/Embedded 最为优秀的一方 面,使用 X 下的开发工具 Qt Designer 可以直接开发基于 Qt/Embedded 的 UI(用户操作接口) 界面。越来越多的第三方软件公司也开始采用 Qt/Embedded 开发嵌入式 Linux 下的应用软 件。其中非常著名的 Qt Palmtop Environment(Qtopia) 早期是一个第三方的开源项目,并已 经成功应用于多款高档PDA。Trolltech 公司针对Smart-Phone 中的应用需求,于2004 年5 月 底发布了 Qtopia 的 Phone 版本。 1 Qt/Embedded的实现技术基础分析 横向来看,由于发布的版权问题,Qt/Embedded 采用两种方式进行发布:在 GPL 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 下发布的 free 版与专门针对商业应用的 commercial 版本。二者除了发布方式外, 在源码 上没有任何区别。纵向看来, 当前主流的版本为 Qtopia 的 2.x 系列与最新的 3.x 系列。其 中 2.x 版本系列较多地应用于采用 Qtopia 作为高档 PDA 主界面的应用中;3.x 版本系列则 应用于功能相对单一,但需要高级 GUI 图形支持的场合,如 Volvo 公司的远程公交信息系 统。图 1 为 Qt/Embedded 的实现结构。 3.x 版本系列的 Qt/Embedded 相对于 2.x 版本系列增加了许多新的模块, 如 SQL 数据 库查询模块等。几乎所有 2.x 版本中原有的类库,在 3.x 版本中都得到极大程度的增强。这 就极大地缩短了应用软件的开发时间,扩大了 Qt/Embedded 的应用范围。 在代码设计上,Qt/Embedded 巧妙地利用了 C++ 独有的机制,如继承、多态、 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 等, 具体实现非常灵活。但其底层代码由于追求与多种系统、多种硬件的兼容,代码补丁较多, 风格稍显混乱。 1.1 Qt/Embedded 的图形引擎实现基础 Qt/Embedded 的底层图形引擎基于 framebuffer。framebuffer 是在 Linux 内核架构版本 2.2 以后推出的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的显示设备驱动接口。采用 mmap 系统调用,可以将 framebuffer 的显 示缓存映射为可连续访问的一段内存指针。由于目前比较高级的 ARM 体系的嵌入式 CPU 中 大多集成了 LCD 控制模块,LCD 控制模块一般采用双 DMA控制器组成的专用 DMA 通道。 其中一个 DMA 可以自动从一个数据结构队列中取出并装入新的参数, 直到整个队列中的 DMA 操作都已完成为止。另外一个 DMA 与画面缓冲区相关, 这部分由两个 DMA 控制器 交替执行, 并每次都自动按照预定的规则改变参数。虽然使用了双 DMA , 但这两个 DMA 控制器的交替使用对于 CPU 来说是不可见的。CPU 所获得的只是由两个 DMA 组成的一个 “通道” 而已。 framebuffer 驱动程序的实现分为两个方面:一方面是对 LCD 及其相关部件的初始化, 包括画面缓冲区的创建和对 DMA 通道的设置;另外一方面是对画面缓冲区的读写,具体到 代码为 read、write、lseek 等系统调用接口。至于将画面缓冲区的内容输出到 LCD 显示屏 上,则由硬件自动完成。对于软件来说是透明的。当对于 DMA通道和画面缓冲区设置完成 后,DMA 开始正常工作, 并将缓冲区中的内容不断发送到 LCD 上。这个过程是基于 DMA 对于 LCD 的不断刷新的。基于该特性,framebuffer 驱动程序必须将画面缓冲区的存储空间 ( 物理空间) 重新映射到一个不加高速缓存和写缓存的虚拟地址区间中,这样才能够保证应 用程序通过 mmap 将该缓存映射到用户空间后,对于该画面缓存的写操作能够实时的体现 在 LCD 上。 在 Qt/Embedded 中,QScreen 类为抽象出的底层显示设备基类,其中声明了对于显示 设备的基本描述和操作方式,如打开、关闭、获得显示能力、创建 GFX 操作对象等。另外 一个重要的基类是 QGfx 类。该类抽象出对于显示设备的具体操作接口( 图形设备环境) , 如选择画刷、画线、画矩形、alpha 操作等。以上两个基类是 Qt/Embedded 图形引擎的底 层抽象。其中所有具体函数基本都是虚函数,Qt/Embedded 对于具体的显示设备,如 Linux 的 framebuffer、Qt Virtual Framebuffer做的抽象接口类全都由此继承并重载基类中的虚函数 实现。图 2 为 Qt/Embedded 中底层图形引擎实现结构。 在图 2 中,对于基本的 framebuffer 设备,Qt/Embedded 用 QLinuxFbScreen 来处理。 针对具体显示硬件(如 Mach 卡、Voodoo 卡)的加速特性,Qt/Embedded 从 QLinuxFbScreen 和图形设备环境模板类 QGfxRaster继承出相应子类, 并针对相应硬件重载相关 虚函数。 Qt/Embedded 在体系上为 C/S 结构,任何一个 Qt/Embedded 程序都可以作为系统中唯 一的一个 GUI Server 存在。当应用程序首次以系统 GUI Server 的方式加载时,将建立 QWSServer 实 体 。 此 时 调 用 QWSServer::openDisplay() 函 数 创 建 窗 体 , 在 QWSServer::openDisplay()中对 QWSDisplay::Data 中的 init()加以调用;根据 QGfxDriverFactory 实体中的定义(QLinuxFbScreen)设置关键的 QScreen 指针 qt_screen 并调用 connect()打开显 示设备(dev/fb0)。在 QWSServer 中所有对于显示设备的调用都由 qt_screen 发起。至此完成 了 Qt/Embedded 中 QWSServer 的图形发生引擎的创建。当系统中建立好 GUI Server 后,其 它需要运行的 Qt/Embedded 程序在加载后采用共享内存及有名管道的进程通信方式, 以同 步访问模式获得对共享资源 framebuffer 设备的访问权。 1.2 Qt/Embedded 的事件驱动基础 Qt/Embedded 中与用户输入事件相关的信号,是建立在对底层输入设备的接口调用之 上的。Qt/Embedded中的输入设备, 分为鼠标类与键盘类。以 3.x 版本系列为例, 其中鼠 标类设备的抽象基类为 QWSMouseHandler,从该类又重新派生出一些具体的鼠标类设备的 实现类。该版本系列的 Qt/Embedded 中,鼠标类设备的派生结构如图 3 所示。 与图形发生引擎加载方式类似的, 在系统加载构造 QWSServer 时,调用 QWSServer::openMouse 与 QWSServer::openKeyboard 函数。这两个函数分别调用 QMouseDriverFactory::create()与 QKbdDriverFactory::create() 函数。这时会根据 Linux 系统的 环境变量 QWS_MOUSE_PROTO 与 QWS_KEYBOARD 获得鼠标类设备和键盘类设备的设备类 型和设备节点。打开相应设备并返回相应设备的基类句柄指针给系统, 系统通过将该基类 指针强制转换为对应的具体子类设备指针,获得对具体鼠标类设备和键盘类设备的调用操 作。 值得注意的是,虽然几乎鼠标类设备在功能上基本一致,但由于触摸屏和鼠标底层接口 并不一样,会造成对上层接口的不一致。举例来讲,从鼠标驱动接口中几乎不会得到绝对位 置信息,一般只会读到相对移动量。另外,鼠标的移动速度也需要考虑在内,而触摸屏接口 则几乎是清一色的绝对位置信息和压力信息。针对此类差别,Qt/Embedded 将同一类设备 的接口部分也给予区别和抽象,具体实现在 QMouseDriverInterface 类中。键盘类设备也存 在类似问题,同样引入了 QKbdDriver Inteface 来解决。具体实现此处暂不赘述。 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 系统实现 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 采用了 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 继承,并获得校正功能。其具体的实现接口如表 1 所列。 Qt/Embedded 2.x中对于键盘响应的实现函数位于 src/kernel/qkeyboard_qws.cpp 中。在 qkeyboard_qws.h中,定义了键盘类设备接口的基类 QWSKeyboardHandler,移植时需要根据 键盘驱动程序从该类派生出实现类,实现键盘事件处理函数 processKeyEvent(),并在 QWSServer::newKeyboardHandler 函数中注册自己的键盘类设备即可。其中对于点击键的键 码定义在 Qt/Embedded 的命名空间—— src/kernel/qnamespace.h中。表 2是具体的实现接 口。(以 USB 接口的 101 键键盘为例) 2.2 在MC9328 平台上移植和应用 在某车载导航辅助系统的开发平台设计中,采用了 Qt/Embedded 3.3.2 版本作为其 GUI 系统的实现方案。硬件平台采用自行设计的以Motorola MC9328 MX1 为核心的开发系统。 该系统采用 CPU 内部 LCD 控制器和 240×320 分辨率的 16bpp TFT LCD 作为显示设备,采 用 I2C总线扩展出 16 按键以及MX1 集成的 ASP模块和电阻触摸屏。操作系统为 ARM Linux 2.4.18。 Qt/Embedded 3.x 版本系列中与底层硬件接口相关部分的源码位于 src/embedded/ 目 录中。该部分包含三类设备的接口:framebuffer、鼠标与键盘。参照该目录中相关设备的具 体接口代码, 根据自身硬件平台增添接口即可。 由于系统 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 触摸屏类接 口如表 3 所列。 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 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 随着嵌入式处理器运算能力的不断提高, 对外设支持的不断丰富,嵌入式 Linux 系统 的应用也逐渐增多。Qt/Embedded 延续了 Qt 在桌面系统的所有功能,丰富的 API接口和基 于组件的编程模型使得嵌入式 Linux 系统中的应用程序开发更加便捷。由于 Qt/Embedded 本身面向高端的手持设备和移动设备, 将成为未来嵌入式系统的主流 GUI。
本文档为【QtEmbedded在嵌入式Linux 系统中的应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_513994
暂无简介~
格式:pdf
大小:146KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2012-06-22
浏览量:10