QT 移植
需要 配置好 arm 的交叉编译工具了
1. tslib
在 arm 中,qt 控制显示屏和触摸屏用的是 tslib,所以需要移植 tslib
编译:
-
获得源码后解压(git 地址为 https://github.com/kergoth/tslib)
-
进入源码目录
-
配置:
./configure --host=arm-linux-gnueabihf --prefix=$PWD/tslib-arm make make install
2 qt source
-
下载 Qt5.12.9 源码(https://download.qt.io/)
wget https://download.qt.io/archive/qt/5.12/5.12.9/single/qt-everywhere-src-5.12.9.tar.xz
-
解压并进入目录
-
修改 qmake.conf
# # qmake configuration for building with arm-linux-gnueabi-g++ # MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublib 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 = arm-linux-gnueabihf-gcc QMAKE_CXX = arm-linux-gnueabihf-g++ QMAKE_LINK = arm-linux-gnueabihf-g++ QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++ # modifications to linux.conf QMAKE_AR = arm-linux-gnueabihf-ar cqs QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy QMAKE_NM = arm-linux-gnueabihf-nm -P QMAKE_STRIP = arm-linux-gnueabihf-strip load(qt_config)
-
配置编译选项
./configure -prefix /home/luo/tool/qt-everywhere-src-5.12.9/qt-arm \ #根据自己的目录改(设置编译输出路径) -opensource \ -confirm-license \ -release \ -strip \ -shared \ -xplatform linux-arm-gnueabi-g++ \ -optimized-qmake \ -c++std c++11 \ --rpath=no \ -pch \ -skip qt3d \ -skip qtactiveqt \ -skip qtandroidextras \ -skip qtcanvas3d \ -skip qtconnectivity \ -skip qtdatavis3d \ -skip qtdoc \ -skip qtgamepad \ -skip qtlocation \ -skip qtmacextras \ -skip qtnetworkauth \ -skip qtpurchasing \ -skip qtremoteobjects \ -skip qtscript \ -skip qtscxml \ -skip qtsensors \ -skip qtspeech \ -skip qtsvg \ -skip qttools \ -skip qttranslations \ -skip qtwayland \ -skip qtwebengine \ -skip qtwebview \ -skip qtwinextras \ -skip qtx11extras \ -skip qtxmlpatterns \ -make libs \ -make examples \ -nomake tools -nomake tests \ -gui \ -widgets \ -dbus-runtime \ --glib=no \ --iconv=no \ --pcre=qt \ --zlib=qt \ -no-openssl \ --freetype=qt \ --harfbuzz=qt \ -no-opengl \ -linuxfb \ --xcb=no \ -tslib \ --libpng=qt \ --libjpeg=qt \ --sqlite=qt \ -plugin-sql-sqlite \ -I/home/luo/linux/tool/tslib-1.21/tslib-arm/include \ #根据自己的目录改(tslib 编译输出的头文件路径) -L/home/luo/linux/tool/tslib-1.21/tslib-arm/lib \ #根据自己的目录改(tslib 编译输出的库文件路径) -recheck-all
-
赋予 autoconfigure.sh 可执行权限
sudo chmod 777 autoconfigure.sh
-
执行前先安装 g++
sudo apt-get install g++
-
执行配置文件
./autoconfigure.sh
-
开始编译,执行 make
-
开始安装,执行 make install
3 移植到文件系统
将编译好的 tslib 和 qt 移植到开发板上
-
烧写文件系统到开发板
如果 nfs 挂载文件系统,在运行 qt 程序时,可能会网络中断
-
移植 tslib 到文件系统
将编译安装好的 tslib-arm 打包(
tar -cjf ./tslib-arm.tar.bz2 tslib-arm
),可在烧写文件系统时就将 tslib-arm.tar.bz2 放到文件系统,或者通过 u 盘烤到开发板上,然后将 tslib-arm.tar.bz2 解压到 /usr/lib 下(tar -xjf tslib-arm.tar.bz2 -C /usr/lib
)配置 tslib 环境变量:
-
打开/etc/ts.conf文件,找到下面这一行:module_raw input,如果有注释,就去掉
-
打开/etc/profile 文件,在里面加入如下内容:
export TSLIB_ROOT=/usr/lib/tslib-arm export TSLIB_TSDEVICE=/dev/input/event1 #表示触摸设备文件,这里设置为/dev/input/event1,这个要根据具体情况设置 export TSLIB_CALIBFILE=/etc/pointercal #表示校准文件,如果进行屏幕校准的话校准结果就保存在这个文件中,这里设置校准文件为/etc/pointercal,此文件可以不存在,校准的时候会自动生成。 export TSLIB_CONFFILE=/etc/ts.conf #触摸配置文件,文件为/etc/ts.conf,此文件在移植 tslib 的时候会生成。 export TSLIB_PLUGINDIR=/lib/ts #表示 tslib 插件目录位置,目录为/lib/ts。 export TSLIB_CONSOLEDEVICE=none #表示控制台设置,这里不设置,因此为 none export TSLIB_FBDEVICE=/dev/fb0 #屏幕驱动文件
测试:
source /etc/profile # 使能环境变量 ./usr/lib/tslib-arm/bin/ts_test_mt # 运行 ts_test 测试触摸是否正常,点击界面的Draw测试
-
-
移植 Qt
将编译安装好的 qt-arm 打包(
tar -cjf ./qt-arm.tar.bz2 qt-arm
),可在烧写文件系统时就将 qt-arm.tar.bz2 放到文件系统,或者通过 u 盘烤到开发板上,然后将 qt-arm.tar.bz2 解压到 /usr/lib 下(tar -xjf qt-arm.tar.bz2 -C /usr/lib
)配置 qt 环境变量:
-
打开/etc/profile 文件,在里面加入如下内容:
export QT_ROOT=/usr/lib/qt-arm export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1 export QT_QPA_FONTDIR=/usr/share/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 export QML2_IMPORT_PATH_PATH=$QT_ROOT/qml export QT_QPA_FB_TSLIB=1
测试:
source /etc/profile # 使能环境变量 ./usr/lib/qt-arm/examples/widgets/animation/animatedtiles/animatedtiles
-
3 搭建 ARM 平台的 Qt Creator
要用带桌面的 Linux,不然运行 Qt Creator 会有麻烦
-
下载 Qt Creator
wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run
-
赋予可执行权限,然后运行
chmod 777 qt-opensource-linux-x64-5.12.9.run sudo ./qt-opensource-linux-x64-5.12.9.run # 建议加 sudo,否则安装在当前目录下。
-
不出意外,会出现安装 Qt 的界面
-
勾选安装选项时,除了 android 的,其他都选上
-
运行 Qt
可用 命令行(
/opt/Qt5.12.9/Tools/QtCreator/bin/qtcreator.sh &
)可用图形界面
-
配置 ARM 平台的Qt Creator Kits
-
配置 qmake
-
配置 C++ 编译器
-
配置 Kits
-
-
配置完成
Qt 编程
-
配置好网络接口,可利用 tftp 下载文件
用以太网接口,在板子上配置好 tftp,即可用 tftp 下载编译好的可执行文件(
tftp -g -r filename 192.168.19.19
),会下载到当然目录 -
用可视化 ui 界面可以根据显示屏的大小先调整好
-
在 Qt creator 编程时,在 ubuntu 上不能运行,只能编译出可执行文件