1 Tslib移植
1.1 源码下载
1.2 解压 tar -xvf tslib-1.4.tar.gz
1.3 配置
# cd tslib
# ./autogen.sh
# echo "ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache
# mkdir /opt/tslib
# ./configure --prefix=/opt/tslib --host=arm-linux --cache-file=arm-linux.cache
1.4 编译和安装
# make
# make install
1.5 部署
(1)动态库文件so /lib
(2)配置文件 /etc
(3)bin文件 /bin
1.6 导出环境变量
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_CALIBFILE=/tslib1.4/etc/pointercal
export TSLIB_CONFFILE=/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tslib1.4/lib
export TS_INFO_FILE=/sys/class/input/input2/uevent
文件系统中/etc/profile文件是开机启动,可以添加到此文件中
1.7 运行和测试
执行/tslib/bin下面的文件
1.8 问题及解决
1.8.1 如果./autogen.sh时报错:./autogen.sh: 4: autoreconf: not found,
是因为系统中没有安装autoconf工具。
解决方法:先让ubuntu能上网,然后执行:
sudo apt-get install autoconf automake libtool
1.8.2 错误1:No raw modules loaded.
ts_config: No such file or directory
解决:在etc/ts.conf中打开module raw input这行的注释就行了。
1.8.3 selected device is not a touchscreen I understand
解决:在tslib代码中定位错误,input-raw.c文件中,check_fd函数判断有问题,输出了错误信息。是版本号的问题,交叉编译工具链和内核中的版本号不对应。
/linux/input.h
define EV_VERSION 0x010000修改版本号:
内核中的路径为: kernel/include
把交叉编译工具链中的EV_VERSION也改为0x010000
路径为:/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/usr/include/linux/input.h
2 QT5.6.2配置和交叉编译
2.1 创建工作目录,并解压
2.2 创建安装目录:/opt/QT5.6.2/
2.3 配置相应的qmake:
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
#aston added
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
# modifications to g++.conf
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
# modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs
QMAKE_OBJCOPY = arm-linux-objcopy
QMAKE_NM = arm-linux-nm -P
QMAKE_STRIP = arm-linuxi-strip
2.4 编译前配置(可以参考./configure --help的提示来配置)
./configure -prefix /opt/QT5.6.2 \
-opensource \
-confirm-license \
-release \
-shared \
-accessibility \
-c++std c++98 \
-xplatform linux-arm-gnueabi-g++ \
-qpa linuxfb \
-linuxfb \
-qreal float \
-pch \
-qt-zlib \
-qt-libjpeg \
-qt-libpng \
-no-sse2 \
-no-largefile \
-no-qml-debug \
-no-glib \
-no-gtkstyle \
-no-opengl \
-nomake tools \
-nomake examples \
-tslib \
-skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland \
-I /howard/port_qt/tslib1.4/include \
-L /howard/port_qt/tslib1.4/lib
2.5 make make install
2.6 编译中的错误解决
2.6.1 找不到dlopen或者dlsym
在编译器后面加ldl arm-linux-g++ -ldl
2.6.2 undefined reference to `__sync_add_and_fetch_4'
参考http://www.mamicode.com/info-detail-1699895.html
#libtool --tag=CC --mode=compile arm-linux-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c
#libtool --tag=CC --mode=link arm-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo
利用libtool生成liblinux-atomic.a,注意生成的目录名叫.libs所以是隐藏的
#cp .libs/liblinux-atomic.a /opt/linux-automic // 注意/opt/linux-automic是自己事先创建的 在QT源码下修改:#vi qtscript/src/script/Makefile
在LIBS = 的结尾添加 -L/opt/linux-atomic -llinux-atomic
3 linux下QT应用开发环境搭建
3.1 直接运行:#./qt-opensource-linux-x86-5.3.2.run
3.1 问题:
本地编译时出现:error: cannot find -lGL
解决办法:sudo apt-get install libgl1-mesa-dev
4 开发板中运行QT应用
4.1 QT库复制
复制本机qt下面的lib和plugins库到开发板
4.2 导出环境变量
export LD_LIBRARY_PATH=/QT5.6.2/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=/QT5.6.2/plugins
export QT_QPA_FONTDIR=/QT5.6.2/lib/fonts
export QT_QPA_FB_TSLIB=1
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event2
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1024x600:mmSize=1024x600:offset=0x0:tty=/dev/tty1
4.3 运行测试文件
4.4 问题
问题1:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解决:C++库在交叉编译工具链中,复制进去即可。
进入安装编译工具的安装目录,#find -name “libstdc++.so.6”,对库进行复制,加 -d,对符号链接进行复制
问题2:QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
解决:
2.1、解压libiconv-1.14.tar.gz
2.2#./configure -prefix=$PWD/_install --host=arm-none-linux-gnueabi
2.3 make
make install
把_install/lib下的preloadable_libiconv.so 拷到系统的/lib下,
export LD_PRELOAD=/lib/preloadable_libiconv.so