T113平台基于命令行编译QT程序-盈鹏飞嵌入式

SBC-T113产品特性:

  • 采用Allwinner公司Cortex-A7双核T113-i处理器,运行最高速度为1.2GHZ;

  • 内置64-bit XuanTie C906 RISC-V协处理器;

  • 支持JPEG/MJPEG视频编码,最大分辨率1080p@60fps;支持多格式1080P@60fps视频解码 (H.265,H.264, MPEG-1/2/4);

  • 支持RGB666/LVDS/MIPI-DSI,分辨率最高1920x1080;

  • 支持512-1G Bytes DDR3 SDRAM;

  • 支持SPI NAND存储和启动(默认:256MB;最大1GB)或者EMMC启动(默认:4GB,最大32GB);

  • 支持四路USB2.0 HOST;

  • 支持六路RS232通信;

  • 支持双路CAN BUS通信(隔离);

  • 支持双路以太网,一路10/100M;一路10/100/1000M;

  • 稳定的操作系统的支持,可预装Ubuntu20.04/LINUX 5.4 Preempt/Tina5.0;

  • 标准3.5寸主板, 尺寸为:146*102MM;

SBC-T113功能评估图:

SBC-T113评估图

基于命令行编译Qt工程

基于命令行编译QT工程,首先要明确几个目录:

1)qmake程序所在目录:编译QT程序需要使用qmake,T113 SDK编译完成后(务必要编译QT库),会生成的qmake程序。

2)sysroot所在目录:T113 SDK代码包编译完成后,会生成编译程序的SDK,编译应用程序时需要调用的库和include目录就保存在sysroot目录。

以盈鹏飞嵌入式sbc-t113_emmc(T113i处理器,emmc启动)为例,那么两个目录的路径是:

qmake程序所在目录:

/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/bin/

这个路径是T113 SDK中QT代码编译后,会把生成的QT相关库和程序放到/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5目录。其中表示SDK存放的根目录。了解全志SDK目录结构就会知道,其实这个目录在SDK进行配置(./build.sh config)后,已经明确了该目录,查看/.buildconfig文件内容如下(见QT_INSTALL_DIR):

点击查看代码
…..
export LICHEE_OUT_DIR=/home/embfly/work/LinuxSDK/T113-i_v1.0/out
export LICHEE_BRANDY_OUT_DIR=/home/embfly/work/LinuxSDK/T113-i_v1.0/device/config/chips/t113_i/bin
export LICHEE_BR_OUT=/home/embfly/work/LinuxSDK/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/buildroot
export LICHEE_PACK_OUT_DIR=/home/embfly/work/LinuxSDK/T113-i_v1.0/out/pack_out
export LICHEE_TOOLCHAIN_PATH=/home/embfly/work/LinuxSDK/T113-i_v1.0/out/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabihf
export LICHEE_PLAT_OUT=/home/embfly/work/LinuxSDK/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan
export LICHEE_BOARDCONFIG_PATH="/home/embfly/work/LinuxSDK/T113-i_v1.0/device/config/chips/t113_i/configs/default/BoardConfig.mk /home/embfly/work/LinuxSDK/T113-i_v1.0/device/config/chips/t113_i/configs/sbc-t113_emmc/longan/BoardConfig.mk"
export LICHEE_REDUNDANT_ENV_SIZE=0x20000
export ANDROID_CLANG_PATH=
export LICHEE_COMPRESS=
export ANDROID_TOOLCHAIN_PATH=
export AW_QT_VER=5.12.5
export QT_INSTALL_DIR=/home/embfly/work/LinuxSDK/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5
export QT_RUN_DIR=/usr/local/Qt_5.12.5
export QT_TARGET_DIR=/home/embfly/work/LinuxSDK/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/buildroot/target//usr/local/Qt_5.12.5
……
sysroot所在目录:了解buildroot编译都知道,编译完buildroot后,可以生成软件开发包SDK。在buildroot目录下,通过make sdk指令就可以生成该平台的应用开发sdk(该SDK可以拷贝到其他电脑上进行应用的开发),用户拿到sdk后,就可以编译程序。全志公司的Linux SDK代码包虽然也使用了buildroot,但是它无法使用make sdk指令生成软件开发包。但是可以明确的是,编译完全志SDK代码包后,生成的buildroot软件开发包sdk位置在/out/LICHEE_IC /LICHEE_BOARD/longan/buildroot/host/目录。以基于t113_i处理器的sbc-t113_emmc板子为例,那么目录就在/out/t113_i/sbc-t113_emmc/longan/buildroot/host/目录下。有了软件开发包的目录,那么sysroot目录就在/out/t113_i/sbc-t113_emmc/longan/buildroot/host/<编译器>/sysroot目录,其中编译器可以是arm-buildroot-linux-gnueabihf或者是arm-buildroot-linux-gnueabi,编译器是在你配置SDK代码包做的选择(./build.sh config):
点击查看代码
ping@embfly-server:~/work/t113_longan/T113-i_v1.0$ ./build.sh config

