qtopia-2.2.0移植到ARM开发板上

    一、开发Qtopia的所需的工具

    整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供

    了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。

    在构建GUI时用于Qt开发的典型工具如下:

    tmake:跨平台的Makefile生成器。

    moc:用于Qt C++扩展的metra-object编译器。

    uic:uic是for x86的文件,从XML文件生成代码的用户界面编译器。即uic用来把.ui文件转换成.h和.cpp文件。

    designer:用于设计窗口组建的应用程序。

    Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所

    需的软件包如下:

    qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序 。

    qpe(Qtopia executable):是Trolltech公司所推出的针对PDA软件的整体解决方案,包含了从底层的GUI系统、

    Window Manager、Soft Keyboard到上层的PIM、浏览器、多媒体等方面,用来处理所有的用户程序界面。

    二、交叉编译qtopia的过程

    1、编译qtopia的准备工作

    1.1、所需的软件压缩包:

    cross-2.95.3.tar.bz2,

    e2fsprogs-1.39.tar.gz.tar.gz,

    jpegsrc.v6b.tar.gz,

    libpng-1.2.18.tar.bz2,

    zlib-1.2.3.tar.bz2,

    qtopia-free-src-2.2.0.tar.gz

    1.2、建立所需目录

    /---usr ---/local/arm

    /---root---/yizhi

    . . . /armlib

    . . . /arminclude

    . . . /qtopia-free-2.2.0

    . . . /libpng-1.2.18

    . . . /zlib-1.2.3

    . . . /e2fsprogs-1.39

    . . . /jpeg-6b

    . . . /qt-2.3.10

    . . . /host/qtopia-free-2.2.0

    1.3、各个目录的功能作用:

    arm:存放PC机上交叉编译的工具

    yizhi:下载的软件包全部存放到这里

    armlib:编译软件得到qtopia所需要的库文件全部放在这里

    arminclude:编译软件得到qtopia所需要的头文件全部放在这里

    qtopia-free-2.2.0:qtopia的源代码

    jpeg-6b:一个jpeg图形编码解码程序库

    libpng-1.2.18:一个png图形编码解码程序库

    zlib-1.2.3:一个压缩解压程序库

    e2fsprogs-1.39:可以提供uuid支持

    qt-2.3.10:qt-embeddedd的文件夹路径

    host/qtopia-free-2.2.0:qtopia的源代码

    2、编译QTOPIA所依赖的库文件

    2.1、安装交叉编译工具

    将cross-2.95.3.tar.bz2放到/usr/local/arm文件夹下解压,

    # tar –zxvf cross-2.95.3.tar.bz2

    这个命令会在你的/usr/local/arm/2.95.3目录下安装 arm-linux-gcc 交叉编译程序,然后在PATH变量中添加一项

    :

    export PATH=/usr/local/arm/2.95.3/bin:$PATH

    测试

    # arm-linux-gcc -v

    2.2、得到本机运行的uic工具

    qtopia-2.2.0版本里面集成了qt\tmake\qtopia。

    编译Qt/X11的唯一目的就是为编译QTE提供uic(用户接口编译器)以及基于X Windows系统的FrameBuffer设备模拟

    器qvfb。

    解压qtopia-free-src-2.2.0.tar.gz,将qtopia-free-2.2.0复制到 /root/yizhi/host

    # cd /root/host/qtopia-free-2.2.0

    要生成Makefile

    # ./configure

    # make

    解压qtopia-free-src-2.2.0.tar.gz 将其复制至 /root/yizhi/

    # cp /root/yizhi/host/qtopia-free-2.2.0/qt2/bin/uic /root/yizhi/qtopia-free-2.2.0/qt2/bin/

    2.3、编译e2fsprogs-1.39

    要得到qtopia 所需的二個文件,uuid.h 及 libuuid.so。

    # cd /root/yizhi/e2fsprogs-1.39

    设置环境变量

    # export PATH=/usr/local/arm/2.95.3/bin:$PATH

    # export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc

    # ./configure --enable-elf-shlibs --host=arm-linux

     --with-cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc

     --with-linker=/usr/local/arm/2.95.3/bin/arm-linux-ld

     --prefix=/usr/local/arm/2.95.3/arm-linux

    # make

    将e2fsprogs-1.39/lib/目录下uuid的文件夹复制到yizhi/arminclude下

    # cp -r /lib/uuid /root/yizhi/arminclude

    # cp lib/libuuid.so* /root/yizhi/armlib /

    2.4、交叉编译jpeg库

    解压jpegsrc.v6b.tar.gz到/root/yizhi

    # cd jpeg-6b

    设置环境变量

    # export QTDIR=/root/yizhi/qtopia-free-2.2.0/

    # export QTEDIR=/root/yizhi/qtopia-free-2.2.0/qtopia/

    # export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    # export PATH=/usr/local/arm/2.95.3/bin:$PATH

    # export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc

    # ./configure --enable-shared

    修改生成的Makefile文件

    prefix = /root/yizhi/qt-2.3.10

    CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc

    AR= /usr/local/arm/2.95.3/bin/arm-linux-ar rc

    AR2= /usr/local/arm/2.95.3/bin/arm-linux-ranlib

    保存

    # cp jconfig.doc jconfig.h

    在你的qt-embedded中建立man/man1文件夹,否则安装jpeg库时会出错

    # mkdir -p qt-2.3.10/man/man1

    最后

    # make

    # make install –lib

    报错,但是在/root/2410s/qt-2.3.10-arm/lib目录下生成了文件夹fonts和libjpeg.so*

    # cp jpeglib.h /root/yizhi/arminclude

    # cp lib/libjpeg.so* /yizhi/yizhi/armlib

    就可以给qt-embedded添加好for arm的libjpeg库放到交叉编译的Lib一份

    # cp lib/libuuid.so* /usr/local/arm/2.95.3/arm-linux/lib

    2.5、编译libpng库

    将libpng-1.2.18.tar.bz2解压到/root/yizhi目录下

    # cd /root/yizhi/libpng-1.2.18

    # cp scripts/makefile.linux ./Makefile

    注意,这里的makefile不是用./configure生成,而是直接从scripts/里拷一个

    # vi Makefile

    修改:

    [begin]

     ...

    AR_RC=/usr/local/arm/2.95.3/bin/arm-linux-ar rc

    CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc

    RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib

    prefix=/usr/local/arm/2.95.3/arm-linux

     ...

    [end]

    保存

    # make

    # cp libpng12.so* /root/yizhi/armlib

    # cp *.h /root/yizhi/arminclude

    2.6、编译zlib

    # cd /root/yizhi/zlib-1.2.3

    设置环境变量

    # export PATH=/usr/local/arm/2.95.3/bin:$PATH

    # export LD_LIBRARY_PATH= /usr/local/arm/2.95.3/arm-linux/lib:$LD_LIBRARY_PATH

    # export CC= /usr/local/arm/2.95.3/bin/arm-linux-gcc

    # ./configure –shared

    # vi Makefile

    修改:

    [begin]

    CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc

     ...

    LDSHARED=/usr/local/arm/2.95.3/bin/arm-linux-gcc -shared-Wl,-soname,libz.so.1

    CPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc -E

     ...

    AR=/usr/local/arm/2.95.3/bin/arm-linux-ar rc

    RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib

     ...

    prefix =/usr/local/arm/2.95.3/arm-linux

     ...

    [end]

    保存

    # make

    将编译生成的动态库及相关的头文件分别复制到armlib和arminclude目录下

    # cp libz.so* /root/yizhi/armlib

    # cp *.h /root/yizhi/arminclude

    3、交叉编译qtopia

    3.1、编译修改工作

    ①、vi /root/yizhi/qtopia-free-2.2.0/qtopia/mkspecs/qws

    /linux-arm-g++/qmake.conf

    将此行

    QMAKE_LIBS_QT = -lqte

    修改为

    QMAKE_LIBS_QT = -lqte -lpng -lz -luuid -ljpeg

    ②、 如果想让Qtopia支持鼠标,需要修改$QPEDIR/src/qt/qconfig-qpe.h文件

    注释如下部分

    /*

    #ifndef QT_NO_QWS_CURSOR

    #define QT_NO_QWS_CURSOR

    #endif

    #ifndef QT_NO_QWS_MOUSE_AUTO

    #define QT_NO_QWS_MOUSE_AUTO

    #endif

    #ifndef QT_NO_QWS_MOUSE_PC

    #define QT_NO_QWS_MOUSE_PC

    #endif

    */

    ③、# cp /root/yuzhi/qtopia-free-2.2.0/qtopia/src/qt/Qconfig-qpe.h

    /root/yizhi/qtopia-free-2.2.0/qt2/src/tools

    # cd $QPEDIR/src/libraries/qtopia

    # cp custom-linux-ipaq-g++.cpp custom-linux-arm-g++.cpp

    # cp custom-linux-ipaq-g++.h custom-linux-arm-g++.h

    ④、将/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../

    ../../arm-linux/sys-include/linux/videodev.h文件中的#include一行屏蔽

    3.2、设置环境变量,编译及安装

    ①设置编译qtopia的环境变量

    # export QTDIR=/root/yizhi/qtopia-free-2.2.0/qt2

    # export QPEDIR=/root/yizhi/qtopia-free-2.2.0/qtopia

    # export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH

    # export TMAKEDIR=/root/yizhi/qtopia-free-2.2.0/tmake

    # export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++

    # export PATH=/usr/local/arm/2.95.3/bin:$PATH

    ②创建交叉编译后的qtopia文件夹

    # mkdir /root/yizhi/qtopia

    ③生成Makefile文件(注释2)

    # ./configure -qte "-embedded -xplatform linux-arm-g++ -qconfig qpe -no-qvfb -depths 8,16,24,32

    -no-xft -system-jpeg -system-libpng -system-zlib -gif -thread –release -

    I/root/yizhi/arminclude -L/root/yizhi/armlib -lpng -lz –luuid -ljpeg" -qpe '-xplatform linux-

    arm-g++ -edition pda –displaysize 640x480 -I/root/yizhi/arminclude -L/root/yizhi/armlib -

    prefix=/root/yizhi/qtopia'

    ④编译qtopia

    # make

    ⑤安装qtopia的交叉编译环境

    # make install

    编译完成以后/root/yizhi后出现一个qtopia的目录,在/root/yizhi/qtopia/lib/目录下面看到libqte.so、

    libqte.so.2 libqte.so.2.3、libqte.so.2.3.12 这四个文件. 这是编译qte的库文件.

    将所有需要支持的库文件都放到新生成的qtopia/lib中

    # cp /root/yizhi/armlib/*.so* /root/yizhi/qtopia/lib

    4、将qtopia挂在到目标板上

    4.1、建立宿主机和开发板的通讯

    以/root/share 为共享文件夹,目标板可通过nfs来访问这个共享文件夹。

    将qtopia复制到共享文件夹/root/share/

    # cp -r /root/yizhi/qtopia /root/share/

    设置共享文件夹:

    ①、修改/etc/export指定/root/share文件夹为共享可访问的

    最后一行加上 /root/share 192.168.0.* (rw)

    ②、没有关闭防火墙

    4.2、启动nfs服务

    # service nfs restart (或nfs /etc/rc.d/init.d/nfs start)

    设置本机的ip 地址为192.168.0.105

    # ifconfig eth0 192.168.0.105 up

    4.3、测试qtopia是否正常运行

    配置串口的波特率为115200,启动目标板。

    # minicom

    # ifconfig -t nfs eth0 192.168.0.16 up

    检测目标板和PC机是否建立了连接

    #ping 192.168.0.105

    如果建立了连接,将文件复制到目标板上

    # mount 192.168.0.105:/root/share /mnt/ext2

    # cd /mnt/ext2/qtopia

    设置环境变量

    # export QTDIR=$PWD

    # export QPEDIR=$PWD

    # export LD_LIBRARY_PATH=$PWD/lib

    我的根文件系统为只读文件系统cramfs,下句是指定一个可读写的文件,作为环境变量HOME

    # export HOME=/etc/tmp

    帧缓冲设备板子上为/dev/fb/0,但程序默认为/dev/fb0,所以做了一个链,接/dev/fb0到/dev/fb/0

    # ln -s /dev/fb/0 /dev/fb0

    指定键盘和鼠标为输入设备

    # export QWS_KEYBOARD_PROTO="USB:/dev/input/event1"

    # export QWS_MOUSE_PROTO="USB:/dev/input/mouse0"

    在qtopia下可能没有pointercal文件可以自创一个其内容是1 0 1 0 1 1 65536

    # cp pointercal /etc

    # cp pointercal /etc/tmp

    运行PDA

    # cd bin

    # ./qpe

    出现 Tap anywhere on the screen to continue

    用鼠标点击一下桌面,就进入配置显示使用的语言和所在地区的时区,点击finish键,这样就可以在显示终端上看

    到qtopia桌面环境了。

你可能感兴趣的:(QT)