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

9200的QT开发环境的建立

2007-09-04 09:25 393 查看
做Liunx下的开发,起步是最难的;开源的好处是不花钱,可是天下没有免费的午餐,不花钱就不能责怪人家写的代码混乱,版本参差不齐,N多BUG…而这些都实际上增加了开发的难度。所以开发之前,安装一个可靠好用的开发环境是相当重要的。安装工具包时经常有这样的感受,按照网上的步骤一步步做下来,结果突然进行到某一个地方就挂在那里了!然后就想杀人!这两天一直埋头于QT,前几天编写了一个小DEMO,在linux下编译通过了然后想让它在9200上运行,unforturnately我的9200上的QT/Embedded版本只有2.3.7而RH上的QT-Designer的版本是3.1.0,如果编译9200的QT程序的话需要QT/Embedded向下兼容QT-Designer。更加unforturnate的是我安装的RH有KDE环境,所以还不能直接卸载QT。一气之下,今天花费了一天时间重装linux,去掉KDE环境和自带QT,然后在网上baidu了好久好久,终于建立起QT开发环境,好不开心!
首先安装编译器 crosschain
我用的是优龙提供的工具链cross-3.3.2.tar.bz2,这个好象在sumsung的网站上也有的下,好象和2440、2410等用的是一样代码包,用来编译linux2.6的内核,不知道我的推断对不对。
在linux系统的/usr/local/下建立arm文件夹,将工具包解压到此:
tar jxvf cross-3.3.2.tar.bz2
编辑/etc/bashrc文件,在最后加上一行export PATH=/usr/local/arm/3.3.2/bin:$PATH
至此arm-linux编译工具安装完成,已经可以编译9200下用的linux2.6内核了!

搭建Qt/Embedded 平台
需要以下几步:
1、在上位机安装tmake-1.11,qt-X11-2.3.2,qt-embedded-2.3.7(for host)
2、在上位机安装qt-embedded-2.3.7(for target)
3、在下位机安装qtopia

首先解压代码包:
tar xfz tmake-1.11.tar.gz
tar xfz qt-x11-2.3.2.tar.gz
tar xfz qt-embedded-2.3.7-free.tar.gz
最后这个包解压两次,两个文件夹分别命名qt-2.3.7-host和qt-2.3.7-target
在安装之前设置一下目录路径:
export TMAKEDIR=$PWD/tmake-1.11
export QT2DIR=$PWD/qt-2.3.2
export QTEDIR=$PWD/qt-2.3.7-host

安装tmake-1.1其实是设置编译器tmake的路径
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export PATH=$TMAKEDIR/bin:$PATH

安装Qt/X11 2.3.2
cd qt-2.3.2
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
make clean
./configure -no-xft
make
mkdir $QTEDIR/bin
cp bin/uic $QTEDIR/bin/
cd ..
需要指出的是:和YL9200的说明不同的是,configure的时候必须加上参数-no-xft,否则报错缺少freestyle.h等头文件,加这个参数表示不编译xft字体库
这样就可以使用uic来生成界面的cpp文件了。
然后还要编译一个qvfb工具,用来生成Virtual framebuffer,这是一个非常有用的工具,它可以模拟在开发板上的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开发板上运行。这个工具在qt-2.3.2中,不过我们得要给它编译出来:
cd $QTEDIR/tools/qvfb
make clean
tmake -o Makefile qvfb.pro
make
mv qvfb $QTEDIR/bin/

安装Qt/Embedded 2.3.7
tar xfz qt-embedded-2.3.7.tar.gz
cd qt-2.3.7
export QTDIR=$ QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure –qconfig local–qvfb -depths 4,8,16,32
make sub-src
cd ..

–qconfig local这个参数是说明编译时用自带的一个配置文件qconfig-local,需要先将其copy到qt-2.3.7/src/tools/下,或者configure时用这句也成:./configure -no-xft -qvfb -depths 4,8,16,32

这个配置文件是YL9200光盘自带的,如果没有也很简单,就如下一小段而已:

/**********************************************************************
** qconfig-local
**********************************************************************/
#ifndef QT_H
#endif // QT_H
// Note that disabling more features will produce a libqte that is not
// compatible with other libqte builds.
#ifndef QT_DLL
#define QT_DLL // Internal
#endif

#define QT_QWS_IPAQ
// Platforms where mouse cursor is never required.
#if defined(QT_QWS_IPAQ) || defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_SL5XXX)
# define QT_NO_QWS_CURSOR
# define QT_NO_QWS_MOUSE_AUTO
#endif

