主题 : Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440(一) 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 13658
精华: 2
发帖: 59
金钱: 400 两
威望: 80 点
贡献值: 2 点
综合积分: 158 分
注册时间: 2010-01-27
最后登录: 2022-01-21
楼主  发表于: 2010-03-15 00:43

 Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440(一)

管理提醒: 本帖被 kasim 执行置顶操作(2010-04-11)
Fedora12下搭建Qt CreatorARM开发环境 移植Qt4.6.2Micro2440(一)

参考:

环境:虚拟机Fedora12(建议安装Vmware Tools,详细安装方法参照Vmware帮助文档),USB串口,minicom终端。(minicom经常打不开ttyUSB0设备,我的解决方法是,打不开时就将USB串口移除,运行minicom,然后再接上USB串口,此时运行minicom一般都能打开设备)

软件准备:
http://qt.nokia.com/downloads-cn下载最新版的软件包,当前是:

用于 Linux/X11 32 Qt Creator 1.3.1 二进制软件包qt-creator-linux-x86-opensource-1.3.1.binhttp://qt.nokia.com/downloads/qt-creator-binary-for-linux-x11-32-bit

用于嵌入式 Linux Qt 4.6.2qt-everywhere-opensource-src-4.6.2.tar.gzhttp://qt.nokia.com/downloads/embedded-linux-cpp

http://hi.baidu.com/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html下载arm920t-eabi.tgz(即arm-linux-gcc-4.1.2)(http://qtextended.org/downloads/toolchains/arm920t-eabi.tgz

http://www.arm9.net/download.asp下载Root_Qtopia,我用的是友善光盘里的root_qtopia-20100108.tar.gzhttp://www.arm123.com.cn/linux/root_qtopia-20100108.tar.gz

下载tslib1.4,这个忘了在哪下载的了,网上有很多,有些不能用,大家自己找个能用的吧。


qt-everywhere-opensource-src-4.6.2.tar.gz 压缩包解压为3份,分别编译 PC ,嵌入式 x86 arm 三个版本。

我在root目录下建立tmp文件夹,将qt-everywhere-opensource-src-4.6.2.tar.gz直接解压后复制2分,分别命名为pcx86arm


1. 编译 PC 版:
进入pc目录
#./configure
# gmake
# gmake install
安装过程比较长,没有碰到过错误。

2. 编译嵌入式x86版:
进入x86目录
# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
# gmake
# gmake install
安装过程比较长,没有碰到过错误。

编译安装PC版中的 qvfb
进入pc/tools/qvfb/目录
#make
编译完毕,将pc/bin目录下的qvfb文件复制到/usr/local/Trolltech/QtEmbedded-4.6.2/bin目录。

3. 编译嵌入式arm版(需要 arm-linux-gcc 的支持):
使用友善自带的ARM-Linux GCC 4.3.2编译完了,程序移植到开发板上后,出现Segmentation Fault错误,按原文,使用4.1.2正常。

直接将arm920t-eabi.tgz解压缩到根目录,不可以像文章中说的那样“我把它放在:/usr/local/arm/4.1.2/ ”,最起码我放过去后出错了。
把编译器路径加入系统环境变量,运行命令:
#gedit /root/.bashrc
编辑/root/.bashrc文件,在最后一行加上 export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH


编译tslib对触摸屏支持:
下载,tslib1.4.tar.gz,解压后:
# ./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
# make
# make install
我下载的包解压后没有configure文件,需要运行autogen.sh后才能生成。

设置环境变量,以便编译时找到相关的库:
# export CPLUS_INCLUDE_PATH=/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++:/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/c++/arm-none-linux-gnueabi
# export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH

修改qt-everywhere-opensource-src-4.6.2/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加lts参数):
QMAKE_CC                = arm-linux-gcc -lts
QMAKE_CXX               = arm-linux-g++ -lts
QMAKE_LINK              = arm-linux-g++ -lts
QMAKE_LINK_SHLIB        = arm-linux-g++ -lts
这一步必须有,不然肯定出错。

配置:
必须加上“-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-arm ”参数, 不然安装后不在QtEmbedded-4.6.2-arm文件夹下,而是覆盖了QtEmbedded-4.6.2
# ./configure \
-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-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/include -L/usr/local/tslib/lib

上面划掉的蓝色内容,可以不要的,这样编辑也不会出错(虚拟机搞坏了,不得已重装,配置参数时忘了干上面的工作了,结果发现没出错)。

关于配置参数,参照一下这篇文章吧,可以用configure -embedded –help查看。

http://www.cuteqt.com/blog/?p=582

如果你放弃配置,则使用命令:# gmake confclean

编译:# gmake

安装:# gmake install

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

4、移植
我是通过NFS启动的系统,具体操作可以参照友善的手册,在http://www.arm9.net/download.asp有下载,在第5.5.3节通过NFS启动系统。

Fedora12  /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib 中的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib目录中(对应目录复制,相当于复制到了开发板对应目录中),其实需要的时候可以裁剪,看原文吧。

Fedora12  /usr/local/tslib 中的库复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local中。即将/usr/local/tslib下的所有文件复制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local文件夹下。

如果运行时还缺少其他的库,复制方法相同。也可以使用arm-angstrom-linux-gnueabi-readelf -a 程序名 | grep "Share",命令查看需要哪些共享库,一起复制过去。

