3.4 移植Qt-Extended 4.4.3 (Qtopia4.4.3) 到mini6410

3.4 移植Qt-Extended 4.4.3 (Qtopia4.4.3) 到mini6410
本章节将讲解如何编译和移植Qt-Extended4.4.3,包括如何编译PC版本以及arm版本,并最终将它部署到mini6410上运行。
本章节中会用到如下软件包,请先在光盘A上找到以下软件包和工具:
第 - 24 - 页
文件名
光盘路径
说明
qt-extended-opensource-src-4.4.3.tar.gz
开发文档和教程\01 Qt4和Qtopia编程开发指南\源代码\第三章\3-4
Qt-Extended4.4.3源代码
3.4.1 获得并安装Qt-Extended4.4.3源代码
在FriendlyARM mini6410光盘A的以下路径“开发文档和教程\01 Qt4和Qtopia编程开发指南\源代码\第三章\3-4”可以拿到Qt-Extended4.4.3源代码的压缩包qt-extended-opensource-src-4.4.3.tar.gz,将其拷贝到 /opt 下备用。
我们将创建/opt/mini6410/qt-extended4.4.3目录, 用作Qt-Extended4.4.3的工作目录,在接下的PC版本及ARM版本的编译工作中,都将在这个目录上进行, 在linux终端上输入如下命令(不用键入#),在/opt/mini6410/qt-extended4.4.3下解压Qt-Extended4.4.3的源码包:
# mkdir -p /opt/mini6410/qt-extended4.4.3
# cd /opt/mini6410/qt-extended4.4.3
# tar xvzf /opt/qt-extended-opensource-src-4.4.3.tar.gz
3.4.2 编译和运行x86版本的Qt-Extended-4.4.3
3.4.2.1 配置并编译x86版本
我们需要创建一个build目录专门存放编译x86版本时产出的临时文件,以及最终编译生成的image也会存放于这个目录,用下列命令创建目录:
# mkdir -p /opt/mini6410/qt-extended4.4.3/buildx86
输入以下命令,执行编译前的配置:
# export LC_CTYPE="en_US"
# export LANG="en_US"
# export LANGUAGE="en_US"
第 - 25 - 页
# cd /opt/mini6410/qt-extended4.4.3/buildx86
# echo yes | ../qt-extended-4.4.3/configure \
-ui-type mobile \
-release \
-clean \
-sound-system alsa \
-build-qt \
-no-sxe \
-no-ssl \
-no-v4l2 \
-no- \
-no-phonon \
-no-libamr \
-dynamic-rotation \
-mediaengines cruxus \
-remove-mediaengine gstreamer,helix \
-pictureflow \
-remove-module bluetooth,drm \
-no-dbus \
-no-dbusipc \
-add-displaysize 240x320 \
-extra-qt-embedded-config "-qt-freetype -no-webkit -no-dbus -qt-gfx-transformed -qt-gfx-linuxfb" \
-extra-qt-config "-no-webkit" \
2>&1 | tee ../qtopiaconfig.log
在上面的配置命令后,我们首先将语言设置为en_US, 原因是由于Fedora9终端默认的语言编码为zh_CN.UTF-8或者en_US.UTF-8,而perl在UFT8下会有问题,Qt-Extended4.4.3的编译脚本使用了perl,所以先将语言改成en_US,否则会出现很多莫名其妙的编译错误,脚本参数中的其它编译配置参数请输入“../qt-extended-4.4.3/configure –help”了解其含义。
接下来输入以下命令进行编译和安装:
# bin/qbuild 2>&1 | tee ../qtopiamake.log
# bin/qbuild image
(注:命令后跟的2>&1 | tee ../XXX.log 不是必须的,这一串命令参数的含义时,将编译过程中的所有
第 - 26 - 页
的输出信息同时输出到屏幕和log 文件中)
3.4.2.2 运行PC版本的Qt-Extended4.4.3
Qt-Extended4.4.3自带了用于运行的脚本runqtopia,因为只要执行以下命令即可运行Qt-Extended4.4.3:
# cd /opt/mini6410/qt-extended4.4.3/buildx86
# bin/runqtopia
Qt-Extended4.4.3的运行结果如下所示:
3.4.3 编译和运行arm版本的Qt-Extended-4.4.3
3.4.3.1 配置并编译arm版本
我们需要创建一个buildarm目录专门存放编译arm版本时产出的临时文件(.o, .moc,Makefile等等),最终编译生成的image也会存放于这个目录,用下列命令创建目录:
# mkdir -p /opt/mini6410/qt-extended4.4.3/buildarm
输入以下命令,执行编译前的配置:
第 - 27 - 页
# export LC_CTYPE="en_US"
# export LANG="en_US"
# export LANGUAGE="en_US"
# cd /opt/mini6410/qt-extended4.4.3/buildarm
# echo yes | ../qt-extended-4.4.3/configure \
-ui-type mobile \
-xplatform linux-arm-g++ \
-arch arm \
-release \
-clean \
-prefix /opt/Qtopia4.4.3 \
-sound-system oss \
-build-qt \
-no-sxe \
-no-ssl \
-no-v4l2 \
-no- \
-no-phonon \
-no-libamr \
-dynamic-rotation \
-mediaengines cruxus \
-remove-mediaengine gstreamer,helix \
-pictureflow \
-remove-module bluetooth,drm \
-no-dbus \
-no-dbusipc \
-add-displaysize 240x320 \
-extra-qt-embedded-config "-embedded arm -xplatform qws/linux-arm-g++ -no-cups -nomake examples -nomake demos -qt-libjpeg -qt-libmng -qt-libpng -no-dbus -depths 16,32 -qt-gfx-linuxfb -qt-gfx-transformed -no-gfx-qvfb -no-gfx-vnc -no-gfx-multiscreen -qt-kbd-tty -no-kbd-usb -no-kbd-sl5000 -no-kbd-yopy -no-kbd-vr41xx -no-kbd-qvfb -qt-mouse-tslib -no-webkit -no-openssl -no-phonon -no-phonon-backend -no-nas-sound -no-exceptions -svg" \
-extra-qt-config "-no-webkit" \
2>&1 | tee ../qtopiaconfig.log
在上面的配置命令后,我们首先将语言设置为en_US, 原因是由于Fedora9终端默认的语言编码为zh_CN.UTF-8或者en_US.UTF-8,而perl在UFT8下会有问题,Qt-Extended4.4.3的编译脚本使用了perl,所以先将语言改成en_US,否则会编译错误。
其它编译配置参数请输入“../qt-extended-4.4.3/configure –help”了解其含义。
第 - 28 - 页
由于我们所用的编译器较新,有一些代码语法可能已经不兼容了,所以在编译之前需要先修改一个源文件,否则如果直接编译,会出现以下编译错误:
/opt/mini6410/qt-extended4.4.3/qt-extended-4.4.3/src/libraries/qtopia/qphoneprofile.cpp:1026:1: error: 'QPhoneProfile::Schedule::Schedule' names the constructor, not the type
为了修正上述的编译错误,请用vi打开qphoneprofile.cpp,定位到1026行,将其中的
QPhoneProfile::Schedule::Schedule &QPhoneProfile::Schedule::operator=(const Schedule &other)
改成
QPhoneProfile:: Schedule &QPhoneProfile::Schedule::operator=(const Schedule &other)
接着进行编译和安装:
# bin/qbuild 2>&1 | tee ../qtopiamake.log
# bin/qbuild image
出现 Qt Extended has been installed.表示已经成功编译,编译生成的image将放在/opt/mini6410/qt-extended4.4.3/buildarm/image目录下。
3.4.3.2 在开发板上部置Qt-Extended-4.4.3
先确认你的mini6410烧写了最新版本的linux images,然后执行以下命令,将刚刚我们编译产出的 image 打包:
# cd /opt/mini6410/qt-extended4.4.3/buildarm/
# tar cvzf image.tgz image
将image拷贝到你的sd卡上,然后打开minicom, 开启mini6410开发板,在minicom输入以下命令,将image解压到/opt目录下,并将目录名改名为 Qtopia4.4.3,由于FriendlyARM已经提供了Qtopia4.4.3,所以我们首先将它删除,然后替换成我们自已编译的:
@# rm /opt/Qtopia4.4.3 -rf
@# cd /opt
@# tar xvzf /sdcard/image.tgz
@# mv /opt/image /opt/Qtopia4.4.3
第 - 29 - 页
3.4.3.3 在开发板上运行Qt-Extended-4.4.3
在运行任何Qt-Extended4.4.3程序之前,需要先退出Qtopia2.2.0 或者Qt4程序等一切Qt程序,退出Qtopia2.2.0的方法是:在Qtopia2.2.0中点“设置”中的“关机”可出现如下界面,点“Terminate Server”即可关闭Qtopia-2.2.0系统。
也可以使用其他的方法,比如在启动脚本/etc/init.d/rcS中注释掉qtopia启动项,再重新系统系统;或者使用killall命令杀死相关的进程(比较多;甚至是直接删除/opt目录中的所有内容重启。
为了更方便地运行Qtopia, 我们先创建一个脚本run_my_qtopia4,用于运行我们自已编译的Qtopia4:
@# vi /bin/run_my_qtopia4
在run_my_qtopia4中输入如下内容:
第 - 30 - 页
#!/bin/sh
if [ -e /etc/friendlyarm-ts-input.conf ] ; then
. /etc/friendlyarm-ts-input.conf
fi
true ${TSLIB_TSDEVICE:=/dev/touchscreen}
TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_TSDEVICE
export TSLIB_CONFFILE
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export QTDIR=/opt/Qtopia4.4.3
export QPEDIR=/opt/Qtopia4.4.3
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH
if [ -c /dev/touchscreen ]; then
export QWS_MOUSE_PROTO="Tslib:${TSLIB_TSDEVICE}"
if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
rm /etc/pointercal
fi
else
export QWS_MOUSE_PROTO="USB:/dev/input/mice"
>/etc/pointercal
fi
export QWS_KEYBOARD="TTY:/dev/tty1"
#export QWS_DISPLAY="Transformed:mmWidth66:mmHeight114:Rot90:0"
FB_SIZE=$(cat /sys/class/graphics/fb0/virtual_size)
case "$FB_SIZE" in
800,480)
第 - 31 - 页
export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
480,272)
export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
;;
*)
export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
;;
esac
export LANG="en_US"
export HOME=/root/Qtopia4Home
if [ ! -e $HOME ]; then mkdir -p $HOME; fi
if [ ! -e /usr/share ]; then mkdir /usr/share; fi
if [ ! -e /usr/share/zoneinfo ]; then ln -s /opt/Qtopia/etc/zoneinfo /usr/share/; fi
if [ ! -e $HOME/Settings/Trolltech/qpe.conf ]; then
mkdir -p $HOME/Settings/Trolltech/
cp $QPEDIR/etc/default/Trolltech/qpe.conf $HOME/Settings/Trolltech/qpe.conf -f
fi
export QTOPIA_PHONE_DUMMY=1
exec $QPEDIR/bin/qpe
run_my_qtopia4运行脚本说明如下:
a) 首先,我们需要根据我们使用的触摸屏,配置tslib的参数。
b) 然后,配置Qtopia的环境变量 QTDIR, QPEDIR 指向Qtopia Image的路径,配置QWS_MOUSE_PROTO指向触摸屏设备, QWS_KEYBOARD指向开发板上用于Hard Key的tty设备。
c) 配置QWS_DISPLAY环境变量设置LCD显示参数,根据屏幕分辨率的不同,设置不同的DPI,使文字大小的显示适中。
d) 由于mini6410没有GSM Modem, 所以设置QTOPIA_PHONE_DUMMY=1表示使用虚拟的modem设备。
e) 最后,执行 qpe 可执行文件,启动Qtopia。
第 - 32 - 页
为run_my_qtopia4设置可执行权限,然后修改 /etc/init.d/rcS文件,让系统启动时,自动启动我们自已编译的Qtopia:
@# chmod +x /bin/run_my_qtopia4
@# vi /etc/init.d/rcS
把文件中的:
/bin/qtopia &
改成:
/bin/run_my_qtopia4 &

然后重启开发板,应该可以看到我们自已build的Qt-Extended4.4.3了,运行效果如下所示:

"D:\ARM11\Tiny6410-A\开发文档和教程\01 Qt4和Qtopia编程开发指南\Mini6410 Qt4和Qtopia编程开发指南-20110112.pdf"P14~P32

你可能感兴趣的:(Arm嵌入式,QT)