您的位置:首页 > 编程语言 > Qt开发

Qtopia-core-opensource-4.2.2安装及Hello world移植到AT91SAM9261EK

2009-06-12 17:08 435 查看
Qtopia-core-opensource-4.2.2安装及Hello world移植到AT91SAM9261EK

硬件环境


Ubuntu 8.04

AT91SAM9261EK开发板

准备工作:

1、Qtopia-core-opensource-4.2.2.tar.gz

2、crosstool(arm-none-linux-gnueabi-交叉编译器)

3、编译好的内核linux 2.6.24必须包含frambuffer设备支持

一、QT4版本安装



如果你只是在linux下用下文提到的Qtopia-core-opensource-4.2.2编译你的For
Arm的程序,那么这一部可以省略,我个人认为这一步是有必要的。因为安装了QT4后,写好的程序可以在主机上编译、运行看运行的效果,不用每次都下载到
开发板上。而且安装也比较简单。

在终端下运行命令:sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer

注意:在这个版本的软件包中,qt4-dev-tools 包含了Qt Assistant及Qt
Linguist等工具,因此不需要单独安装这两个工具。其它的,qt4-doc
是帮助文档,包含了Qt中各个类库的详细说明以及丰富的例子程序,可以使用Qt Assistant 工具来打开阅读。qt4-qtconfig
是配置Qt环境的一个对话框,一般默认就行了,很少有必要去更改。qt4-demos
包含很多可以运行起来的可执行文件以及源代码。qt4-designer是用来设计GUI界面的设计器。

二 、安装Qtopia-core-opensource-arm

下载Qtopia Core 4的源代码,建议到
www.qtopia.org.cn

下载, qtopia-core-opensource-src-4.2.2.tar.gz,解压

# tar zxvf qtopia-core-opensource-src-4.2.2.tar.gz

# cd qtopia-core-opensource-src-4.2.2

(重要的一步)修改mkspecs/qws/linux-arm-g++下的qmake.conf文件,把文件里面的编译器指定为arm-none-linux-gnueabi

用arm-none-linux-gnueabi-gcc和arm-none-linux-gnueabi-g++替代以下的arm-linux-gcc和arm-linux-g++

QMAKE_CC = arm-linux-gcc

QMAKE_CXX = arm-linux-g++

QMAKE_LINK = arm-linux-g++

QMAKE_LINK_SHLIB = arm-linux-g++

#./configure -no-largefile
-no-qt3support -nomake tools -make examples -silent -xplatform
qws/linux-arm-g++ -embedded arm -depths 16,18,24,32 -qt-kbd-tty
-qt-kbd-usb -system-libjpeg -qt-gfx-transformed -confirm-license

#make (时间很长,要有心里准备)

#make install

注:上面./configure的参数中-system-libjpeg需要libjpeg库,必须在安装前先安装libjpeg库。否则会报错。

为了使QT4.4的qmake和QtopiaCore-4.2.2-arm的qmake区别,我把QtopiaCore-4.2.2-arm中的bin目
录下的qmake和ui等的文件名的首字母都改成了大写,也就是:Qmake,Ui等。然后修改/.bashrc修改PATH变量。具体步骤如下:

#cd /usr/local/Trolltech# cd QtopiaCore-4.2.2-arm/bin/

#mv qmake Qmake //其他3个文件使用同样的操作,这里就不多说了

#vim /.bashrc

在最后一行加入

export PATH=$PATH:/usr/local/Trolltech/QtopiaCore-4.2.2-arm/bin

保存退出

到此Qtopia-core-opensource-arm已经安装成功。

三、hello world的移植

使用的程序是Qtopia-core-opensource-arm的例程。位于/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1/目录下的main.cpp

我们可以先用QT4编译后运行看效果。

#/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1/qmake -project

#/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1/qmake

#/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1/make

#/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1/./t1

然后我们把t1目录下编译生成的文件删除,只留下main.cpp

#/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1/Qmake -project

#/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1/Qmake

这样我们就生成了ARM板上可以运行的hello world程序了。

将生成的ARM可执行文件t1拷贝到ARM的文件系统中

#/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1/cp t1 /home/nfsboot/

接下来我们将hello world运行需要的库复制到nfs目录下的lib文件夹内

#/usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib/cp *so* /home/nfsboot/lib/

创建字体库,用于显示文字。

将usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib/fonts/目录下的fontsdir以及以f开头的库
拷贝到/home/nfsboot/usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib/fonts/目录下。
QT程序执行的时候默认是从该文件查找字体库。用命令:

#/usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib/fonts/cp f* /home/nfsboot/usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib/fonts/

在ARM的终端下执行程序./t1 -qws &

每个人的文件系统可能不同,不能保证一定可以运行,下面是我移植hello world遇到的一些问题及解决办法。

运行./t1 -qws报错记录

1

./t1: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory


决办法:将/usr/local/arm/arm-2008q1/arm-none-linux-gnueabi/libc/armv4t/usr
/lib(交叉编译器目录)目录下的libstdc++.so.6 及相关的库拷贝到
/home/nfsboot/lib/(nfs文件系统目录)目录下。

2、

./t1: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory

解决办法:将/usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib目录下的libQtGui.so.4文件及相关文件拷贝到/home/nfsboot/lib/

3、

./t1: error while loading shared libraries: libQtNetwork.so.4: cannot open shared object file: No such file or directory

与上面相同

4、

Cannot create Qtopia Core data directory: /tmp/qtembedded-0

原因:用户权限不够,把tmp目录chmod 777 tmp之后得到解决

5、

Qtopia Core data directory is not owned by user 0

原因:还是权限不够,把/etc目录下的几个初始化文件去掉之后不在报错。经过多次实验发现主要问题是因为/etc目录下的rc.S和fstab文件中的内容必须配置好。下面我将我的这两个文件内容贴出:

rc.S文件

#!/bin/ash

export PATH=/bin/:/sbin/:/usr/sbin/

echo "****rc.S run*****"

# automount (/etc/fstab)

mount -a

echo "mount -a run"

# remount root

echo "mount -o remount rw run"

mount -o remount rw /

fstab文件

/dev/ram0 / ext2 defaults 1 1

none /proc proc defaults 0 0

/dev/ram1 /tmp ramfs defaults 0 0

/dev/ram2 /var ramfs defaults 0 0

6、

Can't open framebuffer device /dev/fb0

…………

Can't open framebuffer device /dev/fb0

原因:没有挂载fb0,没有fb0设备,在/home/nfsboot/dev/目录下mknod fb0 c 29 0

7、

QFontDatabase: Cannot find font
definition file
/usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib/fonts/fontdir - is Qt
installed correctly?

原因:字体文件找不到

解决:将主机上的fontdir拷贝到文件系统的/usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib/fonts/下。再将一些字库拷贝到目录下即可。

8、

经过多次实验对比发现,QTopia中英文字库比较合适的是QTopia目录下/lib/fonts/f*(f*代表以f开头的字库)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: