Qt-embedded-linux移植要点

原文位置:http://19831028.blog.51cto.com/1333653/432393

1、安装qt对系统的要求

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

Architecture       

 Compiler

 QtCore

 QtGui

 QtNetwork

 QtWebKit

 

Minimal

 Normal

 Minimal

 Normal

 Minimal

 Normal

 Minimal

 Normal

 

linux-x86-g++

 GCC 4.2.4

 1.7M

 2.7M

 3.3M

 9.9M

 653K

 1.1M

 N/A

 17M

 

linux-arm-g++

 GCC 4.1.1

 1.9M

  3.2M

 4.1M

 11M

 507K

 1.0M

 N/A

 17M

 

linux-arm-g++ (thumb)

 GCC 4.1.1

 1.7M

  2.8M

 4.0M

 9.8M

 409K

 796K

 N/A

 17M

 

linux-mips-g++ (MIPS32)

 GCC 4.2.4

 2.0M

  3.2M 

 4.5M

 12M

 505K

 1003K

 N/A

 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

(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

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。

该环境变量主要是帮助QMouseDriverFactory也就是Qt鼠标设备的枚举者来创建你想要的鼠标设备而不是系统默认的。

默认该环境变量时空的,其实大部分情况下空就可以了,Qt能够根据系统配置猜测出你想要的设备,并且这个大多数情况下好像都是正确的。不过如果错了我们可以通过设置该变量来纠正。

该环境变量的格式如下:

export QWS_MOUSE_PROTO="<driver>[:<driver specific options>]<driver>[:<driver specific options>]<driver>[:<driver specific options>]"

中间可以通过空格来指定多个鼠标设备,目前我也没用到过,因为一般有一个输入设备就够了,最常用的格式如下:

export QWS_MOUSE_PROTO="tslib:/dev/ts"

第一个,指明要使用tslib这个驱动,对应的设备名字是/dev/ts

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。而且没有服务进程在运行。可以使用的显示方式有:

Using a Single Display

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

cd path/to/QtEmbedded/demos/textedit

./textedit -qws

* Using Multiple Displays

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

./myfirstserverapplication -qws -display "transformed:rot90:1"

./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"

* Command Line Options

命令行选项

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。多鼠标可以用下列方式来指定。

export QWS_MOUSE_PROTO="[:]

[:]

[:]"

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

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/Embedded 编译及移植

http://blog.163.com/tzx_648852/blog/static/61753614200942005046593/

#tar –xvfqt-embedded-linux-opensource-src-4.4.3.tar.bz2//解压qte源代码

#cd qt-embedded-linux-opensource-src-4.4.3

#./configure –prefix/opt/qtearm-releasexplatformqws/linux-arm-g++ -embedded arm-plugin-sql-mysql

#make

#make install

经过几个小时的编译后,在/opt/qtearm/lib/opt/qteatm/plugins下生成可以再arm下运行的库文件。接着就是将库文件移植到目标机上。方法有两种,第一种是通过网络传输,将库文件传入目标板。第二种方法是将QT所需要的库文件集成到根文件系统中,通过烧录的方法烧进去。本人选择了第二种方法,因为QT的库文件是比较的大,传送起来耗时太长。另外,此方法更加容易备份文件系统。

#cd /home/tangzhix/rootfs270

#mkdir opt/qtearm//移植QT所需要的库,将在宿主机编译成功的/opt/qte移植到目标板上的/opt/qte

#cd opt/qtearm

#mkdir lib plugins

#cd lib

#cp –dpR /opt/qtearm/lib/libQtCore*.///移植QtCore

#cp –dpR /opt/qtearm/lib/libQtGui*.///移植QtGui

#cp –dpR /opt/qtearm/lib/libQtNetwork*.///移植QtNetwork

#cp –dpR /opt/qtearm/lib/libQtSql*.///移植QtSql

#mkdirfonts//移植字体库文件

#cd fonts

#cp/opt/qtearm/lib/fonts/cursor.pfa./

#cp/opt/qtearm/lib/fonts/couri.pfa./

#cp/opt/qtearm/lib/fonts/courbi.pfa./

#cp/opt/qtearm/lib/fonts/courb.pfa./

#cp/opt/qtearm/lib/fonts/cour.pfa./

# cd ../../plugins//移植数据库插件

#mkdir sqldrivers

#cp /opt/qtearm/plugins/sqldrivers/libsqlmysql.sosqldrivers/

Qt/Embedded移植详解

http://blog.163.com/lucien_cc/blog/static/130290562201031075035138/

2010-04-10 07:50:35|  分类: linux|举报|字号订阅

1楼

开发平台:ubuntu 7.04

目标平台:S3c2410

开发工具:arm 交叉工具链版本3.4.5

qt4版本:qt-embedded-linux-opensource-src-4.4.3.tar.gz(可到trolltech的ftp下载)

源码版本:linux-2.6.8

一.     到内核查看是否支持LCD驱动、framebuffer

cd   /source/kernel/linux-2.6.8

make menuconfig

在界面中找到Graphics support

进入查看Support for framebuffer devices 和 S3C2410 LCD framebuffer support两个选项是否被选中,选中代表内核已支持。否则选中两个选项,然后保存退出, make zImage

将新生成的内核镜像烧写到开发板上。

二.     将QtEmbeded 源码包解压后,把configsh文件考到解压后的目录中,可以根据实际情况修改configsh文件中第一行制定的安装目录

./configsh

(configsh脚本内容如下:

#!/bin/sh

./configure -prefix /home/linux/qt4_port/qt/build\
-release -shared \
-fast \
-pch \
-no-qt3support \
-qt-sql-sqlite \
-no-libtiff   -no-libmng \
-qt-libjpeg \
-qt-zlib \
-qt-libpng \
-qt-freetype \
-no-openssl \
-nomake examples -nomake demos -nomake tools \
-optimized-qmake \
-no-phonon \
-no-nis \
-no-opengl \
-no-cups \
-no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm \
-no-xinerama -no-xshape \
-no-separate-debug-info \
-xplatform qws/linux-arm-g++ \
-embedded arm \
-depths 16 \
-no-qvfb \
-qt-gfx-linuxfb \
-no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb \
-qt-kbd-usb \
-confirm-license \
-no-armfpa

make && make install

这个时候在指定的安装目录会出现如下目录:bin include lib mkspecs plugins translations

三.     将开发机下的linux-2.6.8文件系统用nfs挂载到开发板上(开发板上/var目录下为可写),

mount –t nfs –o nolock 192.168.1.100:/source/rootfs   /var/mnt

然后将上一步生成的lib库文件考到挂载的根文件系统的/home/qt/build/lib目录下

cp /home/linux/qt4_port/qt/build/lib/libQt*   /source/rootfs/home/qt/build/lib

四.          拷贝显示中文的文泉驿字体到根文件系统的相应目录下:

cp /home/linux/qt4_port/qt/build/lib/fonts/wenquanyi_160_75.qpf \

/source/rootfs/home/qt/build/fonts

五. 用qt编一个helloworld 程序进行测试。使用qmake、make对程序进行编译。

注意:一定要用qtembed安装目录下bin/下面的qmake

/home/linux/qt4_port/qt/build/bin/qmake   –project

/home/linux/qt4_port/qt/build/bin/qmake

make

六.将上一步生成的可执行文件helloworld考到挂载的根文件系统下

在开发板上设置环境变量

export QTDIR=/var/mnt /home/qt/build

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export PATH=$QTDIR/bin:$PATH

export QT_QWS_FONTDIR=/var/mnt /home/qt/build/fonts

最后运行helloworld程序

./helloworld   -qws

就可以看到界面了。

武汉华嵌地址:洪山区吴家湾东方怡景大厦A座6层

报名咨询电话:027-87780211                 www.embedhq.org   

qt 嵌入式linux 环境变量设置相关推荐

  1. linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH)

    linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH) 2012-11-09 11:17:25     我来说两句       作者:wangeen 收藏  我要投稿 linux环 ...

  2. linux+查看系统环境路径,Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH

    Linux环境变量设置方法总结 PATH.LD_LIBRARY_PATH PATH:  可执行程序的查找路径 查看当前环境变量: echo $PATH 设置: 方法一:export PATH=PATH ...

  3. 最新gcc下载和linux环境变量设置

    最新gcc下载和linux环境变量设置 一.gcc下载 提供最新gcc下载路径:点这里跳转 http://ftp.gnu.org/gnu/gcc/ 安装 /gcc_package/configure ...

  4. linux环境变量设置方法,Linux环境变量设置指南

    以配置java环境变量为例 [编辑]修改/etc/profile文件 此法对所有用户生效 在文件末尾加入以下内容: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAV ...

  5. linux环境变量设置 profile,Linux 环境变量 设置 etc profile

    一.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.永久的:需要修改配置文件,变量永久生效. 2.临时的:使用export命令声明即可,变量在关闭shell时失效. 二. ...

  6. Linux环境变量设置

    linux环境变量设置图解,Linux环境变量设置 linux环境变量设置图解 一.环境变量的概念 1.环境变量的含义 程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成 ...

  7. Linux环境变量设置中配置文件分析(/etc/profile,~/.bashrc等)(转)

    说明:在研究中发现,对于不同版本的Linux系统有着不同的文件,但是总的入口是不变的/etc/profile,下面只是展示加载顺序的研究过程,所以会有些系统没有这个文件等问题. 一.配置文件与作用域: ...

  8. linux环境变量设置图解,Linux环境变量设置

    一.环境变量的概念 1.环境变量的含义 程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的. 2.环境变量的分类 1)按生效的范围分类. 系统环境变量:公共的,对全部的 ...

  9. linux环境变量设置图解,Ubuntu Linux 各个环境变量配置文件详解, 环境变量PATH设置...

    一.Ubuntu Linux系统环境变量配置文件: 1. /etc/profile 在登录时,操作系统定制客户环境时使用的第一个文件 ,此文件为系统的每个客户设置环境信息,当客户第一次登录时,该文件被 ...

