嵌入式Qt开发环境搭建及移植到开发板----Qt学习笔记

新博客地址:https://linuxszp.github.io


整了好多天的Qt移植,今天终于弄出来了。记录一下学习过程,可把我闹心死了。

先说说Qt源码包,我刚装Qt的时候非常乱,又有x11的,又有embedded的,还有everywhere的。现在明白了,安装x11,可以开发在pc机下运行的应用程序,并且会生成一些Qt开发工具designer和qvfb。安装embedded ,可以开发在开发板上运行的Qt应用程序。使用everywhere,需要解压三份,使用不同的configure参数可以安装不同平台的Qt,包括前面说的两种。分别为x11,x86,arm。x86的程序可以运行在qvfb里。这就可以不用开发板了。如果是windows装Qt的话,只需要下载个exe文件直接安装就行了。要配置环境变量。(最后再说)

再说说windows和linux下的Qt程序。

windows 下的Qt和Linux下的Qt可以一样用的,只要在新的系统里再重新使用qmake -project ;qmake;make(windows下是mingw32-make)三个命令编译一下就行了。一定要设置好环境变量啊,否则找不到命令

一、.嵌入式Qt程序开发环境的搭建。

第一步:PC机安装Qt。

ftp://ftp.qt.nokia.com/qt/source下载Qt的源码包。qt-everywhere-opensource-src-4.8.1.tar.gz 放到/root/Qt目录下。

tar -zxvf qt-everywhere-opensource-src-4.8.1.tar.gz 命令解压,将解压后的目录名称改为qtx11.

#cd qtx11

#./configure

#gmake(这一步的时间相当长,四五个小时)

#gmake install

这是就安装好了,安装在/usr/local/Trolltech/Qt-4.8.1

#export PATH=” /usr/local/Trolltech/Qt-4.8.1/bin:$PATH”

#qmake -v(如能输出版本号,则说明安装成功)

接下来编译qvfb。

#cd /root/Qt/qtx11/tools/qvfb

#gmake

#cp /root/Qt/qtx11/bin/qvfb /bin

#qvfb(如果能出现一个虚拟窗口,那么说明编译成功了)

第二步:安装Qt for x86

#cd /root/Qt/

#tar -zxvf qt-everywhere-opensource-src-4.8.1.tar.gz命令解压,将解压后的目录名称改为qtx86.

#cd qtx86

#./configure-embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb(这个命令可以使应用程序在qvfb里运行,节省开发板)

#gmake(很长时间)

#gmake install

安装目录在/usr/local/Trolltech/QtEmbedded-4.8.1/

#export PATH="/usr/local/Trolltech/QtEmbedded-4.8.1/bin:$PATH"

#qmake –v (如能输出版本号,则说明安装成功)

将上一步中编译好的qvfb复制到/usr/local/Trolltech/QtEmbedded-4.8.1/bin中。

第三步:安装交叉编译工具,arm-linux-gcc,我的版本是4.3.2

#tar xvzf arm-linux-gcc-4.3.2.tgz -C / (C需要大写,解压后安装在/usr/local/arm/4.3.2/

#vi /etc/profile (添加PATH)

添加如下内容exportPATH="$PATH:/usr/local/arm/4.3.2/bin"

#arm-linux-gcc -v (如果输出版本号说明安装成功)

第四步:交叉编译tslib-1.4

下载tslib-1.4.tar.gz放到/root/Qt/目录下

#cd /root/Qt/

#tar zxvf tslib-1.4.tar.gz

#cd tslib

#export CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc //设定C编译器

#export CXX=/usr/local/arm/4.3.2/bin/arm-linux-g++ //设定C++编译器

#./autogen.sh (如果运行有错误则需要安装autoconf、automake、libtool (如yum installautoconf))

#echo"ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache //避免检查ac_cv_func_malloc_0_nonnull

# ./configure--host=arm-linux --cache-file=arm-linux.cache-prefix=/usr/local/tslib

#gmake

#gmake install (安装在/usr/local/tslib里面)


可能遇到的错误

In file included from /usr/include/fcntl.h:252:0,
                 from /usr/include/sys/fcntl.h:1,
                 from ts_calibrate.c:20:
In function ‘open’,
    inlined from ‘main’ at ts_calibrate.c:227:11:
/usr/include/bits/fcntl2.h:51:24: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
In function ‘open’,
    inlined from ‘main’ at ts_calibrate.c:229:11:
/usr/include/bits/fcntl2.h:51:24: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
make[2]: *** [ts_calibrate.o] Error 1
make[2]: Leaving directory `/home/ouyang/Downloads/tslib/tests'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/ouyang/Downloads/tslib'
make: *** [all] Error 2

gcc 新版本编译器对语法检查严格,在源文件 ./tests/ts_calibrate.c 中


// 源文件
// if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
//     cal_fd = open (calfile, O_CREAT | O_RDWR);
// } else {
//   cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR);
// }
// 需要更改成如下形式
if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
    cal_fd = open (calfile, O_CREAT | O_RDWR, 0777);
} else {
    cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, 0777);
}

保存后重新编译即可


#vi/usr/local/tslib/etc/ts.conf (修改ts.conf) 最后内容如下:

module_raw input

module pthres pmin=1

module variance delta=30

module dejitter delta=100

module linear

(以下是在对应的开发版上使用,)

将上面整个/usr/local/tslib的内容下载到开发版里的对应路径下在(/usr/local/)

配置环境变量

添加如下内容:

exportTSLIB_ROOT=/usr/local/tslib

exportTSLIB_TSDEVICE=/dev/input/event0

exportTSLIB_CALIBFILE=/etc/pointercal

exportTSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts

export TSLIB_FBDEVICE=/dev/fb0

exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib

然后重启开发板,在终端输入./ts_calibrate会出现触摸屏五点校准画面,移植成功。

不过我输入命令后没有成功,只是把库函数都挪了过来。

第五步:安装Qt for arm

#cd /root/Qt/

#tar zxvf qt-everywhere-opensource-src-4.8.1.tar.gz命令解压,将解压后的目录名称改为qtARM.

#cd qtARM

#./configure –embedded arm –xplatform qws/linux-arm-g++-qt-mouse-tslib-I/usr/local/tslib/include -L/usr/local/tslib/lib

#gmake

#gmake install

安装目录在/usr/local/Trolltech/QtEmbedded-4.8.1-arm/

#export PATH=”/usr/local/Trolltech/QtEmbedded-4.7.1-arm/bin:$PATH”

然后输入#qmake –v(如能输出版本号,则说明安装成功)

第六步:建立三个文件,用于三个环境变量的设置

#vi ~/.setenv-qtx11.sh

内容如下

export PATH=/usr/local/Trolltech/Qt-4.8.1/bin:$PATH

export QTDIR=/usr/local/Trolltech/Qt-4.8.1/

export LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.8.1/lib:$LD_LIBRARY_PATH

#vi ~/.setenv-qtx86.sh

内容如下

export PATH=/usr/local/Trolltech/QtEmbedded-4.8.1-arm/bin:$PATH

export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.8.1-arm/

exportLD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.8.1-arm/lib:$LD_LIBRARY_PATH

#vi ~/.setenv-qtARM.sh

内容如下

export PATH=/usr/local/Trolltech/QtEmbedded-4.8.1/bin:$PATH

export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.8.1/

exportLD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.8.1/lib:$LD_LIBRARY_PATH

接下来是如何使用:

假设已经有一个工程目录是hello。

(1)想在电脑上运行。

#source ~/.setenv-qtx11(使环境变量生效)

#cd hello

#qmake -project

#qmake

#make

#./可执行文件

这样就可以了

(2)想在qvfb上运行

#source ~/.setenv-qtx86(使环境变量生效)

#cd hello

#qmake -project

#qmake

#make

#qvfb &(打开qvfb,如果出错的话,就打开x11里的qvfb)

#./可执行文件 -qws

(3)想在开发板上运行

#source ~/.setenv-qtARM(使环境变量生效)

#cd hello

#qmake -project

#qmake

#make

这时的可执行文件就只能在开发板运行了。下载到开发板

(开发板里需要有Qt的库,直接从pc机里拷过来就行了,,将/usr/local/Trolltech/QtEmbedded-4.8.1/lib下的libQtGui.so* 、libQtCore.so*、libQtNetwork.so* 复制到开发板目录的/usr/lib目录下。将交叉编译器lib目录下的libstdc++.so*、libpng.so* 复制到开发板目录/usr/lib目录下。)

设置开发板环境变量

#exportLD_LIBRARY_PATH=/usr/local/tslib/lib:/usr/lib/:$LD_LIBRARY_PATH

这时可以执行编译好的Qt程序了。到程序所在目录下再执行

./可执行文件 -qws

上述内容为linux下的环境配置。

假设windows下安装的是Qt-2009-05,安装目录在D:/Qt/2009.05/

在我的电脑->属性->高级->环境变量 ,编辑path变量。添加如下内容

;D:\Qt\2009.05\mingw\bin;D:\Qt\2009.05\qt\bin

这样就可以使用qmake -project、qmake、mingw32-make命令了


原创:http://blog.csdn.net/mynameislu/article/details/7791366

你可能感兴趣的:(嵌入式Qt开发环境搭建及移植到开发板----Qt学习笔记)