为支持触摸屏,开机自动设置环境变量,在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

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

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

到此Qt4.6.2的移植暂告一段落,移植还没有完,此时如果在开发板上运行Qt4.6.2-arm编译的程序,则会出现“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”错误。

今天晚了,明天继续奉上……
tslib-1.4.part1.rar (900 K) 下载次数:1218 tslib-1.4.part2.rar (223 K) 下载次数:1042
[ 此帖被ppacctv在2010-03-26 21:33重新编辑 ]
级别: 新手上路
UID: 12882
精华: 0
发帖: 42
金钱: 210 两
威望: 42 点
贡献值: 0 点
综合积分: 84 分
注册时间: 2010-01-15
最后登录: 2010-11-04
1楼  发表于: 2010-03-15 12:42
我也遇到了
relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”错误。
请问楼主如何解决?
Eddy Lau (Sun Boy)
级别: 圣骑士
UID: 11202
精华: 1
发帖: 364
金钱: 1885 两
威望: 380 点
贡献值: 1 点
综合积分: 748 分
注册时间: 2009-11-30
最后登录: 2010-04-12
2楼  发表于: 2010-03-15 13:44
引用第1楼davidchan于2010-03-15 12:42发表的  :
我也遇到了
relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”错误。
请问楼主如何解决?

davidchan兄不是已经成功移植了Qt Embedded 4.5 ARM吗?
为何那么快又急于移植4.6.2呢?

兄台曾经说过: "移植只是达到目标的过程之一。如何快速、准确地开发程序才是我们要想的."
原来各下想要的只不过是最新版的Qt而已!

市场上永远也会有最新的版本存在, 永远的追逐, 只会永远停留在这个層次上,不能自跋.

其实小弟并不是要反对井行移植的事情,只是认为不应该停留在这个層次上.
移植过后,便应认真地进行应用程序的开发,把系统的功能充分发挥出来.
这样,移植的成果将会变得更有意义.
為什麼生世間上 此間許多哀與傷 為什麼爭鬥不絕 歡欣不永享 
問為何人存隔膜 顏面無真相 問那天可找得到 理想中的烏托幫 
级别: 骑士
UID: 14324
精华: 0
发帖: 160
金钱: 810 两
威望: 162 点
贡献值: 0 点
综合积分: 320 分
注册时间: 2010-02-06
最后登录: 2015-06-02
3楼  发表于: 2010-03-15 23:21
我赞同eddylau版主的说法
级别: 侠客
UID: 13658
精华: 2
发帖: 59
金钱: 400 两
威望: 80 点
贡献值: 2 点
综合积分: 158 分
注册时间: 2010-01-27
最后登录: 2022-01-21
4楼  发表于: 2010-03-16 00:03

 回 1楼(davidchan) 的帖子

我的解决办法是进入主机/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目录下找到libstdc++.so.6链接的文件libstdc++.so.6.0.8(通过右键属性——〉基本,可以看到链接的文件),复制并重命名为libstdc++.so.6到/opt/FriendlyARM/mini2440/root_qtopia/lib文件夹下,之前别忘了将该文件夹下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。
级别: 新手上路
UID: 12882
精华: 0
发帖: 42
金钱: 210 两
威望: 42 点
贡献值: 0 点
综合积分: 84 分
注册时间: 2010-01-15
最后登录: 2010-11-04
5楼  发表于: 2010-03-16 08:37
因为Qt4.6提供了一些新的api,我需要用于开发商业软件,就像ipohoe类似的界面
级别: 新手上路
UID: 12882
精华: 0
发帖: 42
金钱: 210 两
威望: 42 点
贡献值: 0 点
综合积分: 84 分
注册时间: 2010-01-15
最后登录: 2010-11-04
6楼  发表于: 2010-03-16 08:49
大多数客户不精通技术,如果几个功能类似的产品,他们肯定会选择界面花俏的软件。这也是window取代dos的原因。
级别: 新手上路
UID: 16174
精华: 0
发帖: 43
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 86 分
注册时间: 2010-03-14
最后登录: 2012-12-16
7楼  发表于: 2010-03-24 20:14
顶!!!
级别: 新手上路
UID: 13730
精华: 0
发帖: 16
金钱: 80 两
威望: 16 点
贡献值: 0 点
综合积分: 32 分
注册时间: 2010-01-28
最后登录: 2012-08-16
8楼  发表于: 2010-04-07 15:37

 回 4楼(ppacctv) 的帖子

非常感谢,看到你的帖子,我的第一个运行于开发板上的QT程序终于看到了,
我还有一个问题,想咨询您一下,我运行的那个程序是QT自带的时钟demo,我看到时钟在我的开发板上正常运行,可以走时间,但是为什么我的鼠标和触摸屏都不好用呢?大概会是什么原因,望指点,好开心呀,忙了半个月,终于见到一点点成果啦,再次感谢
级别: 侠客
UID: 13658
精华: 2
发帖: 59
金钱: 400 两
威望: 80 点
贡献值: 2 点
综合积分: 158 分
注册时间: 2010-01-27
最后登录: 2022-01-21
9楼  发表于: 2010-04-11 20:51

 回 8楼(rsd102) 的帖子

是不能用呢还是不好用呢?