Hi3516DV300 移植Qt
之前在NXP的板子上,移植过了ARM Linux 移植 tslib、Qt和OpenCV_linux qt tslib-CSDN博客
不过海思移植Qt时还是有不少问题的。
一、Qt 下载与编译
1. Qt 下载
Index of /archive/qt/5.12/5.12.9/single
tar -xf qt-everywhere-src-5.12.9.tar.xz
2. 修改交叉编译器
将原来交叉编译的 qmake.conf 复制一份
cd qt-everywhere-src-5.12.9/
cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/arm-himix200-linux-g++
vim qtbase/mkspecs/arm-himix200-linux-g++/qmake.conf
修改的内容如下:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = arm-himix200-linux-gcc
QMAKE_CXX = arm-himix200-linux-g++
QMAKE_LINK = arm-himix200-linux-g++
QMAKE_LINK_SHLIB = arm-himix200-linux-g++
# modifications to linux.conf
QMAKE_AR = arm-himix200-linux-ar cqs
QMAKE_OBJCOPY = arm-himix200-linux-objcopy
QMAKE_STRIP = arm-himix200-linux-strip
load(qt_config)
# modifications to gcc-base.conf
QMAKE_CFLAGS_RELEASE += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4
QMAKE_CXXFLAGS_RELEASE += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -fpermissive
3. 编译前的配置
vim autoconfigure.sh
内容如下:
./configure -prefix /home/prover/linux/arm-qt \
-opensource \
-confirm-license \
-release \
-strip \
-no-eglfs -linuxfb \
-qt-zlib \
-no-gif \
-qt-libpng \
-qt-libjpeg \
-qt-freetype \
-no-rpath \
-no-pch \
-no-avx \
-no-openssl \
-no-cups \
-no-dbus \
-no-pkg-config \
-no-glib \
-no-iconv \
-xplatform arm-himix200-linux-g++ \
-no-opengl \
-nomake examples \
-nomake tools \
-no-sqlite \
-skip qtgamepad \
-skip qtandroidextras \
-skip qtmacextras \
-skip qtx11extras \
-skip qtsensors \
-skip qtserialbus \
-skip qtserialport \
-skip qtwebengine \
-skip qtwebchannel \
-skip qtwebsockets \
-skip qtlocation \
-skip qtquickcontrols \
-skip qtpurchasing \
-skip qtconnectivity \
-skip qtscxml \
-skip qtxmlpatterns \
-skip qtnetworkauth \
-skip qtspeech \
-skip qtscript \
-skip qtremoteobjects \
-skip qtcharts \
-skip qtdatavis3d \
-skip qtwebview \
-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/prover/linux/tslib-1.21/arm-tslib/include \
-L/home/prover/linux/tslib-1.21/arm-tslib/lib \
-recheck-all
记得交叉编译器改成海思的:-xplatform arm-himix200-linux-g++ \
然后运行:
chmod +x autoconfigure.sh
sudo apt-get install g++ // 配置前请先安装 g++
./autoconfigure.sh
4. 编译
make -j8
make install
打包
sudo tar -jcf ./arm-qt.tar.bz2 shared
二、移植Qt
1. SD卡挂载
由于 Nor flash 的大小就那么32M,肯定要把Qt运行库移植到SD卡上。
mkdir -p /sdcard
mount /dev/mmcblk0p1 /sdcard
可以设置开机自动挂载:
2. 移植到SD卡
sudo cp arm-qt.tar.bz2 /home/prover/linux/nfs/rootfs_glibc/sdcard/
配置环境变量 /etc/profile
export QT_QPA_PLATFORM_PLUGIN_PATH=/sdcard/arm-qt/plugins
export QT_QPA_FONTDIR=/sdcard/arm-qt/fonts
export LD_LIBRARY_PATH=/sdcard/arm-qt
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sdcard/arm-qt/lib
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1920x1080:offset=0x0:nographicsmodeswitc
三、测试Qt应用
1. 编译demo
cd qt-everywhere-src-5.12.9/qtbase/examples/widgets/graphicsview/collidingmice
../../../../bin/qmake
make
2. 初始化
和之前移植 tslib 一样,海思是会对 /dev/fb0 进行封装的。这边改动 sample_tde.c 的源码,原来的 tde 是要将背景图和一些图片循环输出到屏幕的,这边我们直接不要这么做,而是直接刷新屏幕即可。
2.1 修改分辨率
我设置的是 1920*1080,这里的分辨率其实就是物理分辨率了。
来到函数 static HI_VOID circumrotate(HI_U32 u32CurOnShow)
我们直接全部删了,换成下面这段:
static HI_VOID circumrotate(HI_U32 u32CurOnShow)
{
struct fb_var_screeninfo stVarInfo; // **声明屏幕信息变量**
// **获取当前屏幕参数**
if (ioctl(g_s32Fd, FBIOGET_VSCREENINFO, &stVarInfo) < 0)
{
TDE_PRINT("Failed to get screen info!\n");
return;
}
// **执行屏幕刷新**
if (ioctl(g_s32Fd, FBIOPAN_DISPLAY, &stVarInfo) < 0)
{
TDE_PRINT("process frame buffer device error\n");
return;
}
getchar(); // **等待用户按键**
g_s32FrameNum++; // **递增帧数**
return;
}
3. 运行测试
这边还编译了个demo ,animatedtiles。
./sample_tde 0 &
./collidingmice
./animatedtiles
小结
后面开发的思路很明显了,要学习使用海思的mpp软件包进行开发视频。而既然移植了Qt,就将mpp也集成一块。后面想要开发一个相机的UI界面,按钮控件实现拍照和直播功能;当然还要有目标检测的话,就更好了。