深度解析 Qt Eembedded Linux移植要点

移动开发
本文介绍的是 Qt Eembedded Linux移植要点,从不同角度来讲解移植要点。先来看内容。

Qt Eembedded Linux移植要点是本文要介绍的内容,不多说。先来看内容。

1、安装qt 对系统的要求

安装 qt 的过程在不同的平台上会有所不同,主要关嵌入式linux平台上如何安装。若需要提供对OpenSSL的支持,需要通过单独安装OpenSSL Toolkit,来获得Secure Sockets Layer (SSL)。对于不同的平台上,会有不同的要求。下面具体关注嵌入式linux的要求。如果要在qt上对QtWebKit模块的支持,必须使用uClibc 0.9.29或者更高的版本,以对pthread的支持。在内存方面的要求主要取决于体系架构以及在编译过程中使能的QT选项。下面是针不同平台上qt支持库的大小。

  1. Architecture         
  2.  Compiler  
  3.  QtCore  
  4.  QtGui  
  5.  QtNetwork  
  6.  QtWebKit  
  7.    
  8. Minimal  
  9.  Normal  
  10.  Minimal  
  11.  Normal  
  12.  Minimal  
  13.  Normal  
  14.  Minimal  
  15.  Normal  
  16.    
  17. linux-x86-g++  
  18.  GCC 4.2.4  
  19.  1.7M  
  20.  2.7M  
  21.  3.3M  
  22.  9.9M  
  23.  653K  
  24.  1.1M  
  25.  N/A  
  26.  17M  
  27.    
  28. linux-arm-g++  
  29.  GCC 4.1.1  
  30.  1.9M  
  31.   3.2M  
  32.  4.1M  
  33.  11M  
  34.  507K  
  35.  1.0M  
  36.  N/A  
  37.  17M  
  38.    
  39. linux-arm-g++ (thumb)  
  40.  GCC 4.1.1  
  41.  1.7M  
  42.   2.8M  
  43.  4.0M  
  44.  9.8M  
  45.  409K  
  46.  796K  
  47.  N/A  
  48.  17M  
  49.  
  50. linux-mips-g++ (MIPS32)  
  51.  GCC 4.2.4  
  52.  2.0M  
  53.   3.2M   
  54.  4.5M  
  55.  12M  
  56.  505K  
  57.  1003K  
  58.  N/A  
  59.  21M 

2、qt-embedded-linux的安装

(1)下载源码包,解压;

下载开源嵌入式版本的网址:http://download.qtsoftware.com/qt/source/常用官网

qt news:http://www.qtsoftware.com/about/news

qt downloads:http://www.qtsoftware.com/downloads

qt Quarterly:http://doc.trolltech.com/qq/

qt bugs:http://www.qtsoftware.com/developer/task-tracker

qt Supported Platforms:http://doc.trolltech.com/supported-platforms.html

qt Version Changes :http://www.qtsoftware.com/developer/changes

qt books: http://www.qtsoftware.com/developer/books   

#p#

(2)建立支持库

通过./configure来设置,主要配置可以通过--help来获得帮助;之后用make命令,然后用make install 命令。将库安装到指定的路径下面。其中的设置包括指定安装的路径;未配置的话,默认的路径是/usr/local/Trolltech/QtEmbedded-4.5.0;

(3)设置环境变量

为了能够使用Qt for Embedded Linux,  必须导出的PATH变量有qmake, moc 以及其他Qt for Embedded Linux 的工具, 以及LD_LIBRARY_PATH 必须导出。例如:    PATH=/usr/local/Trolltech/QtEmbedded-4.5.0/bin:$PATH

  1. export PATH 

(4)建立虚拟的frambuffer。

建立虚拟的frambuffer,需要安装X11 Platforms .

3、嵌入式linux版本的qt环境变量

POINTERCAL_FILE:指定文件包含的数据,用来校准触摸笔设备。同时可以参考QWSCalibratedMouseHandler and Qt for Embedded Linux Pointer Handling.

QT_ONSCREEN_PAINT:如果定义了的话,可以用来将控件显示在屏幕上。如果没有其他控件在同一个区域的话,该设备响应的区域将不会随着屏幕设备驱动的改变而改变。设置这个环境变量相当于在控件中应用程序中设置Qt::WA_PaintOnScreen。

QWS_SW_CURSOR:如果定义了的话,软件鼠标的光标将一直是可用的。(即使使用硬件加速驱动器来支持硬件光标)

QWS_DISPLAY:指定显示形式和framebuffer.例如:export QWS_DISPLAY=[:]...[:]

QWS_SIZE:指定嵌入式linux qt窗口在屏幕上的大小。export QWS_SIZE=x

QWS_MOUSE_PROTO:指定触摸设备。 export QWS_MOUSE_PROTO=[:],参数可以是MouseMan, IntelliMouse, Microsoft, VR41xx, LinuxTP, Yopy. Tslib and keys。/dev/mouse 指的是鼠标设备,  /dev/ts for touch panels。

