|
环境:
PC系统: ubutnu 10.04
目标arm板: tq2440
qtopia 版本: qtopia-opensource-src-4.3.3.tar.gz
在http://qtextended.org/modules/mydownloads/viewcat.php?cid=8 有下
交叉编译器 arm-linux-gcc-4.3.2
首先编译 移植 tslib-1.4.tar.gz
解压到一个喜欢的地方.
安装三个工具
apt-get install autoconf automake libtool
运行脚本
./autogen.sh
帧缓冲文件以及配置
echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH_tslib.cache
避免检查ac_cv_func_malloc_0_nonnull,如果不写这句,在Make时候会出现undefined reference to `rpl_malloc' 的错误。
./configure --prefix=/usr/tslib --host=arm-linux --cache-file=$ARCH_tslib.cache --enable-inputapi=no
make
make install
此时在--prefix指向的目录(这里/usr/tslib)会出现编译好的tslib文件.
修改一下etc/ts.config
# Uncomment if you wish to use the linux input layer event interfac
# module_raw input 把这行的#去掉
配置tslib运行环境变量
export QWS_MOUSE_PROTO=Tslib:/dev/event0 //此处填写触摸屏的设备节点
export T_ROOT=/usr/tslib //刚才的--prefix
export LD_LIBRARY_PATH=$T_ROOT/lib //指定tslib库文件路径
export TSLIB_CONSOLEDEVICE=none //tslib运行需要的控制台,这里就是LCD屏幕,设定控制台设备为none,否则默认为/dev/tty
export TSLIB_FBDEVICE=/dev/fb0 //指定帧缓冲设备
export TSLIB_TSDEVICE=/dev/event0 //指定触摸屏设备节点文件
export TSLIB_TSEVENTTYPE=H3600 //对tslib的设备结构体定义。
export TSLIB_CALIBFILE=$T_ROOT/etc/pointercal
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
配置好后可以在开发里运行 tslib/bin 里面的程序测试下,接着就要编译qtopia4.3.3
2 qtopia 4.3.3 的移植
2.1 安装x11库
sudo apt-get install libx11-xcb-dev libx11-6 libx11-dev
2.2 解压 qtopia-opensource-src-4.3.3.tar.gz
tar -xzvf qtopia-opensource-src-4.3.3.tar.gz -C /usr/qtopia
会在/usr/qtopia 多出一个qtopia-opensource-4.3.3
2.3 修改一些错误(最后还会列出些我出现的错误)
vim src/libraries/qtopiabase/qmemoryfile_unix.cpp
修改
f = ::open(tmpFile.toLatin1(), O_CREAT | O_WRONLY);
为:
        f = ::open(tmpFile.toLatin1(), O_CREAT | O_WRONLY ,0777);
2.4 然后在 /usr/qtopia里新建一个目录,因为不能在qtopia-opensource-4.3.3
里编译
mkdir build
cd build
2.5 配置qtopia生成Makefile,下面是我的configure 参数
../qtopia-opensource-4.3.3/configure -release -image /opt/qtopia -prefix /usr/qtopia -xplatform linux-arm-g++ -arch arm -displaysize 320x240 -no-qvfb -no-modem -extra-qtopiacore-config "-qt-mouse-tslib -I/usr/tslib/include -L/usr/tslib/lib -qt-mouse-linuxtp -release -xplatform qws/linux-arm-g++ -embedded arm -qconfig qpe -depths 4,8,16,32 "
这里只讲几个参数
-image 后面跟make install 后生成的可在开发板运行的qtopia文件.
-prefix 后面跟qtopia的运行主目录环境
-qt-mouse-tslib 后面跟刚才编译的tslib的头文件目录的库文件目录
还有很多设置,可以configure -help 查看
2.6 之后就可以
make
make install
过程漫长...
完成后,编译好运行在arm里的文件会放到/usr/qtopia
2.7 错误
1)如果出现 error: explicit template specialization cannot have a storage class
解决:
由于qt是用低版本gcc写的,现在机器是4.3.0,高了,
但是任何一个用低版本gcc写的软件 ,在用高版本gcc编译安装的时候出现错误 ,都可以通过修改源码改正 错误
把temple那个static 去掉,,,
#模板类中,如果模板那个参数类型已经指定(在函数声明实现的时候),必须把声明和实现放在一个文件中,这个时候把函数声明为static会冲突
#如果是一个一般的模板类,声明和定义可以分开,这个是到链接时候才知道类型,把函数声明为static不冲突
2)/usr/mipsel-linux-gnu/include/c++/4.3.1/bits/locale_classes.tcc:102: error: ‘dynamic_cast_not_allowed’was not declared in this scope
修改办法:
/opt/qtopia/build/src/server/Makefile.target的DEFINES里面删除以下信息-Ddynamic_cast=dynamic_cast_not_allowed
我就出现这些错误了,还有的google吧.
下面设置qtopia环境变量参数和测试
以下是我的环境变量参数配置
export QWS_SIZE=320x240
export LD_LIBRARY_PATH=/usr/qtopia/lib:$LD_LIBRARY_PATH
export QWS_KEYBOARD="TTY:/dev/tty0"
export QWS_MOUSE_PROTO="Tslib:/dev/event0"
export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0"
export HOME=/root
export QPEDIR=/usr/qtopia:$QPEDIR
export TSLIB_TSEVENTTYYPE=H3600
export QWS_SW_CURSOR=
export TSLIB_PLUGINDIR=/usr/tslib/lib/ts
export TSLIB_CONFFILE=/usr/tslib/etc/ts.conf
测试:
把上面编译的好的tslib 和 qtopia 放到开发板里,也可以用NFS挂载.
设置上面的tslib和qtopia环境变量.运行qtopia/bin/qpe(运行前要kill掉正在运行的qpe).
等一下,界面马上就出来...
好了的话,你可以看到qtopia的界面.
也可以像制作qtopia 2(tq教程有)那样制作qtopia 4 的文件系统. |
|