添加触摸屏库的支持
1 在 Ubuntu 安装必要程序
sudo apt-get install libtool
sudo apt-get install autoconf
sudo apt-get install automake
2 解压 tslib1.4.tar.gz
cd tslib
3 然后执行命令,
./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
CC=arm-arago-linux-gnueabi-gcc CXX=arm-arago-linux-gnueabi-g++
-prefix=/home/cpf/qtenv/tslib
注意:交叉编译工具要正确, -prefix 为安装目录,编译安装后的tslib 在/home/cpf/qtenv/tslib 文件夹下面。
2.4 编译并安装
make && make install
编译出错:undefined reference to `rpl_malloc'
注释掉 config.h.in
#undef malloc
#undef realloc
2.5 配置
编译后会在/home/cpf/qtenv/目录下出现 tslib。进入 tslib 目录,编辑'ts.conf'文件
cd tslib/etc
gedit ts.conf
编辑该文件,去掉 'module_raw input'前面的 # 号和空格 。
如果'module_raw input' 前面留有空格的话,运行测试软件时会提示 'Segmentation fault'
安装 Qt 库
1 、解压 Qt 源码
tar zxvf qt-everywhere- opensource-src-4.8.2.tar.gz
2 、编译
(1)cd qt-everywhere-opensource-src-4.8.2
(2)指定交叉编译器
vi mkspecs/qws/linux-arm-g++/qmake.conf
编辑 qmak.conf,将“arm-linux ” 更改为
"arm-arago-linux-gnueabi “,并增加参数“lts ”
到四个选项,如下所示:
#
# qmake configuration for building with arm-linux-gnueabihf-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = /usr/local/arm/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-gcc -lts
QMAKE_CXX = /usr/local/arm/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++ -lts
QMAKE_LINK = /usr/local/arm/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = /usr/local/arm/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = /usr/local/arm/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = /usr/local/arm/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-objcopy
QMAKE_STRIP = /usr/local/arm/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-strip
load(qt_config)
(3)新建 build_qt.sh 脚本文件,增加以下配置内容:
# !bin/bash
./configure -prefix $HOME/qtenv/qt-4.8.2-arm \
-opensource \
-confirm-license \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-platform /qws/linux-x86-g++ \
-little-endian \
-host-little-endian \
-shared \
-no-qt3support \
-no-phonon -no-phonon-backend \
-qt-zlib \
-no-gif \
-no-libtiff \
-no-qvfb \
-qt-libjpeg \
-no-nis \
-no-opengl \
-no-cups \
-no-webkit \
-no-glib \
-no-dbus \
-no-rpath \
-no-mmx -no-3dnow \
-no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 \
-no-avx -no-neon \
-no-audio-backend \
-no-svg \
-no-javascript-jit \
-no-script \
-no-scripttools \
-no-multimedia \
-no-openssl \
-nomake tools \
-qt-mouse-tslib \
-I/home/cpf/qtenv/tslib/include \
-L/home/cpf/qtenv/tslib/lib
-L/home/cpf/qtenv/tslib/lib ,是对应相应的 tslib 的安装路径
-prefix $HOME/qtenv/qt-4.8.2-arm 是对应以后这个程序的安装路径
(4) 执行 build_qt.sh 文件,配置 qt 编译规则
sh build_qt.sh
(5)make
(6)make install
安装完成后,在安装目录下生成了 qt 库以及 demo 程序。
3、完成编译和安装后需要对系统的环境变量进行设置,才能编译自己的程序
vim setARMenv.sh
#!/bin/sh
export QTEDIR=/home/cpf/qtenv/qt-4.8.2-arm:$QTEDIR
export PATH=/home/cpf/qtenv/qt-4.8.2-arm/bin:$PATH
export LD_LIBRARY_PATH=/home/cpf/qtenv/qt-4.8.2-arm/lib: LD_LIBRARY_PATH
注意:以上目录是你安装 qt 库的路径。
编译 Qt 程序
1. 上位机编译程序,以 am3359 Qt 界面程序为例
在虚拟机的 ubuntu 下,写好代码之后,定位到代码目录,
先执行 source setARMenv.sh 修改环境变量
然后查看 qmake 的路径是否正确
执行命令
$ qmake -project // 生成工程文件.pro
$ qmake // 生成 makefile
$ make //生成可执行文件 am3359
2.或者使用 qtcreat 编译。
移植库到开发板
1 )虚拟机里编译安装 arm 版的 Qt 库在你的安装目录下,如:
/home/cpf/qtenv/qt-4.8.2-arm/lib 下,在 qt-4.8.2-arm/目录执行下面的命令打包,方
便以后移植使用
tar zcvf lib.tar.gz lib/
2 )移植到开发板
最好是跟你在虚拟机里面的 arm 版 Qt 所在目录一样,方便操作!
在开发板下新建目录: /home/cpf/qtenv/qt-4.8.2-arm/
把 lib.tar.gz 解压到此目录, lib 目录下包含库和字体。
2. 安装成功后,这步非常关键,一定要设置环境变量
在开发板的根目录下执行:
$ vi /etc/profile
然后输入
export QTDIR=/home/cpf/qtenv/qt-4.8.2-arm:$QTDIR
export LD_LIBRARY_PATH=/home/cpf/qtenv/qt-4.8.2-arm/lib:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=/home/cpf/qtenv/qt-4.8.2-arm/lib/fonts
保存退出!
3. 准备 tslib 文件 ,使触摸屏工作
把虚拟机/home/cpf/qtenv/tslib 目录下的文件拷贝到开发板上的
/home/cpf/qtenv/tslib,没有的话自己建个文件。
修改触摸屏配置文件
3.1 环境变量
为了实现 Tslib 的正确运行,需要对如下的 Tslib 的环境变量进行配置:
设置环境变量如下:(或者写成 shell 形式)
export T_ROOT=/home/cpf/qtenv/tslib/
export LD_LIBRARY_PATH=/home/cpf/qtenv/tslib/lib:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export POINTERCAL_FILE=/etc/pointercal
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_MOUSE_PROTO=tslib:/dev/input/event0
或者也写在/etc/profile 里面.
支持触摸屏
在对触摸屏校准以后,可以执行以下命令来支持触摸屏:
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
支持鼠标
export QWS_MOUSE_PROTO=MouseMan:/dev/input/mice
同时支持触摸屏和鼠标
export set QWS_MOUSE_PROTO="TSLIB:/dev/input/event0 Intellimouse:/dev/input/mice"
然后执行测试程序 ./qt_test -qws
就可以看到 Qt 界面。