QtEmbedded在嵌入式Linux系统中的应用.pdf
《QtEmbedded在嵌入式Linux系统中的应用.pdf》由会员分享,可在线阅读,更多相关《QtEmbedded在嵌入式Linux系统中的应用.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、142 0 0 4.1 2专题论述 TOPICAL DISCUSS单片机与嵌入式系统应用Q t/E m b e d d e d 在嵌入式L i n u x 系统中的应用 北京航空航天大学 徐广毅 张晓林 崔迎炜 蒋文军摘 要关键词分析和讨论 Q t/E m b e d d e d的主流版本3.x系列的底层实现技术;结合2.x版本系列和 3.x版本系列,在两种不同的硬件平台(I n t e l P X A 2 5 5 开发系统与笔者自行设计的 M o t o r o l a M C 9 3 2 8 M X 1开发系统)上的移植过程,讨论Q t/E m b e d d e d的底层设备接口与应用移
2、植技术。Q t/E m b e d d e d 嵌入式L i n u x f r a m e b u f f e r 驱动接口引 言随着嵌入式L i n u x应用的不断发展,嵌入式处理器运算能力的不断增强,越来越多的嵌入式设备开始采用较为复杂的G U I系统,手持设备中的G U I系统发展得非常迅速。传统的 G U I 系统,如M i c r o w i n d o w s 等,由于项目规模较小、功能较为薄弱,缺乏第三方软件开发的支持等诸多原因,在比较高级的手持或移动终端设备(如P D A、S m a r t-P h o n e、车载导航系统)中应用较少。Q t/E m b e d d e
3、d 是著名的Q t 库开发商 T r o l l t e c h 公司开发的面向嵌入式系统的 Q t版本,开发人员多为 K D E项目的核心开发人员。许多基于 Q t的X W i n d o w程序可以非常方便地移植到Q t/E m b e d d e d上,与X 1 1版本的Q t 在最大程度上接口兼容,延续了在 X上的强大功能,在底层彻底摒弃了 X l i b,仅采用f r a m e b u f f e r 作为底层图形接口。Q t/E m b e d d e d 类库完全采用 C+封装。丰富的控件资源和较好的可移植性是Q t/E m b e d d e d最为优秀的一方面,使用X 下的
4、开发工具 Q t D e s i g n e r 可以直接开发基于Q t/E m b e d d e d 的U I(用户操作接口)界面。越来越多的第三方软件公司也开始采用 Q t/E m b e d d e d 开发嵌入式L i n u x 下的应用软件。其中非常著名的 Q t P a l m t o p E n v i r o n m e n t(Q t o p i a)早期是一个第三方的开源项目,并已经成功应用于多款高档 P D A。T r o l l t e c h 公司针对S m a r t-P h o n e 中的应用需求,于2 0 0 4 年5 月底发布了Q t o p i a 的
5、P h o n e 版本。1 Q t/E m b e d d e d 的实现技术基础分析横向来看,由于发布的版权问题,Q t/E m b e d d e d 采用两种方式进行发布:在G P L协议下发布的 f r e e版与专门针对商业应用的 c o m m e r c i a l 版本。二者除了发布方式外,在源码上没有任何区别。纵向看来,当前主流的版本为 Q t o p i a 的2.x 系列与最新的3.x 系列。其中2.x 版本系列较多地应用于采用 Q t o p i a 作为高档 P D A 主界面的应用中;3.x版本系列则应用于功能相对单一,但需要高级G U I图形支持 的 场 合,如
6、 V o l v o公司的远程公交 信 息 系统。图 1为Q t/E m b e d-d e d的实现结构。3.x 版本系列的Q t/E m b e d d e d 相对于2.x 版本系列增加了许多新的模块,如 S Q L数据库查询模块等。几乎所有2.x 版本中原有的类库,在3.x 版本中都得到极大程度的增强。这就极大地缩短了应用软件的开发时间,扩大了Q t/E m b e d d e d 的应用范围。在代码设计上,Q t/E m b e d d e d 巧妙地利用了 C+独有的机制,如继承、多态、模板等,具体实现非常灵活。但其底层代码由于追求与多种系统、多种硬件的兼容,代码补丁较多,风格稍显
7、混乱。1.1 Q t/E m b e d d e d 的图形引擎实现基础Q t/E m b e d d e d 的底层图形引擎基于f r a m e b u f f e r。f r a m e b u f f e r 是在L i n u x 内核架构版本2.2 以后推出的标准的显示设备驱动接口。采用 mmap系统调用,可以将f r a m e b u f f e r 的显示缓存映射为可连续访问的一段内存指针。由于目前比较高级的 A R M体系的嵌入式 C P U中大多集成了L C D控制模块,L C D控制模块一般采用双 D M A控制器组成的专用 D M A通道。其中一个 D M A可以自动
8、从一个数据结构队列中取出并装入新的参数,直到整个队列中的 D M A操作都已完成为止。另外一个 D M A与画QWSServer 图形事件服务framebufferLinux 操作系统Qt/Embedded 应用程序Qt/Embedded输入设备驱动底层硬件平台图1 Q t/E m b e d d e d 的实现结构15Microcontrollers&Embedded Systems2 0 0 4.1 2专题论述 TOPICAL DISCUSS面缓冲区相关,这部分由两个 D M A控制器交替执行,并每次都自动按照预定的规则改变参数。虽然使用了双D M A,但这两个 D M A控制器的交替使用
9、对于 C P U来说是不可见的。CPU所获得的只是由两个 DMA组成的一个“通道”而已。f r a m e b u f f e r 驱动程序的实现分为两个方面:一方面是对 L C D及其相关部件的初始化,包括画面缓冲区的创建和对 DMA通道的设置;另外一方面是对画面缓冲区的读写,具体到代码为r e a d、w r i t e、l s e e k 等系统调用接口。至于将画面缓冲区的内容输出到 L C D显示屏上,则由硬件自动完成。对于软件来说是透明的。当对于 D M A通道和画面缓冲区设置完成后,D M A开始正常工作,并将缓冲区中的内容不断发送到 L C D上。这个过程是基于D M A 对于
10、L C D的不断刷新的。基于该特性,f r a m e b u f f e r驱动程序必须将画面缓冲区的存储空间(物理空间)重新映射到一个不加高速缓存和写缓存的虚拟地址区间中,这样才能够保证应用程序通过 m m a p将该缓存映射到用户空间后,对于该画面缓存的写操作能够实时的体现在L C D上。在Q t/E m b e d d e d 中,Q S c r e e n 类为抽象出的底层显示设备基类,其中声明了对于显示设备的基本描述和操作方式,如打开、关闭、获得显示能力、创建G F X操作对象等。另外一个重要的基类是 Q G f x类。该类抽象出对于显示设备的具体操作接口(图形设备环境),如选择画
11、刷、画线、画矩形、a l p h a 操作等。以上两个基类是 Q t/E m b e d d e d图形引擎的底层抽象。其中所有具体函数基本都是虚函数,Q t/E m b e d d e d对于具体的显示设备,如L i n u x 的f r a m e b u f f e r、Q t V i r t u a l F r a m e b u f f e r 做的抽象接口类全都由此继承并重载基类中的虚函数实现。图2为Q t/E m b e d d e d中底层图形引擎实现结构。在图 2 中,对于基本的f r a m e b u f f e r 设备,Q t/E m b e d d e d用Q L
12、i n u x F b S c r e e n 来处理。针对具体显示硬件(如M a c h 卡、V o o d o o 卡)的加速特性,Q t/E m b e d d e d 从Q L i n u x F b S c r e e n 和图形设备环境模板类Q G f x R a s t e r 继承出相应子类,并针对相应硬件重载相关虚函数。Q t/E m b e d d e d 在体系上为C/S结构,任何一个Q t/E m b e d d e d 程序都可以作为系统中唯一的一个 G U I S e r v e r存在。当应用程序首次以系统 G U I S e r v e r 的方式加载时,将建立
13、 Q W S S e r v e r实体。此时调用 Q W S S e r v e r:o p e n D i s p l a y()函数创建窗体,在Q W S S e r v e r:o p e n D i s p l a y()中对Q W S D i s p l a y:D a t a中的i n i t()加以调用;根据Q G f x D r i v e r F a c t o r y 实体中的定义(Q L i n u x F b S c r e e n)设置关键的Q S c r e e n 指针q t _ s c r e e n 并调用c o n n e c t()打开显示设备(d e
14、v/f b 0)。在Q W S S e r v e r 中所有对于显示设备的调用都由q t _ s c r e e n发起。至此完成了Q t/E m b e d d e d中Q W S S e r v e r的图形发生引擎的创建。当系统中建立好G U I S e r v e r 后,其它需要运行的 Q t/E m b e d d e d 程序在加载后采用共享内存及有名管道的进程通信方式,以同步访问模式获得对共享资源 f r a m e b u f f e r 设备的访问权。1.2 Q t/E m b e d d e d 的事件驱动基础Q t/E m b e d d e d中与用户输入事件相关的
15、信号,是建立在对底层输入设备的接口调用之上的。Q t/E m b e d d e d中的输入设备,分为鼠标类与键盘类。以 3.x版本系列为例,其中鼠标类设备的抽象基类为 QWSMouseH a n d l e r,从该类又重新派生出一些具体的鼠标类设备的实现类。该版本系列的 Q t/E m b e d d e d 中,鼠标类设备的派生结构如图 3所示。与图形发生引擎加载方式类似的,在系统加载构造Q W S S e r v e r时,调用Q W S S e r v e r:o p e n M o u s e与Q W S S e r v e r:o p e n K e y b o a r d函数。
16、这两个函数分别调用Q M o u s e D r i v e r F a c t o r y:c r e a t e()与Q K b d D r i v e r F a c t o r y:c r e a t e()函数。这时会根据 Linux 系统的环境变量Q W S _ M O U S E _ PROTO与Q W S _ K E Y B O A R D获得鼠标类设备和键盘类设备的设备类型和设备节点。打开相应设备并返回相应设备的基类句柄指针给系统,系统通过将该基类指针强制转换为对应的具体子类设备指针,获得对具体鼠标类设备和键盘类设备的调用操作。值得注意的是,虽然几乎鼠标类设备在功能上基本一致
17、,但由于触摸屏和鼠标QScreenQGfxQtQLinuxFbScreenQGfxRasterBaseQGfxRasterQMachScreenQMatroxScreenQVoodooScreenQVga16ScreenQVFbScreenQGfxMachQGfxMatroxQGfxVoodooQGfxVga16QGfxVFbQTransformed ScreenQGfxTransformedRasterQWSServer建立选择选择建立选择diver factory图2 Q t/E m b e d d e d 3.x 中底层图形引擎实现结构162 0 0 4.1 2专题论述 TOPICAL
18、DISCUSS单片机与嵌入式系统应用底层接口并不一样,会造成对上层接口的不一致。举例来讲,从鼠标驱动接口中几乎不会得到绝对位置信息,一般只会读到相对移动量。另外,鼠标的移动速度也需要考虑在内,而触摸屏接口则几乎是清一色的绝对位置信息和压力信息。针对此类差别,Q t/E m b e d d e d将同一类设备的接口部分也给予区别和抽象,具体实现在Q M o u s e D r i v e r I n t e r f a c e 类中。键盘类设备也存在类似问题,同样引入了Q K b d D r i v e r I n t e f a c e 来解决。具体实现此处暂不赘述。2 Q t/E m b e
19、 d d e d 的移植与应用针对 Q t/E m b e d d e d 的实现特点,移植该嵌入式G U I系统一般分为以下几个步骤:设计硬件开发平台,并移植L i n u x 操作系统;采用静态链接进 L i n u x内核的方式,根据该平台显示设备的显示能力,开发f r a m e b u f f e r 驱动程序;开发针对该平台的鼠标类设备驱动程序,一般为触摸屏或 U S B鼠标;开发针对该平台的键盘类设备驱动程序,一般为板载按钮或 U S B键盘(该部分可选);根据 f r a m e b u f f e r 驱动程序接口,选择并修改Q t/E m b e d d e d 中的 Q
20、L i n u x F b S c r e e n 和Q G f x R a s t e r 类;根据鼠标类设备驱动程序,实现该类设备在Q t/E m b e d d e d 中的操作接口;根据键盘类设备驱动程序,实现该类设备在Q t/E m b e d d e d 中的操作接口(该部分可选);根据需要选择 Q t/E m b e d d e d 的配置选项,交叉编译 Q t/E m b e d d e d 的动态库;交叉编译 Q t/E m b e d d e d 中的 E x a m p l e测试程序,在目标平台上运行测试。f r a m e b u f f e r 设备驱动程序提供出的
21、接口是标准的,除了注意e n d i a n 问题外,配置Q t/E m b e d d e d 时选择相应的色彩深度支持即可,因此该部分的移植难点就在于f r a m e b u f f e r 驱动程序的实现。Q t/E m b e d d e d 部分的Q W S S e r v e r 打开/d e v/中的f r a m e b u f f e r 设备后读出相应的显示能力(屏幕尺寸、显示色彩深度),模板Q G f x R a s t e r 将根据色彩深度在用户空间设备创建出与显示缓存同样大小的缓冲作为双缓冲,并采用正确方式进行显示。2.1 在P X A 2 5 5 平台上移植和应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QtEmbedded 嵌入式 Linux 系统 中的 应用
限制150内