Welcome to mkscript setup progress
All available platform:
   0. linux
Choice [linux]: 0
All available linux_dev:
   0. bsp
   1. dragonboard
   2. longan
   3. tinyos
Choice [longan]: 2
All available kern_ver:
   0. linux-5.4
   1. linux-5.4_rt
Choice [linux-5.4]: 0
All available ic:
   0. t113
   1. t113_i
   2. t113s4
Choice [t113]: 1
All available board:
   0. evb1
   1. evb1_auto
   2. evb1_auto_nand
   3. evb1_auto_nor
   4. sbc-t113_emmc
   5. stc-t113_nand
Choice [evb1]: 4
All available output_configs:
   0. hdmi
   1. lvds-lcd
   2. mipi-lcd
   3. tft-lcd
   4. cvbs
Choice [tft-lcd]: 1
All available flash:
   0. default
   1. nor
Choice [default]: 0
All available build_root:
   0. buildroot-201902
   1. ubuntu
   2. debian
Choice [buildroot-201902]: 0
All available gnueabi:
   0. gnueabi
   1. gnueabihf
Choice [gnueabihf]:

假定我们选择gnueabi的编译器,那么sysroot目录就在/out/t113_i/sbc-t113_emmc/longan/buildroot/host/arm-buildroot-linux-gnueabi/sysroot。

明确了以上目录,以image_display工程为例,我们进行交叉编译工具链环境的配置,执行qmake命令生成Makefile文件,再执行make命令编译生成可在评估板上正常运行的ARM端Qt程序,步骤如下:

Host# cd qt-demos/image_display/src

Host# export PATH=/home/embfly/T113/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/buildroot/host/usr/bin:$PATH //实际SDK所在路径是/home/embfly/T113/T113-i_v1.0

Host# /home/embfly/T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/bin/qmake -o Makefile image_display.pro

Host# make

为了简化以上编译步骤,我们提供了一个编译脚本:

点击查看代码
#!/bin/sh
PATH=$LICHEE_BR_OUT/host/bin/:$PATH
$QT_INSTALL_DIR/bin/qmake -o Makefile image_display.pro
make -j8
exit $?

为了执行这个脚本,在根下先执行source .buildconfig //获得LICHEE_BR_OUT和QT_INSTALL_DIR两个环境变量

备注:若为NAND配置评估板,请将路径"sbc-t113_emmc"修改为" sbc-t113_nand"。

点击查看代码
embfly@embfly-virtuaL-machtne:~S cd qt-demos/image_display/src
embfly@embfly-virtual-machine:~/qt-demos/image_display/src$ export PATH=/home/embfly/T113/T113-_v1.0
/out/t113_i/sbc-t113_emmc/longan/buildroot/host/usr/bin:$PATH
embfly@embfly-virtual-machine:~/qt-demos/image_display/src$ /home/embfly/T113/T113-i_v1.o/platform/framework/qt/qt-everywhere-src-5.12.5/0t_5.12.5/bin/qmake
Info: creating stash file /home/embfly/qt-demos/image display/src/.qmake.stash
embfly@embfly-virtual-machine:~/qt-demos/image_display/src$ make
arm-linux-gnueabi-g++ -c -pipe --sysroot=/home/embfly/T113/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/
buidroot/host/arm-buildroot-linuX-anueabi/sVSroot -O2 -WalL -W -D REENTRANT -fPIC -DOT DEPRECATED WARNINGS
-DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I.-I../../../T113/T113-i_V1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/include -.-...·|T113-i v1.0/patform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/include/QtWidgets -I../. ./T113/T113-i _v1.0/platform/framework/qt/qt-everywher
e-src-5.12.5/Qt_5.12.5/include/QtGui -I../../. ./T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5
12.5/0t 5.12.5/include/0tCore -I .. ./T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.
5/Qt_5.12.5/mkspecs/linux-arm-gnueabi-g++ -o main.o main.cpp
main.cpp: In function ‘int main(int, char**)’
main.cpp:37:62: warning: ‘const QRect QDesktopWidget::availableGeometry(int) const’ is deprecated: Use QGut
Application::screens() [-Wdeprecated-declarations]
QRect screen_info =desktop->availableGeometry();
In file included from ../../../T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/in
clude/QtWidgets/QDesktopWidget:1:0,from main.cpp:12:./../../T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/include/QtWidgets/qdesktopwidget.h:86:67: note:declared here
QT DEPRECATED_X("Use QGuiApplication::screens()") const QRect availableGeometry(int screen = -1) constarm-linux-gnueabt-g++ -c -pipe --sysroot=/home/embfly/T113/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/
buildroot/host/arm-buildroot-linux-gnueabi/sysroot -O2 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS
-DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I.-I../../../T113/T113-i_V1.0/platform/frameWo
.I...rk/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/include -I../../../T113/T113-t_v1.0/platform/framework/qt/qt-every/../.where-src-5.12.5/Qt_5.12.5/include/Qtwidgets -I../../../T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/include/QtGui -I.
.../../T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5
12.5/Qt_5.12.5/include/Qtcore -I. -I.
./../../T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12
5/0t 5.12.5/mkspecs/linux-arm-gnueabi-g++-0
mainwindow.o mainwindow.cpp
……
arm-Ltnux-gnueabt-g++ -pipe
--sysroot=/home/embfly/T113/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/buildroot/host/arm-buildroot-linux-gnueabi/sysroot -02 -Wall -W -dM -E -o moc_predefs.h ../../../T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/mkspecs/features/data/dummy.cpp
/home/embfly/T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/bin/moc -DQT_DEPRE
CATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB --include /home/embfly/qt-demos
image_display/src/moc_predefs.h -I/home/embfly/T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5
.12.5/Qt_5.12.5/mkspecs/linux-arm-gnueabt-g++ -I/home/embfly/qt-demos/image_display/src -I/home/embfly/
T113/T113-i v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/0t 5.12.5/include -I/home/embfly/T113/T113-_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/include/QtWidgets -I/home/embfly/T113/T
113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/include/QtGui -I/home/embfly/T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/include/QtCore -I/home/embfly/T113/T113-i v1.o/out/t113 i/sbc-t113_emmc/longan/buildroot/host/opt/ext-toolchain/arm-linux-gnueabi/include/c++/7.3.1 -I/home/embfly/T113/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/buildroot/host/opt/ext-toolchain/arm-linux-gnueabi/include/c++/7.3.1/arm-linux-gnueabi -I/home/embfly /T113/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/buildroot/host/opt/ext-toolchain/arm-linux-gnueabi/include/c++/7.3.1/backward -I/home/embfly
/T113/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/buildroot/host/opt/ext-toolchain/lib/gcc/arm-linux-gnueabi/7.3.1/include -I/home/embfly/T113/T113-_v1.0/out/t113_i/sbc-t113_emmc/longan/butldroot/host/opt/ext-toolchain/lib/gcc/arm-linux-gnueabi/7.3.1/include-fixed -I/home/embfly/T113/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/buildroot/host/opt/ext-toolchatn/arm-linux-gnueabi/include -I/home/embfly/T113/T113-iv1.o/out/t113_i/sbc-t113_emmc/longan/buildroot/host/arm-buildroot-linux-gnueabi/sysroot/usr/include mainwindow.h -o moc_mainwindow.cpparm-linux-gnueabi-g++ -c -pipe --sysroot=/home/embfly/T113/T113-i_v1.o/out/t113_i/sbc-t113_emmc/longan/-c -pipebuildroot/host/arm-buildroot-linuX-gnueabi/sysroot -O2 -Wall -W -D REENTRANT -fPIC -DOT DEPRECATED WARNINGS-DOT NO DEBUG -DOT WIDGETS LIB -DOT GUI LIB -DQT CORE LIB -I. .I..1../../T113/T113-_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/include -1../../../T113/T113-i_v1.0/platform/framework/qt/qt-every
where-src-5.12.5/Qt_5.12.5/include/QtWidgets -I../../../T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt 5.12.5/include/0tGui -I../../../T113/T113-i v1.0/platform/frameWork/qt/qt-everyWhere-src-5
12.5/Qt_5.12.5/include/QtCore-I.-I../../../T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/mkspecs/linux-arm-gnueabi-g++ -o moc_mainwindow.o moc_mainwindow.cpp
arm-linux-gnueabi-g++
--sysroot=/home/embfly/T113/T113-i_v1.0/out/t113_i/sbc-t113_emmc/longan/buildroot
/host/arm-buiLdroot-linux-gnueabi/svsroot -WL.-o1 -WL.-rpath./usr/LocaL/ot-5.12.5/lib -o image displav maln
.o mainwindow.o moc_mainwindow.o /home/embfly/T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-
5.12.5/Qt_5.12.5/ltb/libQt5Widgets.so /home/embfly/T113/T113-i_v1.0/platform/framework/qt/qt-everywhere-src-5.12.5/Qt_5.12.5/Lib/LibQt5Gut.so /home/embfly/T113/T113-i v1.o/platform/framework/at/at-evervWhere-src-5.12.5/Qt_5.12.5/lib/libQt5Core.so-lpthread
embfly@embfly-virtual-machine:~qt-demos/image_display/src

编译完成后,已经生成的可执行程序image_display:

点击查看代码
embfly@embfly-virtual-machine:~/qt-demos/image_display/src$ ls
image display main.o mainwindow.o moc _mainwindow.o
image_display.pro mainwindow.cpp Makefile moc_predefs.h
main.cpp mainwindow.h moc_mainwindow.cpp
posted @ 2025-08-15 14:16  embfly168  阅读(69)  评论(0)    收藏  举报