搭建Qt环境

防止因为运行qt程序导致网络中断,从而通过NFS挂载的根文件系统断联,串口中断没有反应,运行慢等情况,所以使用mfgtool进行固化系统到开发板上在进行,搭建qt。

烧录文件系统

烧录文件系统之前有过,但是并不全面,这回进行整个系统的固化。

首先编译u-boot,编译方法跟以前一样。

1
./mx6ull_alientek_emmc.sh

用到的文件是u-boot.imx。打开固化文件工具

进入文件夹中打开boot,将自己的uboot文件照着重命名后进行替换。

使用自构建的系统镜像和设备树文件进行重命名为以上的名字,来进行替换。

最后替换根文件系统,根文件系统不是替换文件,而是替换压缩包。

所以进行对根文件系统压缩。

首先我的压缩是在rootfs的外部使用的命令压缩,但是固化系统失败了。

1
sudo tar -vcjf rootfs.tar.bz2

查询原因是应该变为内部打包。

1
2
cd rootfs
tar -vcjf rootfs.tar.bz2 *

这个*是打包所有文件包括了隐藏文件所以可能是这个问题。解决可以固化系统了。

之后打开串口软件观察,从内部emmc中进行启动。

卡住了,这是因为这时的uboot是新的,一个白板,所以要进行设置命令给它,让其从emmc启动板子。分别设置bootcmd和bootargs

1
2
3
4
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 80800000 - 83000000;'
setenv bootargs 'console = tty1 console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv
boot

ok 启动成功了。因为文件系统是之前写驱动的文件系统,所以可以设置bootargs来使用屏幕

烧录之后的新系统是不支持网络的,所以在uboot中ping通网络设置,添加网络相关环境变量。

1
2
3
4
5
6
setenv ipaddr 192.168.1.102
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewap ip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.128
saveenv

搭建Qt运行环境

qt使用版本为5.12.9,此版本为长期支持版本,到qt网站进行下载,之后进行压缩包的解压。这个压缩包还是编译完挺大的有7个G,提前预留好地方,不然会提示空间不够,还要重新弄,只要在虚拟机外面设置空大硬盘空间,之后使用Gparted来进行分配多余的硬盘空间。

1
tar xf qt-everywhere-src-5.12.9.tar.xz

修改qmake.conf

1
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

改完后为以下文本,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#
# 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)

配置编译选项

可执行文本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
./configure -prefix /home/moss/linux/qt-everywhere-src-5.12.9/arm-qt \
-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/moss/linux/tool/tslib/include \
-L/home/moss/linux/tool/tslib/lib \
-recheck-all

赋予脚本可执行权限。

1
chmod +x autoconfigure.sh

直接执行 autoconfigure.sh。 配置需要一段时间,请耐心等待!配置前请先安装 g++

1
2
sudo apt-get install g++ 
./autoconfigure.sh

1
make -j 16

编译,之后执行安装

1
make install

移植Qt到文件系统

首先按照正常的步骤来将需要移植tslib的库,但是如果是开发过触摸屏驱动的话,可以发现你已经移植过了,经过测试用之前移植的tslib库以及编写的/etc/profile,是完全能够使用的。所以移植tslib库的步骤请参考触摸屏幕驱动后半部分。

下载arm平台的qt源码https://download.qt.io/archive/qt/5.12/5.12.9/single/

将qt的源码压缩包进行解压

1
tar xf qt-everywhere-src-5.12.9.tar.xz

编辑 mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf, 配置相关编译器及路径。

1
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#
# 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)

进行配置编译选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/configure -prefix /home/moss/linux/qt-everywhere-src-5.12.9/arm-qt \
-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/moss/linux/tool/tslib/include \
-L/home/moss/linux/tool/tslib/lib \
-recheck-all

可以把上述配置变成可执行的脚本文件,之后赋予脚本可执行权限,后编译源码。

1
2
3
4
chmod +x autoconfigure.sh
sudo apt-get install g++ // 配置前请先安装 g++
./autoconfigure.sh
make -j16

之后将arm-qt移动到/usr/lib的目录下。编译qt5的环境变量。编辑/etc/profile,在末尾添加以下内容。 如下图红色框内。 注意要改为个人实际的路径。要
想 Qt 程序显示中文,请自行将 windows 下的(路径 C:\Windows\Fonts) 下的中文字库放到新建一个/usr/share/fonts/目录下就可以了 。以下是/etc/profile的环境变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/sh
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH

export TERM=vt100
export TERMINFO=/usr/share/terminfo

export TSLIB_TSDEVICE=/dev/input/event2
# event2是我的触摸屏序号
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

export QT_ROOT=/usr/lib/arm-qt
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event2
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=$QT_ROOT/qml
export QT_QPA_FB_TSLIB=1

export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf

最后使能环境变量,测试程序

1
2
source /etc/profile
/usr/lib/arm-qt/examples/widgets/animation/animatedtiles/animatedtiles