上一章介绍了宿主机上的qt4环境搭建
这章介绍下位机即开发板的qt4环境搭建
二,下位机qt/E4环境搭建移植
分三步:准备工作、编译安装、qt/E4移植到开发板
1、准备工作
(1)安装交叉编译工具
交叉编译工具是将宿主机(一边是intel386)上的qt程序编译成arm版可执行的qt程序我这里是将arm-linux-4.4.3.tar.bz2 拷贝到 /home/forlinx/work/ 目录下 使用
#tar xvf arm-linux-4.4.3.tar.bz2 -C /usr/lcoal/arm/ 解压到/usr/local/arm/目录下
环境变量设置,这和上一章的gcc的环境变量设置有点类似,通过链接或添加路径到 /etc/profile 的方法,在这里就不多说了,测试:
#arm-linux-gcc -v
(2)tslib1.4安装
tslib 是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。因此这里先编译安装 tslib,这样在后面编译 Qt 的时候才能打包编译进去。
首先,安装 autoconf、automake、libtool 包:
# sudo apt-get install autoconf
# sudo apt-get install automake
# sudo apt-get install libtool
# sudo apt-get install automake
# sudo apt-get install libtool
这一步有时候会遇到问题,比如package not found 等类似提示,通过两部检查:1,检查网络连接是否成功;2,使用#apt-get install update 安装更新包来解决一些组件无法安装的问题。上一章在安装g++和qt creator 遇到类似问题也可以这样解决。
拷贝 src 目录下 tslib-1.4.tar.bz2 的到/home/forlinx/work(推荐)目录下面
# tar -xvf tslib-1.4.tar.bz2
# cd ./tslib
#./ autogen-clean.sh
#./autogen.sh
# tar -xvf tslib-1.4.tar.bz2
# cd ./tslib
#./ autogen-clean.sh
#./autogen.sh
#./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/usr/local/arm/tslib configure配置选项通过help命令去了解
#make
#make install
#make install
(3)移植、配置、测试tslib
移植 tslib 到 ok335x 目标板
假设用户的根文件系统路径为:/home/forlinx/work/rootfs-mini
执行以下命令:
# cd /usr/local/arm/tslib
# cp -ar lib/* /home/forlinx/work/rootfs-mini/usr/lib
# cp -ar bin/* /home/forlinx/work/rootfs-mini/usr/bin
# vi etc/ts.conf 去掉 module_raw input 前注释符#,一定要注意中间的空格也去掉,module 顶格
# cp -ar etc/* /home/forlinx/work/rootfs-mini/etc
执行以下命令:
# cd /usr/local/arm/tslib
# cp -ar lib/* /home/forlinx/work/rootfs-mini/usr/lib
# cp -ar bin/* /home/forlinx/work/rootfs-mini/usr/bin
# vi etc/ts.conf 去掉 module_raw input 前注释符#,一定要注意中间的空格也去掉,module 顶格
# cp -ar etc/* /home/forlinx/work/rootfs-mini/etc
导出 tslib 环境变量
# cd /home/forlinx/work/rootfs-mini
# vi etc/profile #添加以下环境变量
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export POINTERCAL_FILE=/etc/pointercal
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
# vi etc/profile #添加以下环境变量
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export POINTERCAL_FILE=/etc/pointercal
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
‘
tslib 环境变量说明:
TSLIB_CONFFILE
//配置文件名
TSLIB_PLUGINDIR
//插件目录
POINTERCAL_FILE:
//指定包含用于校准指针设备的数据的文件
TSLIB_TSDEVICE
//触摸屏设备文件名
TSLIB_CALIBFILE
//校准的数据文件,由 ts_calibrate 校准程序生成
TSLIB_CONSOLEDEVICE
//控制台设备文件名
TSLIB_FBDEVICE
//设备名
以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发
板上的/dev 目录下的设备节点相对应。
在 OK335x 目标板下测试 tslib
用新文件系统启动 OK335x 板子,进入 shell 后执行如下命令:
# ts_calibrate 对电阻屏进行触摸较验
# ts_test 对电阻屏进行触摸测试
# ts_calibrate 对电阻屏进行触摸较验
# ts_test 对电阻屏进行触摸测试
2、编译安装
拷贝qt-everywhere...... 解压,进入目录
#./configure \
-prefix /usr/local/arm/qt4.8.5\
-opensource \
-confirm-license \
-release -shared \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-depths 16,18,24,32 \
-fast \
-optimized-qmake \
-little-endian -host-little-endian \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-qt-libpng \
-qt-libmng \
-qt-libtiff \
-qt-freetype \
-webkit \
-no-openssl \
-no-glib \
-no-qt3support \
-no-libtiff -no-libmng \
-no-opengl \
-no-mmx -no-sse -no-sse2 \
-no-3dnow \
-no-qvfb \
-no-phonon \
-no-nis \
-no-opengl \
-no-cups \
-no-separate-debug-info \
-nomake docs \
-qt-mouse-tslib \
-qt-mouse-linuxinput \
-qt-kbd-linuxinput \
-I/usr/local/arm/tslib/include \
-L/usr/local/arm/tslib/lib
-prefix /usr/local/arm/qt4.8.5\
-opensource \
-confirm-license \
-release -shared \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-depths 16,18,24,32 \
-fast \
-optimized-qmake \
-little-endian -host-little-endian \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-qt-libpng \
-qt-libmng \
-qt-libtiff \
-qt-freetype \
-webkit \
-no-openssl \
-no-glib \
-no-qt3support \
-no-libtiff -no-libmng \
-no-opengl \
-no-mmx -no-sse -no-sse2 \
-no-3dnow \
-no-qvfb \
-no-phonon \
-no-nis \
-no-opengl \
-no-cups \
-no-separate-debug-info \
-nomake docs \
-qt-mouse-tslib \
-qt-mouse-linuxinput \
-qt-kbd-linuxinput \
-I/usr/local/arm/tslib/include \
-L/usr/local/arm/tslib/lib
#make
#make install
移植qt/E 到 OK335x 目标板
# cd
/usr/local/arm/qt4.8.5/
# cp
-ar
lib/libQt* lib/fonts/
/home/forlinx/work/rootfs-mini/forlinx/qt/lib
# cp
-ar
demos/embeddeddialogs/embeddeddialogs /home/forlinx/work/rootfs-mini/forlinx/qt/bin
/usr/local/arm/qt4.8.5/
# cp
-ar
lib/libQt* lib/fonts/
/home/forlinx/work/rootfs-mini/forlinx/qt/lib
# cp
-ar
demos/embeddeddialogs/embeddeddialogs /home/forlinx/work/rootfs-mini/forlinx/qt/bin
导出 qt 环境变量
# cd /home/forlinx/work/rootfs-mini
# vi etc/profile #添加以下环境变量
export QTDIR=/forlinx/qt
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QWS_SIZE=800x480
export QWS_DISPLAY=LinuxFb:/dev/fb0
export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen0
< Qt 环境变量说明:
LD_LIBRARY_PATH:指定 qt 的共享库具体路径
QT_QWS_FONTDIR:指定 qt 的 font 具体路径
QWS_SIZE:设定在屏幕尺寸
QWS_DISPLAY:指定的显示类型和帧缓冲区
QWS_MOUSE_PROTO:指定触摸设备
以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发
板上的/dev 目录下的设备节点相对应。
# vi etc/profile #添加以下环境变量
export QTDIR=/forlinx/qt
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QWS_SIZE=800x480
export QWS_DISPLAY=LinuxFb:/dev/fb0
export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen0
< Qt 环境变量说明:
LD_LIBRARY_PATH:指定 qt 的共享库具体路径
QT_QWS_FONTDIR:指定 qt 的 font 具体路径
QWS_SIZE:设定在屏幕尺寸
QWS_DISPLAY:指定的显示类型和帧缓冲区
QWS_MOUSE_PROTO:指定触摸设备
以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发
板上的/dev 目录下的设备节点相对应。
测试qt4.8.5
用新移植的文件系统启动开发板,进入 shell 后执行如下命令:
# cd /forlinx/qt/bin
# ./embeddeddialogs -qws&
# cd /forlinx/qt/bin
# ./embeddeddialogs -qws&
3、qt creator 上QT/E构建和运行的设置和上一章的qt4的设置类似
不过需要明白其对应关系:
宿主机: 下位机
Ubuntu 嵌入式Linux
编译器 qt版本 编译器 qt版本
gcc i386平台 qt4 交叉编译arm-linux-gcc将程序编译好 arm平台版本(arm-qamke) qt-embedded
这一章会遇到一些bug:
如果编译出现缺少链接信息错误:
warning: libts-0.0.so.0, needed by , not found (try using -rpath or -rpath-link)
undefined reference to `ts_read_raw'
undefined reference to `ts_open'
undefined reference to `ts_fd'
undefined reference to `ts_config'
undefined reference to `ts_close'
undefined reference to `ts_read'
collect2: ld returned 1 exit status
解决方法如下:
修改 qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加 lts 参数),也可以直接添加arm-linux-g++的绝对路径(如QMAKE CC=/usr/local/arm/.../arm-linux-gcc):
QMAKE_CC = arm-linux-gcc -lts
QMAKE_CXX = arm-linux-g++ -lts
warning: libts-0.0.so.0, needed by , not found (try using -rpath or -rpath-link)
undefined reference to `ts_read_raw'
undefined reference to `ts_open'
undefined reference to `ts_fd'
undefined reference to `ts_config'
undefined reference to `ts_close'
undefined reference to `ts_read'
collect2: ld returned 1 exit status
解决方法如下:
修改 qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加 lts 参数),也可以直接添加arm-linux-g++的绝对路径(如QMAKE CC=/usr/local/arm/.../arm-linux-gcc):
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
QMAKE_LINK_SHLIB = arm-linux-g++ -lts
修改完成后保存退出,继续编译。