Chinaunix首页 | 论坛 | 博客
  • 博客访问: 948821
  • 博文数量: 214
  • 博客积分: 10173
  • 博客等级: 上将
  • 技术积分: 1867
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-18 13:48
文章分类

全部博文(214)

文章存档

2012年(1)

2010年(13)

2009年(5)

2008年(98)

2007年(97)

分类: LINUX

2007-12-03 13:46:39

Liunx下的开发,起步是最难的;开源的好处是不花钱,可是天下没有免费的午餐,不花钱就不能责怪人家写的代码混乱,版本参差不齐,NBUG…而这些都实际上增加了开发的难度。所以开发之前,安装一个可靠好用的开发环境是相当重要的。安装工具包时经常有这样的感受,按照网上的步骤一步步做下来,结果突然进行到某一个地方就挂在那里了!然后就想杀人!这两天一直埋头于QT,前几天编写了一个小DEMO,在linux下编译通过了然后想让它在9200上运行,unforturnately我的9200上的QT/Embedded版本只有2.3.7RH上的QT-Designer的版本是3.1.0,如果编译9200QT程序的话需要QT/Embedded向下兼容QT-Designer。更加unforturnate的是我安装的RHKDE环境,所以还不能直接卸载QT。一气之下,今天花费了一天时间重装linux,去掉KDE环境和自带QT,然后在网上baidu了好久好久,终于建立起QT开发环境,好不开心!

首先安装编译器 crosschain

我用的是优龙提供的工具链cross-3.3.2.tar.bz2,这个好象在sumsung的网站上也有的下,好象和24402410等用的是一样代码包,用来编译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.11qt-X11-2.3.2qt-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-hostqt-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,需要先将其copyqt-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.2qt-embedded-2.3.2QTOPIA。今天偷个懒,因为开发板上的程序在板子到手时已经安装好了,就先将就现成的吧^_^ ftp将原先编译好的progressbar 执行文件下载到9200上,执行!大功告成,界面出现!

 

后记:这就是耗费了我整整一天的QT安装之旅,本人比较没天分搞东西不是这里出错就是那里出错。今天一天能搞出来已经算相当顺利了。为了防止下次再出错所以把过程整理成文,也供广大朋友参考指正。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1771210

阅读(1367) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~