QWS_KEYBOARD为输入设备指定输入设备和驱动。比如:export QWS_KEYBOARD=[:]。参数可以是SL5000, Yopy, VR41xx, TTY, USB and keys,指定的是一个标准设备。比如:/dev/tty0。

4、在嵌入式linux上运行qt程序

任何嵌入式linux应用程序可以通过构建QApplication 对象QApplication::GuiServer的格式,被构建为服务server application。或者通过-qws命令行选项的方式。本文当假设用The Virtual Framebuffer 或者嵌入式linux的VNC协议,或者正确配置的Linux framebuffer。而且没有服务进程在运行。可以使用的显示方式有:

  1. Using a Single Display 

单显示,运行这种显示方式,改变Linux console,而且选择一个应用来运行。它要求在安装过程中,环境变量是可用的。它要求指定的硬件设备驱动必须工作正常。比如:

  1. cd path/to/QtEmbedded/demos/textedit  
  2. ./textedit -qws  
  3. * Using Multiple Displays 

linux同时也是支持多设备显示。有两种方式可以完成。当在运行多服务程序的时候,显示屏的驱动(以及数量)必须为每一个程序进行指定。用-display命令行或者QWS_DISPLAY 来指定。比如:

  1. ./myfirstserverapplication -qws -display "transformed:rot90:1"  
  2. ./mysecondserverapplication -qws -display "QVFb:2" 

需要注意的是,必须指定一个显示设备,在开始客户端程序的时候。比如:./myclientapplication -display "QVFb:2"。在程序运行的时候,没有办法将一个客户端程序从一个显示移动到另一个显示。用多显示屏驱动,另一方面,应用程序可以方便的在两个不同类型的显示屏之间切换。多屏幕显示可以用-display命令行参数来指定 或者通过设置QWS_DISPLAY环境变量比如: ./myserverapplication -qws -display "Multi: QVFb:0   QVFb:1:offset=0,0 VNC:offset=640,0 :2"

  1. * Command Line Options 

命令行选项

#p#

5、移植qt在嵌入式linux的应用

移植过程和移植到x11平台上的差别不大,遵守通用的移植过程。然后还包括几个方面:字体库移植,设置环境变量以及Framebuffer的支持。

字体库的支持:是在qt的/lib/fonts目录下。由于程序运行的时候是到这个文件夹下面来调用,因此需要将字体库复制到这个目录下。

环境变量的设置:通常情况下,与默认的环境变量不同,因此需要设置的有QWS_MOUSE_PROTO, QWS_KEYBOARD 以及 QWS_DISPLAY,用来指定鼠标、键盘以及显示设备管理。在./configure 的时候需要加入的选项是-qt-kbd- and -qt-mouse- ,这样才能使能这些设备驱动。但是还需要指定一个具体的设备,因此需要通过设置环境变量来完成。

framebuffer的支持:没有特殊需求的情况下,要求在目标设备上使能framebuffer。Linux framebuffer在标准设置情况下是使能的。

6、嵌入式linuxqt 显示管理

当需要显示的时候,默认的动作是每一个嵌入式linux的客户端将 需要的显示的色调存放在内存中,然后服务端将相关的数据从内存在中送到显示屏上。服务端用显示屏驱动copy内存中的内容到显示屏上显示。显示屏的驱动是在服务端应用加载的时候运行的,用的是qt的插件系统。常用的方式有:可用的驱动;指定一个驱动;子驱动和多驱动。

Available Drivers可用的驱动

嵌入式linux的qt提供的驱动有Linux framebuffer, the virtual framebuffer, transformed screens, VNC servers and multi screens.通过运行./configure 选项来列出可用的驱动。默认的配置是不加速的Linux framebuffer driver (/dev/fb0) 被打开。其他的设备驱动也可以使能或者禁止,通过以下命令行。例如:./configure -qt-gfx-transformed

Specifying a Driver指定一个驱动

通过设置环境变量QWS_DISPLAY来指定一个设备。比如:格式如下的: export QWS_DISPLAY="[:]... [:]"  可以用的参数有:LinuxFb, QVFb, VNC, Transformed, Multi and keys identifying custom drivers。参数的被用来分辨用相同驱动的屏幕,而且使能多显示。如下的表格用来指定驱动。环境变量的QWS_DISPLAY也可以通过-display来设置。比如: myApplication -display "[:]...  [:]"

Subdrivers and Multiple Drivers子驱动和多驱动

VNC, Transformed 和Multi screen drivers取决于子驱动。通用的语法是: export QWS_DISPLAY="[:][:]...[ :]"至于子驱动,在每个子驱动之间加上空间是很重要的,在显示设备前加上用来分开各个驱动和显示设备。注意的是多屏幕驱动可以拥有多个子设备驱动,比如: export QWS_DISPLAY="Multi: QVFb:0 QVFb:offset=640,0:1 :2"注意的是:VNC screen driver在没有指定屏幕驱动的情况下,默认的是虚拟屏幕驱动。在这种情况下,VNC driver有一些额外的参数来指定大小的位宽,参数有:    * size=  * depth=   * mmHeight=

* mmWidth= 。例如:export QWS_DISPLAY="VNC:size=720x480:depth=32"。例如运行VNC屏幕驱动在Linux framebuffer driver的情况下,则:export QWS_DISPLAY="VNC:LinuxFb"

7、输入设备键盘和鼠标的设置与管理

当运行一个Qt for Embedded Linux应用程序的时候,不管是作为一个服务还是连接到另一个服务,当它开始运行的时候,鼠标驱动被服务的应用加载,用qt的plugin system。 在配置qt的时候通过选项来选择支持的鼠标以及键盘设备,同时测试可用的设备。

通过 ./configure -help 查看可用的设备,配置时候默认的是PC的鼠标驱动。如果是自己添加一个设备,比如触摸屏,则需要创建一个QWSCalibratedMouseHandler subclass来完成校验功能。若提供的pc的鼠标被使能,Qt for Embedded Linux将会自动探测所支持的一种鼠标设备,这个设备是在/dev/psaux 或者 /dev/ttyS的一种。如果多种类型的都检测到的话,则多种同时支持。需要注意的是,Qt for Embedded Linux 不支持自动检测触摸屏设备,因此需要指定使用的是哪一种。

要设置环境变量QWS_MOUSE_PROTO ,例如:export QWS_MOUSE_PROTO=[:],其中的参数可以是MouseMan, IntelliMouse, Microsoft, VR41xx, LinuxTP, Yopy, Tslib and keys,driver specific options是一个标准设备,比如:dev/mouse,触摸屏的是/dev/ts。多鼠标可以用下列方式来指定。

  1. export QWS_MOUSE_PROTO="[:]  
  2.         [:]  
  3.         [:]" 

需要注意的是:Vr41xx 驱动有两个可选的参数:press=来定义单击的时间(默认值是750);filter= 指定的是滤波长度。用于虑掉噪声。比如:

  1. export QWS_MOUSE_PROTO="Vr41xx:press=500:/dev/misc/ts" 

对于The Tslib Mouse Driver是一个继承QWSCalibratedMouseHandler的类,在产生鼠标事件的时候,提供校验和滤波的功能,用于使用同一的触摸屏的库。为了使用鼠标,必须编译的选项是-qt-mouse-tslib。此外,tslib的头文件和库也要在build的环境变量中指出来。tslib 的源码可以在http://tslib.berlios.de. 下载。通过-L 和-I 来指定库和头文件的位置。比如: ./configure  -L -I 。 为了保证能够使用鼠标,tslib必须正确的安装在目标机上。包括提供一个ts.conf 配置文件和设置必要的环境变量。ts.conf包括两行:内容是: module_raw input

module linear在make Qt for Embedded Linux 时候特别指定tslib 鼠句柄,设置环境变量QWS_MOUSE_PROTO 。可能出现问题的地方是设备文件和文件权限两个方面。为了保证能够正确的使用设备文件,第一步,先测试一下设备文件是否有输出。比如:如果指定的鼠标设备驱动是:QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mouse0,然后检查设备的输出,通过在控制台上敲: cat /dev/input/mouse0 | hexdump,移动鼠标后,如果可以在控制台上看见输出,表示能够正确的使用设备,否则要重新连接设备。

对于设备的读写权限,一般要求对设备至少有读权限。比如:QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mouse0,那么应该将该设备的权限设置为chmod a+rw /dev/input/mouse0。如果设备文件符号连接到另一个文件的话,必须改变相关文件的属性。

小结:深度解析 Qt Eembedded Linux移植要点的内容介绍完了,希望本文对你有所帮助。如果需要更多的资料,请参考编辑推荐。

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-07-01 13:15:50

Ubuntu QT Eembedded

2011-06-24 13:08:34

Qt Qt 4.5.3 移植

2010-01-28 13:50:03

Android移植

2011-06-13 15:57:26

linux QT QTOPIA

2011-06-27 09:15:21

QT Creator

2011-07-01 14:39:08

Qt Quick

2011-06-30 15:51:39

2011-06-30 16:08:05

Qt 字库 QPF

2011-06-09 14:56:53

QT 编译

2011-06-13 11:24:55

QT MPlayer 移植

2011-08-12 13:53:00

IOS框架

2011-06-16 15:17:16

2011-06-22 16:50:09

Qt 进程 通信机制

2011-06-13 11:07:22

QT 移植

2012-07-06 15:23:28

Linux集群

2009-12-24 14:02:57

Linux集群技术

2009-10-14 10:07:18

综合布线系统测试

2011-06-21 18:02:14

Qt 动态 链接库

2011-06-21 14:01:07

QT 界面库 Embedded

2011-07-05 10:55:14

Linux Qt 移植
点赞
收藏

51CTO技术栈公众号