给busybox增加QT功能

老小孩
原创
发布时间: 2025-06-14 15:46:45 | 阅读数 0收藏数 0评论数 0
封面
上篇用busybody制作了最小文件系统,这次是给最小系统增加QT功能。

准备工作:

材料:

  1. 泰山派开发板
  2. QT5.15.2源码下载网址:Index of /archive/qt/5.15/5.15.2/single
1

准备材料

首先新建一个文件夹,把QT源码包和触摸源码包已经字库文件包放进去。(以QT5.15.2为例)

ZIP
fonts.zip
4.06MB
GZ
tslib-1.4.tar.gz
58.92KB
2

解压包

用 tar -vxf 命令把qt和触摸两个包都解压,用unzip命令解压字库包。

3

编译tslib

先cd到刚解压出来的tslib文件夹。

1.设置环境(临时的方法),注意这里需要你设置自己的路径。

export PATH=/home/name/tspi/linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH

2.编译触摸

./autogen.sh

如果失败,需要安装:sudo apt-get install autoconf automake libtool

./configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ --host=aarch64-linux-gnu --prefix=/home/wht/tspi/qt/tslib1.4 ac_cv_func_malloc_0_nonnull=yes

注意把上面命令里的/home/wht/tspi/work/qt/tslib1.4改成你自己的路径

make

make install

3.修改生成的tslib1.4下的 etc/ts.conf文件 (这个文件里边的每条语句最前边不能有空格)

取消注释 module_raw input 这条语句,保存退出。

4

编译QT

先cd到刚解压的QT包,

1.同样需要设置变量和tslib保持一致

2.修改 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 文件

vim 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_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = aarch64-linux-gnu-gcc
QMAKE_CXX = aarch64-linux-gnu-g++
QMAKE_LINK = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB = aarch64-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
QMAKE_NM = aarch64-linux-gnu-nm -P
QMAKE_STRIP = aarch64-linux-gnu-strip
load(qt_config)

保存退出。


3.创建 autoconfigure.sh 脚本文件写入:

#!/bin/sh
./configure \
-v \
-prefix /home/wht/tspi/work/qt/qt5.15.2 \
-confirm-license \
-opensource \
-release \
-xplatform linux-aarch64-gnu-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 \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-I/home/wht/tspi/work/qt/tslib1.4/include \
-L/home/wht/tspi/work/qt/tslib1.4/lib \
-recheck-all
exit

注意第4行、倒数第3-4行修改为你的路径!

第4行的qt5.15.2为你make install后生成的包。

倒数第3-4行是你需要用到的触摸源码的路径。


用命令 chmod 777 autoconfigure.sh 修改权限

保存退出。

4.执行脚本(脚本运行时间有点长,和自己电脑配置有关)

./autoconfigure.sh

5. make 编译

6.make install 安装


5

整合

将编译好的qt源码和触摸源码以及字库源码fonts整合到busybox系统中

1.拷贝qt源码和触摸源码以及字库源码fonts复制到busybox源码中

进入到sys/opt中,

cp /home/wht/tspi/qt/qt5.15.2/ . -rf

cp /home/wht/tspi/qt/tslib1.4/ . -rf

进入到sys/opt/qt5.15.2/lib下

cp /home/wht/tspi/work/qt/fonts.zip . (路径和下面profile文件中的export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts有关系)

然后用 unzip fonts.zip 命令解压,最后rm 删除原压缩包

2.修改 sys下的 etc/profile 文件

在文件末尾添加以下内容:

EVENT=$(cat /proc/bus/input/devices | grep -E 'ft5x06|goodix-gt911' -A4 | tail -n1 | head -c 95 | cut -c13-18)
export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt5.15.2
export TSLIB_TSDEVICE=/dev/input/$EVENT
export TSLIB_TSEVENTTYPE=input
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_PRELOAD=$TSLIB_ROOT/lib/libts.so
export QWS_MOUSE_PROTO=tslib:/dev/input/$EVENT
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib

保存退出。

3.复制触摸测试程序到sys下

cp /home/wht/tspi/work/qt/qt5.15.2/examples/widgets/touch/fingerpaint/fingerpaint .

6

打包

在sys的上一级目录下打包文件系统

1.建立镜像,设置大小为700M, 使用命令如下:

dd if=/dev/zero of=rootfs.ext4 bs=1M count=700

mkfs.ext4 -L rootfs rootfs.ext4

2.使用 mount 命令将 rootfs.ext4 挂载到 rootfs 目录下

sudo mount ./rootfs.ext4 rootfs

3.拷贝我们制作的文件系统拷贝到 rootfs 目录下

sudo cp -r ./sys/* ./rootfs

完成后解除挂载:

sudo umount rootfs

4.复制 rootfs.ext4 成 rootfs.img 文件

cp rootfs.ext4 rootfs.img

7

上机测试

将制作好的rootfs.img烧录到泰山派开发板,用串口工具加载qt测试文件fingerpaint.

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载