如果上面各步都能够成功的编译通过,下面就可以通过运行Qt/Embedded 自带的demo 来查看运行结果。
在Virtual framebuffer 上运行:
export QTDIR=$QTEDIR
export PATH=$QTEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/examples/launcher
qvfb -width 640 -height 480 &
sleep 10
./launcher –qws
以上是使QT在上位机编译的工具,要使QT开发的界面能在9200上跑,我们还需要再编译一次Qt/Embedded 2.3.7(for target),这也就是为什么qt-embedded-2.3.7-free.tar.gz要解压两次了。
交叉编译平台:安装qt-2.3.7-target
export QT2DIR=$PWD/qt-2.3.2
export QTEDIR=$PWD/qt-2.3.7-target
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
make clean
./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
make
这步完成后,我们会在/$QTEDIR/lib/目录下面看到libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.7 这四个文件,我们可以使用file 命令来查看这个库文件是否是我们需要的在开发板上跑的库。
file libqte.so.2.3.7
libqte.so.2.3.7: ELF 32-bit LSB shared object, ARM, version 1 (ARM), stripped
我在最后一步make的时候,最后的examples里面的代码没有编译通过,但是libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.7 这四个文件已经生成了,人家的demo写的不好不管它,反正我也编译成功了!
有了这个库以后我们把它拷贝到我们的开发板中相应的库目录下面:/usr/lib
直接用GFTP呗,这有何难!一试问题又出现,在cramfs文件系统中/usr/lib是只读的文件夹,事实上文件系统里只有/var文件夹是可写的,所以直接烧进去呢是行不通滴,咱们得曲线救国-重新编译根文件系统!……Oh, My God! 这就像回我家那小山城的铁路一样,眼看着城门口的山头就在几里之外,铁路却要缠绵蜿蜒几小时~~

2、烧写根文件系统

先找到原来的根文件系统myroot.cramfs,将其拷贝到任意目录下,在在该目录下建立两个文件:比如chang 和guo,(这个是人家光盘提供的名字,我想了很久也没想通为什么叫这么土的名字)
将myroot.cramfs 挂接到chang 目录
mount myroot.cramfs chang -o loop
进入chang目录并将chang 目录下的内容压缩
tar -cvf /chang 的上一级目录的绝对路径/1.tar ./
这样将在chang 的上一级目录产生一个1.tar 的包,将包解压到guo 目录下,再卸载挂接
umount chang
然后将1.tar拷到guo目录下再将打包的根文件系统的里的内容解压
经过上面的步骤就可以将自己的驱动和应用程序添加到cramfs 根文件系统中了
这里我将上面编译出来的libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.7 四个文件添加到/usr/lib,再制作cramfs 根文件系统:
先将mkcramfs 文件拷贝到guo 所在的目录,在这个目录下运行命令:
mkcramfs guo myroot1.cramfs
OK!编译成功!下来再将它烧写到flash中替换掉原来的根文件系统

进入BIOS后用netload 命令启动TFTP 来传输根文件系统,然后用tftp将文件上传:
用批处理命令写是这样的:
tftp -i 192.168.0.100 put myroot1.cramfs
接着,用命令nfprog 将根文件系统烧写到NANDFLASH分区,选择分区4,烧写完就可以启动linux了
先用setbp命令设置内核传递参数:
root=/dev/mtdblock7 load_ramdisk=0 console=ttyS0,115200 mem=64m devfs=mount
然后用senv保存设置。然后运行mrun就可以跑linux 了。也可以用命令bootkey 1 1 来设置linux的自启动,当然之后要记得senv

3、编译运行QT程序

终于等到激动人心的这一刻可以看看俺可爱的QT小界面了。不过现实总是无数次地打击我们的热情,教育我们冷静+忍耐。这不,还需要使用qt-embedded-2.3.7-target的工具重新编译一边。在此之前还得先修改tmake 配置文件tmake-1.1.1/lib/qws/linux-arm-g++/tmake.conf:
将其中“TMAKE_LINK= arm-linux-gcc”
“TMAKE_LINK_SHLIB= arm-linux-gcc”
修改为:“TMAKE_LINK= arm-linux-g++”
“TMAKE_LINK_SHLIB= arm-linux-g++”
然后设置编译器路径编译,比如编译/examples/progressbar下的工程:
export TMAKEPATH= $TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
tmake –o makefile progressbar.pro
make
如果没出现错误的话就可以在当前目录下找到progressbar这个可执行文件,它就是在我们将要在开发板上运行的文件。至此上位机的工作结束,只要配置好下位机就可以运行了。

下位机的安装实质上是将需要拷贝到开发板上的文件整理到一个单独的文件夹里面,然后通过上面介绍的mkcramfs制作根文件系统,包括库文件,qt-x11-2.3.2,qt-embedded-2.3.2,QTOPIA。今天偷个懒,因为开发板上的程序在板子到手时已经安装好了,就先将就现成的吧^_^ 用ftp将原先编译好的progressbar 执行文件下载到9200上,执行!大功告成,界面出现!

后记:这就是耗费了我整整一天的QT安装之旅,本人比较没天分搞东西不是这里出错就是那里出错。今天一天能搞出来已经算相当顺利了。为了防止下次再出错所以把过程整理成文,也供广大朋友参考指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: