`
yuanyu5237
  • 浏览: 159096 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ubuntu10.10下嵌入式QT开发环境搭建手记

阅读更多

【前言:由于我也是第一次搭建这个环境,整个所用时间不止一周,以及以前用java觉得还要配置环境变量,好麻烦,但那不过是几分钟的事,后来手动 配置php,最快半天,一般我都要用一天的时间,个人比较笨;现在配置个嵌入式qt环境的时间不止一周的时间,真的是整个人都被整疯了,而且到此刻,我还 不确定我的环境是否已经配置的完全正确,以下是一些环境搭建过程中碰到的问题,稍微整理了一下,建议在配环境的时候,多看几篇比较完整的环境搭建的文章, 准备好前期工作(很多与编译有关的软件包提前装好),对比着做,然后出现错误了再上百度或谷歌去找答案,不要急,慢慢来,一周时间不算很长(经常错了从头 再来)】

首先,去QT的官网(http://qt.nokia.com/downloads)下载文件:直接下载

Qt SDK for Linux/X11 32-bit** (422 MB) (这样比较简便,虽然可能占的空间要大一点)

2,第二步就是安装刚刚下载的二进制文件:

chmod u+x qt-sdk-linux-x86-opensource-2010.05.1.bin
./qt-sdk-linux-x86-opensource-2010.05.1.bin(这一步需要注意已经安装了gcc,g++,并且版本足够高,因为我一开始在red hat9的系统里
装完之后,发现red hat自带的gcc版本太低,导致了很多麻烦,最终也没有解决好)
3 下载coss tools包:
http://kegel.com/crosstool/crosstool-0.43.tar.gz
4。 安装cross tools
mkdir ~/downloads 在用户主目录下建立一个下载文件夹,之后安装过程中下载的包都会
自动放到这个文件夹下
sudo apt-get install bison
sudo apt-get install flex
以下4步是必须的,gcc的版本既不能太高也不能太低,只能是3.4;因为要用这个版本来编译内核。
sudo apt-get install gcc-3.4
cd /usr/bin
sudo ln -s gcc-3.4 gcc
sudo rm gcc

正式安装
sudo mkdir /opt/crosstool
sudo chown 当前登录的用户名 /opt/crosstool
tar -zxvf crosstool-0.43.tar.gz
cd crosstool-0.43
vi demo-arm.sh
注释掉#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
在其后,加上eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest
注意:cat arm.dat gcc-4.1.1-glibc-2.3.2.dat而不是默认的gcc-4.1.1-glibc-2.3.6-tls.dat

修改linux内核版本,linux内核可以自己选择,我的linux内核是linux-2.6.24(前面下载的那个)
lingd@ubuntu:~/downloads/crosstool-0.43$ vi gcc-4.1.1-glibc-2.3.2.dat
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.1
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.28
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5
修改交叉编译工具前缀
vi arm.dat
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux                 (该名称为目标名称,我是觉得默认(arm-unknow-linux-gnu)的太长所以修改了,修改了后要注意了相关目录的权限)
TARGET_CFLAGS="-O"
执行下一个命令,系统将开始编译,并下载下面的包:
binutils-2.16.1
gcc-3.3.6
gcc-4.1.1
glibc-2.3.2
linux-2.6.24
linux-libc-headers-2.6.12.0
glibc-linuxthreads-2.3.2
gdb-6.5
这个工程很长需要n小时的时间来
可以ls一下看看里面的文件,里面有一些脚本文件,具体功能可以到http://kegel.com/crosstool上查看FAQ
./demo-arm.sh (会执行很漫长)
执行完后,最后一行提示:
Done!
执行完毕,修改环境变量
安装完成后,默认的安装目录就是开始创建的那个/opt/crosstools/
1.添加环境变量
vi ~/.bashrc
在最后添加如下
if [ -d /opt/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux ]; then
    PATH=/opt/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin:$PATH
fi
就是把安装的工具bin目录添加到PATH变量中。
保存
2.source ~/.bashrc,使环境变量生效
$ source ~/.bashrc
3.重启终端。
输入arm后,连续按两下table键,可以看到arm-linux-gcc-4.1.1,说明已经安装成功
$ arm
arm2hpdl             arm-linux-gcc        arm-linux-objdump
arm-linux-addr2line  arm-linux-gcc-4.1.1  arm-linux-ranlib
arm-linux-ar         arm-linux-gccbug     arm-linux-readelf
arm-linux-as         arm-linux-gcov       arm-linux-size
arm-linux-c++        arm-linux-gprof      arm-linux-strings
arm-linux-c++filt    arm-linux-ld         arm-linux-strip
arm-linux-cpp        arm-linux-nm        
arm-linux-g++        arm-linux-objcopy
$ arm

 

=================================================================

可能出现的问题:

1. crosstool在ubuntu下运行提示 getandpatch.sh: 1: patch: not found

 

1.执行apt-get update

2.apt-get install patch

2.gcc 版本太低,或者太高都不行,我的ubuntu是10.10,gcc版本4.4.6;需要再安装一个3.4;执行命令的时候可能找不到软件包,需要到软件中心把所有的软件源(9.04;第三方)都勾选上。

 

=================================================================

 

现在开始搭建嵌入式QT环境;

首先从官网下载QT的嵌入式版,注意官网上的嵌入式版和linux版都是199M,其实他们在官网上的位置不一样,

Qt libraries 4.7.0 for embedded Linux (199 MB)

http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.0.tar.gz

Qt libraries 4.7.0 for Linux/X11(199 MB)

http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.0.tar.gz

其实下载下来是一样(看他们的下载路径都是一样的)的,。下载下来的文件名为: qt-everywhere-opensource-src-4.7.0.tar.gz

解压

tar zxvf   qt-everywhere-opensource-src-4.7.0.tar.gz

把解压后的文件再复制两份(一共三份),分别取名为pc; x86; arm;然后开始分别编译:

1.编译PC,  cd pc

./configure

make

这一步可能出错:1

此完整出错信息是在./configure阶段
Basic XLib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /home/zhu/Qt/qt-x11-opensource-src-4.5.2/mkspecs/linux-g++

config.test /x11/xlib 执行make命令,看出错信息
g++ -Wl,-O1 -o xlib xlib.o    -L/usr/X11R6/lib -lXext -lX11 -lm
/usr/bin/ld: cannot find -lXext
可以看到,g++在/usr/X11R6/lib下,找不到libXext.so

其原因就在于需要安装libX11的开发包,根据自己的系统特点,安装 libX11-dev   libXext-dev   libXtst-dev

问题解决!

可能出错:2

cc1: error: unrecognized command line option "-fvisibility=hidden"

make: *** [sub-corelib-make_default-ordered] 错误 2

出错原因是gcc版本太低,不支持-fvisibility=hidden选项,因为一开始的时候我们把gcc改成了3.4版本,现在要(利用备份)把它改回来。然后,重新编译make.。

可能出错3:

/usr/bin/ld: cannot find -lXrender

说明还少一个包:安装    libxrender-dev 

sudo apt-get install cutecom

sudo apt-get install autoconf automake libtool

截至到现在,最后一次make没有出错,但有不错warning,不管它

sudo make install

2. 编译嵌入式x86版:

进入x86目录,设置其以QVFB作为显示输出

# sudo ./configure -prefix /usr/local/Trolltech/QtEmbedded-4.7.0 -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb

# sudo make

# sudo make install

安装过程比较长,没有碰到过错误。

编译安装PC 版中的 qvfb:

进入pc/tools/qvfb/目录

#make

#make install

3. 编译arm版:

先安装tslib

下载tslib-1.4.    点击   tslib1.4

./autogen.sh  生成配置文件

CC= $ARM_TOOL_PATH/arm-linux-gcc

X= $ARM_TOOL_PATH/arm-linux-g++

./configure --prefix=/usr/local/tslib-1.4 --host=arm-linux ac_cv_func_malloc_0_nonnull=yes  

make

make install

再安装arm

cd arm

./configure -prefix /usr/local/Trolltech/QtEmbedded-4.7.0-arm  \

-opensource \

-confirm-license \

-release -shared \

-embedded arm \

-xplatform qws/linux-arm-g++ \

-depths 16,18,24 \

-fast \

-optimized-qmake \

-pch \

-qt-sql-sqlite \

-qt-libjpeg \

-qt-zlib \

-qt-libpng \

-qt-freetype \

-little-endian -host-little-endian \

-no-qt3support \

-no-libtiff -no-libmng \

-no-opengl \

-no-mmx -no-sse -no-sse2 \

-no-3dnow \

-no-openssl \

-no-webkit \

-no-qvfb \

-no-phonon \

-no-nis \

-no-opengl \

-no-cups \

-no-glib \

-no-xcursor -no-xfixes -no-xrandr -no-xrender \

-no-separate-debug-info \

-nomake examples -nomake tools -nomake docs \

-qt-mouse-tslib -I/usr/local/tslib-1.4/include -L/usr/local/tslib-1.4/lib

make

sudo make install

等待安装完成!

=============================================================

测试安装是否正确完成

安装完成后,在 /usr/local/Trolltech 目录中有三个文件夹:Qt-4.7.0、QtEmbedded-4.7.0、QtEmbedded-4.7.0-arm。

1   测试嵌入式 x86 :
$ source ~/.setenv-qt-x86.sh
$ qvfb -width 800 -height 600 &
$ /usr/local/Trolltech/QtEmbedded-4.7.0/demos/books/books -qws

或者:

cd   /usr/local/Trolltech/QtEmbedded-4.7.0/demos/books

qvfb -width 640 -height 480 &

./books -qws

执行完qvfb;弹出一个类似终端的窗口,窗口背景为黑色,应该相当与模拟器的屏幕

执行完book;窗口背景不再是黑色,屏幕中弹出一个类似于图书管理系统的界面,这就是我们想要看到的!

这一步可能出错,就是找不到qvfb,提示你安装qt4---*****;和qt3---***;直接apt-get 安装第二个即可。sudo apt-get install qt3-dev-tools-embedded              修复

 

4、编写环境变量设置文件(方便不同环境切换):

~/.setenv.sh(对应于PC版Qt):
PATH=/usr/local/Trolltech/Qt-4.7.0/bin:$PATH
LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.7.0/lib:$LD_LIBRARY_PATH

~/.setenv.sh:
QTEDIR=/usr/local/Trolltech/QtEmbedded-4.7.0
PATH=/usr/local/Trolltech/QtEmbedded-4.7.0/bin:$PATH
LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.7.0/lib:$LD_LIBRARY_PATH

~/.setenv.sh:
QTEDIR=/usr/local/Trolltech/QtEmbedded-4.7.0-arm
PATH=/usr/local/Trolltech/QtEmbedded-4.7.0-arm/bin:$PATH
LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib:$LD_LIBRARY_PATH

后面的步骤:

5、移植
将 PC 机上  /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib 中的库复制到2440的 /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib(对应目录复制)。

将 PC 机上  /usr/local/tslib 中的库复制到2440的 /usr/local 。

如果运行时还缺少其他的库,复制方法相同。

为支持触摸屏,开机自动设置环境变量,在2440的 /etc/profile中追加:
export LD_LIBRARY_PATH=/usr/local/lib:$QTDIR/lib:$LD_LIBRARY_PATH                                                 
export TSLIB_ROOT=/usr/local/lib    
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_FBDEVICE=/dev/fb0 
export TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=/usr/local/etc/ts.conf
export POINTERCAL_FILE=/etc/pointercal
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

注:可用$ cat /dev/input/event0 测试触摸屏

取消/usr/local/etc/ts.conf中的第一个注释:
# module_raw input (去掉#,并且该行顶格)

运行 /usr/local/bin/ts_calibrate 校正触摸屏。

6、程序编译: 以下编译方式,是把配置文件放到用户目录下,取了3个不同的名字,也可以把它们分别放到三个安装目录下,编译的时候进到目录里边运行。

使用:

我们在运行的时候分别运行对应的脚本即可,比如我们要用qt-x11:

cd /usr/local/Trolltech/Qt-4.7.0

source setenv.sh

然后就可以用qmake designer等工具了.


PC版:
$ make distclean
$ source ~/.setenv-qt-x11.sh
$ qmake
$ make

arm 版:
$ make distclean
$ source ~/.setenv-qt-arm.sh
$ qmake
$ make

===============================================================

应该说到这一步,就基本算是完了,接下来可以再pc机上开发我们的应用程序了。如果之后碰到什么问题,我会不断地往此处添加。

推荐几篇,我配环境时,觉得不错的文章:

http://blog.csdn.net/PenglueR/archive/2009/12/10/4981753.aspx

http://www.xici.net/#u13572321/d118122274.htm

http://hi.baidu.com/jesserei/blog/item/861c201e18b1cd04314e1500.html

================================================================

最 后说一下源的问题,好的源速度快,不仅可以帮我们加快下载速度,节约下载软件包的时间,而且包含的软件包也多,许多情况下,一个软件包安装不上,主要原因 是源选的不好,比如在安装gcc-3.4的时候,如果没有合适的源,可能一直都找不到该软件包,又比如安装w32codecs的时候,更是对源非常挑剔, 因为一般的源都不支持它;常用的源又主服务器源,中国服务器源,北京交大的源,我用它的自带测速工具测出来163的源是最快的,但最快不一定最全,而且, 注意,最好勾选上所有的源选项,以免带来不必要的麻烦。

为了获得比较快的更新速度,我们可以增加一些台湾的源,同时更   新一下g++编译器和x11库(所谓x11就是指 x window),恩这句话是网上的朋友说的,我也觉得台湾的源不错

如有问题,可加Q群:292303980

分享到:
评论
3 楼 builder_lee 2010-12-21  
您好,我执行到“./demo-arm.sh”以后并没有出现“done”而是报错,主要错误信息如下:“
You set both LINUX_DIR and LINUX_SANITIZED_HEADER_DIR - ignoring LINUX_DIR for the build
DEJAGNU not set, so not running any regression tests
GCC_EXTRA_CONFIG not set, so not passing any extra options to gcc's configure script
GLIBC_ADDON_OPTIONS not set, so building all glibc add-on's
+ TOOLCOMBO=gcc-4.1.1-glibc-2.3.2
+ pwd
+ BUILD_DIR=/root/downloads/crosstool-0.43/build/arm-unknown-linux-gnu/gcc-4.1.1-glibc-2.3.2
+ pwd
+ TOP_DIR=/root/downloads/crosstool-0.43
+ test -z
+ SRC_DIR=/root/downloads/crosstool-0.43/build/arm-unknown-linux-gnu/gcc-4.1.1-glibc-2.3.2
+ echo SRC_DIR not set, so source tarballs will be unpacked in the build directory
SRC_DIR not set, so source tarballs will be unpacked in the build directory
+ abort Don't run all.sh or crosstool.sh as root, it's dangerous
+ echo Don't run all.sh or crosstool.sh as root, it's dangerous
Don't run all.sh or crosstool.sh as root, it's dangerous
+ exec false”请问是什么原因。
另外您方便留QQ或者MSN等联系方式吗?公司项目很紧,希望能给与一些指导,谢谢。
2 楼 signsmile 2010-11-02  
悲剧了,编译arm的时候一直出现
Creating qmake. Please wait...
make: Nothing to be done for `first'.
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
/opt/arm/bin/qmake: 1: Syntax error: word unexpected (expecting ")")
The tslib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR and QMAKE_LIBDIR in
/opt/arm/mkspecs/qws/linux-arm-g++.

查了好多资料都么解决
1 楼 signsmile 2010-11-02  
不止一周了,看到这贴子看到了点希望,昨晚试了一下,pc跟x86的都成功了,arm的 tslib1.4 还没有装好,今天再试试,谢谢了  哈

相关推荐

Global site tag (gtag.js) - Google Analytics