使用OK6410开发板移植过Qt程序很多次了,也碰到了非常多问题,其中大部分在网上都能找到解决办法,剩下的一部分在自己的摸索下也能够解决,还有个别问题试了很久也没找到办法,只能暂时跳过。虽然现在对Qt移植的过程挺熟悉的,但时间久了还是容易忘记,放在博客上面不仅在需要的时候能够马上回顾,也希望能够给需要的人提供一点帮助。
开发板:OK6410-A 2G
交叉编译环境:Ubuntu 12.04,arm-linux-gcc 4.4.1
Qt版本:Qt 4.8.4
有些步骤在飞凌开发板的资料中,或者网上有详细的步骤,难以一一细说。另外,Ubuntu开发的时候我使用的是root权限,虽然有安全问题,但是确实简便了很多。设置root登录的解决办法在飞凌资料中的Linux手册上有。网上都能下载得到飞凌的资料,如果找不到的可以找我拿。
第一、安装arm-linux-gcc 4.4.1(步骤在飞凌资料中的Linux手册上有)
第二、编译tslib,并将它放到开发板的/usr/local目录下(步骤在飞凌资料中的Linux手册上有)
第三、安装qt4.8.4,配置目标为arm平台,然后安装。
参考:http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html
第四、将安装好的Qt4.8.4的库文件等放到开发板的/opt/Qt4.8.4目录下,之前在arm下使用Qt4.8.4的时候遇到问题,无法解决,然后直接使用ok6410开发板官方提供的Qt4.7.1库文件。(Qt4.7.1这些资料在飞凌提供的资料中都有,可以选择自己编译,或者直接利用飞凌已经编译好的。Qt4.8.4需要到官网上下载,第三步骤中有说到)
第五、交叉编译Qt程序:
(一)、利用/usr/local/Trolltech/QtEmbedded-4.8.4-arm/bin/qmake命令qmake,生成Makefile文件(路径是安装时选择的路径,也就是qmake所在路径);
(二)、修改Makefile文件,添加“-fno-rtti”:
CFLAGS = -fno-rtti -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS = -fno-rtti -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
(三)、执行make命令,生成能够在arm下执行的程序;
(四)、执行make clean命令,清除多余的文件。执行chmod 777 *,赋予执行文件最高权限。
第六、移植Qt程序到/opt/xxx目录,其中xxx为自己创建的文件夹,Qt程序放在目录下。
第七、添加环境变量,设置成开机启动:
(一)、在/bin下创建一个setqt4env脚本文件,具体内容,注意修改成你自己的路径,比如可执行文件readCard放在/opt/readCard目录下。另外还有触摸屏的设备号event2,
tslib的路径,qt-4.7.1路径等都有可能是不一样的:
#!/bin/sh
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_TSEVENTTYPE=H3600
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QTDIR=/opt/qt-4.7.1/
export QT_QWS_FONTDIR=/opt/qt-4.7.1/lib/fonts
export LD_LIBRARY_PATH=$QTDIR/plugins/qtopialmigrate/:$QTDIR/plugins/imageformats/:$QTDIR/lib:/usr/local/tslib/lib:$LD_LIBRARY_PATH
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/tslib/bin
if [ -c /dev/input/event2 ]; then
echo "touch..."
export QWS_MOUSE_PROTO='Tslib:/dev/input/event2'
if [ ! -e /etc/pointercal ]; then
/bin/calibrate
fi
if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
rm /etc/pointercal
/bin/calibrate
fi
else
echo "mouse..."
export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
>/etc/pointercal
fi
export QWS_KEYBOARD=TTY:/dev/tty1
FB_SIZE=$(cat /sys/class/graphics/fb0/virtual_size)
#export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
case "$FB_SIZE" in
800,480)
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 QWS_DISPLAY=:1
cd /opt/readCard
./readCard -qws
(二)、进入/etc/init.d/rcS,最后一行修改成:/bin/setqt4env &
第八、生成文件系统
(一)、将mkyaffs2image-nand2g工具放到文件系统所在的并列目录下;
(二)、执行./mkyaffs2image-nand2g FileSystem-Yaffs2 rootfs.yaffs2命令,将FileSystem-Yaffs2制作成文件系统rootfs.yaffs2;
(三)、将uboot、zImage、rootfs.yaffs2烧录到开发板中就好,烧写的方法比较多。
另外,在开发的过程中难免需要用到NFS挂载,参考之前的博客:Ubuntu12.04 NFS安装与OK6410
以上这些内容是自己在开发过程中的笔记汇集而来的,难免有些错误,请多见谅。