1.编译Tslib
下载Tslib
git clone https://github.com/kergoth/tslib
配置源码生成 Makefile,执行前先安装 automake 工具
sudo apt-get install autoconf automake libtool
新建arm-tslib文件夹,用于存放编译输出的内容
mkdir arm-tslib
编写auto_generate.sh自动编译脚本
#!/bin/sh
./autogen.sh
./configure --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cac he-file=arm-linux.cache -prefix=/home/hyq/linux/tool/tslib-1.21/arm-tslib
make -j4
make install
配置交叉编译工具链和设置安装路径
chmod 777 auto_generate.sh
./auto_generate.sh
自动编译安装到arm-tslib目录
拷贝 arm-tslib 到开发板文件系统的根文件
vi /etc/profile配置tslib
export TSLIB_ROOT=/arm-tslib
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_PRELOAD=$TSLIB_ROOT/lib/libts.so
export QT_QPA_FB_TSLIB=1QT_QPA_FB_TSLIB=1
电容屏不需要校准,TSLIB_CALIBFILE=/etc/pointercal 可不用设置。
测试tslib
./ts_test
测试之前确保 /dev/input/event1设备节点正常可用,如果./ts_test没有反应,可单独测试/dev/input/event1
hexdump /dev/input/event1
2.Qt源码编译移植
一般不建议自己移植 Qt,因为自己移植 Qt 虽然能用,但是在 Qt 官网移植的 Qt 在不结合第三方库的情况下编译,编译出来的库会有一部分功能不能用(音频、视频、网络类不能用)。可使用buidroot和yocto编译文件系统。
创造存放目录下载源码并解压
mkdir qt5.5.1
wget http://download.qt.io/new_archive/qt/5.5/5.5.1/single/qt-everywhere-opensource-src-5.5.1.tar.xz
tar xf qt-everywhere-opensource-src-5.5.1.tar.xz
新建arm-qt文件夹,用于存放编译输出的内容
mkdir arm-qt
创建自动配置脚本autoconfigure.sh
#!/bin/sh
./configure \
-prefix /home/hyq/linux/tool/qt5.5.1/qt-everywhere-opensource-src-5.5.1/arm-qt \
-confirm-license \
-opensource \
-shared \
-release \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-dbus \
-no-xcb \
-no-xcursor -no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-no-fontconfig \
-nomake examples -nomake tools -nomake tests -no-iconv \
-tslib \
-I/home/hyq/linux/tool/tslib-1.21/arm-tslib/include \
-L/home/hyq/linux/tool/tslib-1.21/arm-tslib/lib
exit
指定编译输出路径
-prefix /home/hyq/linux/tool/qt5.5.1/qt-everywhere-opensource-src-5.5.1/arm-qt
指定tslib的路径
-I/home/hyq/linux/tool/tslib-1.21/arm-tslib/include \
-L/home/hyq/linux/tool/tslib-1.21/arm-tslib/lib
指定编译的平台(QT是跨平台的,指定运行的平台)
-xplatform linux-arm-gnueabi-g++
qtbase/mkspecs下有很多平台选择
因为前面autoconfigure.sh 里的参数-xplatform 选择了 linux-arm-gnueabi-g++,所以需要修改相应平台的配置文件
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
修改内容如下
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
#指定Qt显示驱动方式
QT_QPA_DEFAULT_PLATFORM = linuxfb
#指定处理器架构
QMAKE_CFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
QMAKE_CXXFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-objcopy
QMAKE_NM = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-nm -P
QMAKE_STRIP = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip
#指定头文件,需预编译
QMAKE_INCDIR += /home/hyq/linux/tool/tslib-1.21/arm-tslib/include
#指定库文件,需预编译
QMAKE_LIBDIR += /home/hyq/linux/tool/tslib-1.21/arm-tslib/lib
load(qt_config)
1.为了防止编译出错,交叉编译工具链使用了绝对路径(电脑上已安装多个交叉编译工具),也可以相对路径的
2.指定一些第三方的头文件和库文件路径,比如tslib、sqlite3
给所有者执行权限
chmod u+x autoconfigure.sh
./ autoconfigure.sh
qmake 创建完成后,看到“Just run make”输出,说明是可以开始编译了,如果你还没有看见
这句话,请再检查路径是否配置正确,编译器路径等是否正确!
开始编译
make -j 16
执行 make install 安装到指定文件夹arm-qt
make install
安装完毕查看结果arm-qt
拷贝 arm-qt 到开发板文件系统的根文件
同 tslib 一样,我们要设置 Qt 的环境变量,好让系统知道 Qt 库的位置在哪里!vi /etc/profile配置
export QT_ROOT=/arm-qt
#export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1:edevmouse:/dev/input/event3
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
export QT_QPA_FONTDIR=/arm-qt/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms
edevmouse:/dev/input/event3是鼠标的配置,用不到
要想 Qt 程序显示中文,请自行将 windows 下的中文字库放到
/arm-qt/lib/fonts 这个目录下就可以了。
在Qt Creator中配置配置 Kits构建套件
1.首先添加一个编译器
imx6g++和imx6gcc都是编译Qt源码和编译Linux源码的交叉编译工具链
arm-linux-gnueabihf-g++ arm-linux-gnueabihf-gcc
2.添加一个Qt Versions
其中qmake路径就是刚才编译Qt源码安装目录arm-qt/bin下的qmake
3.添加一个构建套件Kit
编译器和Qt version都选择上面第一和第二步创建的即可
开发板运行环境的构建套件Kit添加完毕后,创建Qt程序,使用该套件编译出来即可在开发板上运行。
命令 行交叉编译 Qt 项目
不用安装Qt Creator,也不需要编辑建套件Kit,直接在工程目录下(xxx.pro)执行qmake生成Makefile文件,然后make即可完成编译