搭建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
| #
# 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
|

编译,之后执行安装
移植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
| #
# 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
|