最新文章

  1. QQ音乐API分析记录
  2. 技术天地 | CSS-in-JS:一个充满争议的技术方案
  3. Python学习【第6篇】:Python之文件操作
  4. extjs中文字体在firefox和Adobe Air里显示偏小的问题
  5. php生成网页,php – 网页生成(CMS喜欢)
  6. oracle实验六杨艳华_oracle实验报告总结
  7. linux安装交叉编译环境
  8. 组件php53 php55区别,分享下php5类中三种数据类型的区别
  9. BZOJ 1007 水平可见直线
  10. QCC3040---battery module
  11. 你知道二维码的图案原理吗?
  12. 名帖233 俞和 行书《自书诗卷》
  13. python开发板卡驱动开发_IC卡驱动程序开发
  14. 虚拟地址和物理地址及其映射
  15. scanf()函数的用法
  16. 【美团秋招笔试】美团第一次笔试 2022-8-20
  17. os 库、 sys 库、getopt 库 与 filecmp 库,5000 字长文带你搞定四大库
  18. 【软件简史】怎样理解 Alan Kay 曾在1984 年写道:“我们希望像以前编辑文档一样编辑我们的工具” 这句话 —— LLM 将如何影响软件的创建?
  19. “5G+区块链”护航新生儿转诊“生命通道”
  20. Java工程师培训课(十八【新的领域】)

热门文章

  1. android 音频在手机上测试播放不流畅问题
  2. PCI DSS认证到底难在何处?
  3. 百度网盘文件下载工具
  4. 大数据分析的PYTHON基础(选择练习)
  5. 基尔霍夫电压定律解析
  6. STM32之 W25Q128闪存(SPI协议)驱动代码(程序稳定,清晰明了)
  7. 【Git】Git命令大全
  8. redis数据类型及操作
  9. c# Thread 线程详细讲解
  10. 如何使 一个 div 居中显示