QT4.6.3在TQ2440上的移植

来源:互联网 发布:java web项目怎么运行 编辑:程序博客网 时间:2024/05/27 09:48

QT4.6.3TQ2440上的移植

1. 需要的工具和开发环境

交叉编译工具:arm-linux-gcc-4.4.3-20100728.tar.gz

Qt包:qt-everywhere-opensource-src-4.6.3.tar.gz

触摸屏程序包:tslib-1.4.tar.gz

开发环境:虚拟机ubuntu9.10

 

2. 安装交叉编译工具

Step1:将linux交叉编译工具包arm-linux-gcc-4.4.3-20100728.tar.gz 复制到宿主机的linux系统某个目录下,并cd进入该目录,然后解压安装,指令如下:

tar -zxvf arm-linux-gcc-4.4.3-20100728.tar.gz –C / 

注意:C 后面有个空格,并且C 是大写的。执行此指令后,将编译器安装到

/opt/FriendlyARM/toolschain/4.4.3目录中。

Step2:将交叉编译器路劲加入到系统环境变量中,运行命令

sudo gedit /root/.bashrc 编辑/root/.bashrc文件,在其最后面加入如下一行:

export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin 

保存/root/.bashrc文件并退出,然后重新登录系统即可完成配置。判断arm-linux安装是否成功,可在系统重新登陆后在终端输入arm-linux-gcc –v,若有出现对应的版本号信息,且为4.4.3,即说明安装成功。

 

3. 交叉编译触摸屏程序

#tar zxvf tslib-1.4.tar.gz  

#cd ./tslib  

#./autogen.sh 

#./configure --prefix=/usr/local/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes     

#make 

#make install 

这样以后可以看到/usr/local/tslib下有了库文件,移植时会用到。 

ps : host选项中malloc后面接着的是数字0,不是小写字母o

 

4. 编译Qt

解压软件 

#mkdir /opt/Qt-4.6.3-arm

#tar -xzvf qt-everywhere-opensource-src-4.6.3.tar.gz -C /opt/Qt-4.6.3-arm/

#cd  /opt/Qt-4.6.3-arm/

配置参数

# ./configure -prefix /usr/local/Trolltech/QtEmbedded-4.6.3-arm -opensource -confirm-license -release -shared -embedded arm -xplatform qws/linux-arm-g++  -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-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

有的参考资料中的参数中加入了-depths 16,18,24 我第一次也加了这个参数到板子上运行时出错 screen depth 32 not supported! 可以在这里加入参数32,或者-depths all 我是直接删除了这句。

配置出错The tslib functionality test failed!

You might need to modify the include and library search paths by editing
QMAKE_INCDIR and QMAKE_LIBDIR in
/home/ian/lib/qt-everywhere-opensource-src-4.7.0/mkspecs/qws/linux-arm-g++.

查看configure脚本

 for mouse in ${CFG_MOUSE_ON} ${CFG_MOUSE_PLUGIN}; do
    if [ "${mouse}" = "tslib" ] && [ "${CFG_CONFIGURE_EXIT_ON_ERROR}" = "yes" ]; then
        "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/tslib "tslib" $L_FLAGS $I_FLAGS $l_FLAGS
            if [ $? != "0" ]; then
               echo "The tslib functionality test failed!"
               echo " You might need to modify the include and library search paths by editing"
               echo " QMAKE_INCDIR and QMAKE_LIBDIR in"
               echo " ${XQMAKESPEC}."
        exit 1

找不到库和编译器都会报错

解决办法:打开Qt目录下mkspecs/qws/linux-arm-g++/qmake.conf文件,

添加下面两句:

QMAKE_LIBDIR=/usr/local/tslib/lib
QMAKE_INCDIR=/usr/local/tslib/include

修改下面的变量地址:

# modifications to g++.conf
QMAKE_CC     =/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc -lts
QMAKE_CXX   =/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-g++ -lts
QMAKE_LINK   = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-g++ -lts
QMAKE_LINK_SHLIB = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-g++ -lts

# modifications to linux.conf
QMAKE_AR    = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-ar cqs
QMAKE_OBJCOPY = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-objcopy
QMAKE_STRIP   = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-strip

重新配置成功。

#Make

#make install

5. 库的移植

Qt库编译好后,将会在目录/usr/local/Trolltech/QtEmbedded-4.6.3-arm下生成文件,将该目录下的lib目录复制到根文件系统的/usr/local/Trolltech/QtEmbedded-4.6.3-arm目录下。

tslib目录复制到根文件系统的根目录下。

# mkdir /usr/local/Trolltech/QtEmbedded-4.6.3-arm 

# mkdir /tslib 

修改 /tslib/etc/ts.conf1(去掉#号和第一个空格)

# module_raw input

改为:

module_raw input

配置用到的变量#vi /etc/profile/

在文件末尾加上下面的环境变量:

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.6.3-arm 

export T_ROOT=/tslib  

export PATH=$QTDIR/bin:$PATH  

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export QWS_MOUSE_PROTO=tslib:/dev/event0 

export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib 

#source  /etc/prifile使环境变量生效

Qt程序的编译和移植

测试程序,新建文件hello.cpp输入下面代码:

#include <qapplication> 

#include <qpushbutton> 

int main(int argc, char *argv[]) 

QApplication app(argc,argv); 

QPushButton b("Hello World !"); 

b.show(); 

QObject::connect(&b,SIGNAL(clicked()),&app,SLOT(quit())); 

return app.exec(); 

}

刚开始我的头文件写的是QApplicationQPushButton这两个,编译失败,换成小写就可以了,我先是用qmake编译生成的是pc平台的程序(我在pc也装了编译环境)修改了ARMqmake环境变量还是没用,后来我直接用绝对路径去编译,生成文件

使用qmake交叉编译程序

/usr/local/Trolltech/QtEmbedded-4.6.3-arm/bin/qmake -project

/usr/local/Trolltech/QtEmbedded-4.6.3-arm/bin/qmake

Make

生成执行程序复制到开发板

执行./hello -qws出错

./hello: /lib/libc.so.6: version `GLIBC_2.9' not found (required by 

/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so.4)

./hello: /lib/libc.so.6: version `GLIBC_2.9' not found (required by 

/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtCore.so.4)

缺少编译器库文件,将编译器的库文件复制到开发板的lib目录

Cp -rfd /opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib/*so*到板子的lib目录。重新执行./hello -qws,终于在TQ2440上可以执行了。

 

6. 开机运行程序

创建脚本run.sh输入:

#! /bin/sh 

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.6.3-arm 

export T_ROOT=/tslib 

export PATH=$QTDIR/bin:$PATH 

export TSLIB_CONSOLEDEVICE=none 

export TSLIB_FBDEVICE=/dev/fb0 

export TSLIB_TSDEVICE=/dev/input/event0 

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts 

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf 

export TSLIB_CALIBFILE=/etc/pointercal 

export QWS_MOUSE_PROTO=tslib:/dev/input/event0 

export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib 

export QWS_KEYBOARD=TTY:/dev/tty1 

/tmp/hello -qws

配置开发板的启动文件

/etc/init.d/rcS

加入/usr/local/run.sh &

结束!

 

 

 

 

 

0 0
原创粉丝点击