本帖最后由 forlinx 于 2015-5-20 17:20 编辑
PC 环境:Ubuntu12.04
交叉编译器:arm-2009q3(即4.4.1)
1.编译tslib
tslib 库,是触摸屏校准时需要的库文件,如对触摸屏的数据进行过滤、去抖动等,QT 的库会调用 tslib 的库文件.
编译tslib库
1.1将 tslib.tar.gz,拷到 Ubuntu 下,解压tar xzvf tslib.tar.gz ;
1.2安装 autoconf、automake、libtool 包
在 Ubuntu 命令行中分别执行以下三个升级命令。
#sudo apt-get install autoconf
#sudo apt-get install automake
#sudo apt-get install libtool
#sudo apt-get install g++
1.3进入tslib目录:
cd tslib;
设置环境变量
#export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
#export TOOLCHAIN=/usr/local/arm/arm-2009q3
#export TB_CC_PREFIX=arm-linux-
#export PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-linux
1.4在tslib目录下运行脚本
./autogen.sh
1.5用configure 生成Makefile.
echo "ac_cv_func_malloc_0 _nonnull=yes">arm-linux.cache
# ./configure --host=arm-linux
--cache-file=arm-linux.cache
--enable-inputapi=no
PLUGIN_DIR=/usr/local/arm/tslib/plugins
--prefix=/usr/local/arm/tslib
--host=arm-linux
--cache-file=arm-linux.cache 2>&1 | tee conf_log
上述命令必须一行输入
注意:
注释掉 config.h.in文件中的#undef malloc一行,如下:
//#undef malloc
1.6 编译安装
make 2>&1 | tee make_log
1.7 make install
1.8编译完成后检查主机目录 ‘/usr/local/arm/’下面是否已经有了‘tslib’文件夹 ,如果有的话,请修改etc文件夹下的‘ts.conf’,去掉“# module_raw input”中的#号和空格,如下图所示。
如果主机目录 ‘/usr/local/arm/’下没有‘tslib’文件夹,请将前面编译好的‘tslib’文件夹拷贝到‘/usr/local/arm’目录下。另外需要把这个‘ tslib ’ 文件夹放到网络文件系 统目录中的 ‘ /usr/local ’ 下 面。
2.编译Qt4.7.1
2.1将qt-everywhere-opensource-src-4.7.1.tar.gz拷贝到Ubuntu下,进行解压,tar zxvf qt-everywhere-opensource-src-4.7.1.tar.gz 如下图所示:
2.2查看build-all脚本里的编译设置(gedit build-all),尤其是环境变量和路径的设置;确保正确后执行./build-all
2.3编译时可能会提示错误:
Lib/libQtGui.so:undefined reference to ‘ts_read_raw’
Lib/libQtGui.so:undefined reference to ‘ts_open’
Lib/libQtGui.so:undefined reference to ‘ts_fd’
Lib/libQtGui.so:undefined reference to ‘ts_config’
Lib/libQtGui.so:undefined reference to ‘ts_close’
Lib/libQtGui.so:undefined reference to ‘ts_read’
解决办法:
修改/mkspecs/qws/linux-arm-g++/qmake.conf文件(添加lts参数)
QMAKE_CC = arm-linux-gcc -lts
QMAKE_CXX = arm-linux-g++ -lts
QMAKE_LINK = arm-linux-g++ -lts
QMAKE_LINK_SHLIB = arm-linux-g++ -lts
如果进行修改后,则build-all脚本里的内容也应进行修改,修改如下去掉以下三行:
3 Qt creator的安装
3.1您可以使用 QtCreator 集成开发环境开发 Qt 应用,QtCreator 很类似于 Windows 上的 VC++集成开发环境,可以进行控件的可视化,所见即所得,使用该软件可以开发 PC 上的 Qt 应用和嵌入式环境下的 Qt 应用。
下载 QtCreator 方法,在 Ubuntu 的 Applica
tions 主菜单下,有一项 “Ubuntu SoftwareCenter”,点击后,在弹出的对话框中 输入 Qt Creator ,会列出该软件,点击install安装即可;安装前确保您的 Ubuntu 能够访问互联网,该软件会从 Ubuntu 的服务器下载.安装完成后 Application->Programming->Qt Creator 就是该开发工具。
3.2建立 QtCreator 开发环境
3.2.1设置Tool Chains,点击Qt Creator的 Tools菜单下的Options,点击Add添加GCCE,然后点击Browse添加相应的路径,如图所示:
3.2.2Qt Versions的设置:点击Add找到Qt4.7.1的qmake文件,添加进去,之后点击Apply即配置完成。
3.3利用Qt Creator 环境制作属于您的 Helloworld
飞凌以经典的Helloword应用程序为例,说明一下如何把Qt应用程序移植到飞凌的开发板上运行,Helloword程序基于新编译的Qt4.7.1库文件运行,创建Helloword这个过程比较简单,用户看图即可实现。
3.3.1File-New
3.3.2选择Q4 Gui Application后。输入工程的名称:HelloWord 即可;其它默认,base class 选择QDialog,如下图:
3.3.3通过图形界面对HelloWord程序进行设置,如下图:
3.3.4设置完成后编译出来的是pc机下运行的版本;我们可以通过projects进行版本设置来编译出适用于开发板的程序,通过projects中的设置选择Qt的版本Qt4.7.1(qt4.7.1)Release如下图:
3.3.5设置好后,再进行编译,则得出的即是可在开发板上运行的版本
注意:可以使用以下方法来判断您编译出来的Helloword是PC Ubuntu上运行的脚本还是开发板上的运行脚本:进入到存放Helloword应用程序的目录下:执行命令:#file Helloword 结果为:
开发板版本:
Helloword: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
PC Ubuntu版本:
Helloword: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x601ba185ddd61cf5786e9437321bd2242900c3dd, not stripped
3.4 在开发板上运行,需要设置环境变量,可以做一个脚本,脚本内容如下(举例):
#!/bin/sh
base1=qpe
pid=`/bin/pidof $base1`
if [ -n "$pid" ]; then
killall $base1
fi
base2=qss
pid=`/bin/pidof $base2`
if [ -n "$pid" ]; then
killall $base2
Fi
base3=quicklauncher
pid=`/bin/pidof $base3`
if [ -n "$pid" ]; then
killall $base3
fi
base4=fluidlauncher
pid=`/bin/pidof $base4`
if [ -n "$pid" ]; then
killall $base4
fi
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 LD_LIBRARY_PATH=$QTDIR/plugins/qtopialmigrate/:$QTDIR/qt_plugins/imageformats/:$QTDIR/lib:/root/tslib/build/lib:$LD_LIBRARY_PATH
export PATH=/bin:/***in:/usr/bin/:/usr/***in:/root/tslib/build/bin
if [ -c /dev/input/event2 ]; then
if [ -f /proc/driver/ft5x06_ts ]; then
echo "capacitor panel touch..."
export QWS_MOUSE_PROTO='Tslib:/dev/input/event3'
else
echo "resistance panel touch..."
export QWS_MOUSE_PROTO='Tslib:/dev/input/event2'
fi
if [ ! -e /etc/pointercal ]; then
/bin/calibrate
fi
if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
rm /etc/pointercal
/bin/calibrate
fi
else
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
export HOME=/root/QtE4Home
cd /opt/qt-4.7.1/demos/embedded/fluidlauncher
#./fluidlauncher -qws
/qt4.7/lincom -qws
最后一行为应用程序及此脚本的路径,将该脚本和应用程序放在同一路径下,执行脚本即可调用应用程序。
以上就是针对飞凌嵌入式 三星 S5PV210(Cortex-A8)开发板的操作。