Qt5.6.3源码交叉编译 --- TI DM8168

  • 转载请注明作者和出处https://blog.csdn.net/xiaoqingyi_1014/article/details/80502860
  • 嵌入式系统:TI DM8168
  • PC VMware虚拟机 Ubuntu 16.04
  • 交叉编译工具:arm-arago-linux-gnueabi       
  • 配置文件下载地址:
    https://download.csdn.net/download/xiaoqingyi_1014/10465911

                                                                                                      

Graphics SDK 编译和安装

    TI Graphics SDK图形驱动(SGX530 core)基于SGX技术实现,提供opengl/es 和egl接口,我们可以在此驱动基础上开发opengl应用程序,也可作为Qt、Xorg等的后端(bank-end)。

注:ti提供的Graphics SDK安装指南链接: 

http://processors.wiki.ti.com/index.php/Graphics_SDK_Quick_installation_and_user_guide

编译环境

    在编译SGX驱动之前必须提前准备好8168板子上运行的内核kernel和文件系统rfs。内核kernel (板子上使用的),rfs解压我提供的nfs_DM816x_TI_EVM.tar压缩包。

例如我在服务器上的kernel目录和rfs目录如下:
Kernel: /home/xxx/ti_tools/lsp/kernel
Rfs   : /home/xxx/Qt_8168/rfs_816x

编译和安装

    Graphics SDK使用的是4_03_00_02版本,可以使用arm-arago-linux-gnueabi编译器进行交叉编译,解压提供的 Graphics_SDK_4_03_00_02.tar.bz2 ,目录如下:

Graphics SDK: /home/xxx/Qt_8168/ Graphics_SDK_4_03_00_02

  • 编译前需先修改Graphics_SDK_4_03_00_02/ Rules.make配置文件:
HOME=/home/xxx/Qt_8168
CSTOOL_DIR=/opt/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit
CSTOOL_PREFIX=arm-arago-linux-gnueabi-
KERNEL_INSTALL_DIR=/home/xxx/ti_tools/lsp/kernel
TARGETFS_INSTALL_DIR=/home/xxx/Qt_8168/rfs_816x

  • 编译安装,首先输入export ARCH=arm
    Make 命令:
    make BUILD=release OMAPES=6.x all 
    make BUILD=release OMAPES=6.x install
    Graphics SDK相关的库和内核ko文件便安装到指定的rfs:
    Gfx libs目录:
    /home/xxx/Qt_8168/rfs_816x/opt/gfxlibraries
    Gfx demo 目录: 
    /home/xxx/Qt_8168/rfs_816x/opt/gfxsdkdemos
    Gfx 安装程序(在板子上安装内核模块. pvrsrvkm.ko,omaplfb.ko以及库):
    /home/xxx/Qt_8168/rfs_816x/etc/init.d/ 38xx-demo
    Graphics SDK 驱动内核文件:
    /home/xxx/Qt_8168/rfs_816x/lib/modules/2.6.37+
  • 移植和验证
    将Graphics SDK驱动移植到8168板子上,并运行demo程序进行验证。
    需要移植的内容:

    打包gfxlibrariesgfxsdkdemos,得到gfxsdk.tar.bz2,移植到板子上;
    将安装程序38xx-demo和依赖文件devmem2移植到板子上,目录相同/etc/init.d;
    打包/lib/ modules得到modules.tar.bz2,移植到板子上;
    /etc/powervr.ini文件移植到板子上,目录相同/etc
    8168板子上操作:
         加载内核模块 syslink.ko,vpss.ko,ti81xxhdmi.ko,ti81xxfb.ko;
         解压gfxsdk.tar.bz2到板子上的/opt目录下;
         解压modules.tar.bz2到板子上的/lib目录下;
         将38xx-demo devmem2移植到板子上的/etc/init.d目录下;
         将powervr.ini移植到板子上的/etc目录下
         运行./38xx-demo
         运行结果出现: Loaded PowerVR consumer services.则证明安装成功。
    验证:
           进入/opt/gfxsdkdemos/ogles2目录,运行其中一个demo:
           ./ OGLES2Coverflow
           屏幕上会出现移动的图片,Coverflow效果,则说明Graphics SDK驱动安装成功
    注:
    1. 修改autorun.sh这步,若是项目没有类似的操作,则需自己手动安装那些内核模块,具体步骤参看ti提供的Graphics            SDK安装指南。
    2. 运行38xx-demo之前需确保板子上有libstdc++.so.6库
    3. 若是板子上无powervr.ini文件,运行demo则会报以下的错误:
PVRShell: EGL 1.4 initialize
Exit message has been set to: "PVRShell: Unable to create surface".
InitAPI failed!
PVRShell: Unable to create surface 

Qt5.6.3源码编译

编译环境

文件系统rfs   :/home/xxx/workdir_project/workdir_Qt_8168/rfs_816x
依赖的库      :将
                   /opt/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr
                       目录下的include 和lib 复制到 /home/xxx/Qt_8168/rfs_816x/usr下
源码下载       :下载Qt5.6.3版本的源码---qt-everywhere-opensource-src-5.6.3.tar.xz
                        http://download.qt.io/archive/qt/5.6/5.6.3/single/
                        将其解压到 /home/xxx/Qt_8168/Qt5.6.3

编译和安装

  • Configure 
    将ti需要的交叉编译配置文件夹 linux-arm-gnueabi-ti-g++放到
    qt-everywhere-opensource-src-5.6.3 /qtbase/mkspecs/devices;
    将启动配置文件autoconfig.sh放到
    qt-everywhere-opensource-src-5.6.3 /qtbase目录下.
    目录linux-arm-gnueabi-ti-g++目录下的配置文件qmake.conf如下:
    #
    # qmake configuration for building with arm-linux-gnueabi-g++
    #
    include(../common/linux_device_pre.conf)
    
    
    # Change the required paths here
    QMAKE_INCDIR          += $$[QT_SYSROOT]/include \
                             $$[QT_SYSROOT]/usr/include \
                             $$[QT_SYSROOT]/usr/include/EGL \
                             $$[QT_SYSROOT]/usr/include/EWS \
                             $$[QT_SYSROOT]/usr/include/GLES \
                             $$[QT_SYSROOT]/usr/include/GLES2 \
                             $$[QT_SYSROOT]/usr/include/KHR
                            
    QMAKE_LIBDIR          += \
                             $$[QT_SYSROOT]/usr/lib/ES6.0 \
                             $$[QT_SYSROOT]/usr/lib                   \
                             $$[QT_SYSROOT]/lib           
                             
              
    QMAKE_LFLAGS += \
        -Wl,-rpath-link,$$[QT_SYSROOT]/usr/lib/ES6.0 \
        -Wl,-rpath-link,$$[QT_SYSROOT]/usr/lib  \
        -Wl,-rpath-link,$$[QT_SYSROOT]/lib      
        
    
    
    QMAKE_INCDIR_OPENGL[_ES2] += $$[QT_SYSROOT]/usr/include     \
                                 $$[QT_SYSROOT]/usr/include/EGL \
                                 $$[QT_SYSROOT]/usr/include/EWS \
                                 $$[QT_SYSROOT]/usr/include/GLES \
                                 $$[QT_SYSROOT]/usr/include/GLES2 \
                                 $$[QT_SYSROOT]/usr/include/KHR
                              
    QMAKE_LIBDIR_OPENGL[_ES2] += \
                                 $$[QT_SYSROOT]/usr/lib/ES6.0 \
                                 $$[QT_SYSROOT]/usr/lib  
                                 
                                 
    
    
    
    
    
    
    QMAKE_LIBS_OPENGL[_ES2]   += -lEGL -lIMGegl -lsrv_um -lGLESv2 -lGLES_CM -lusc -lkms
    
    
    
    
    COMPILER_FLAGS   += -O3 -march=armv7-a -mfloat-abi=softfp 
    
    
    
    
    # When configured with -opengl es2, eglfs will be functional with its
    # dummy fullscreen X11 or kms backend, in addition to xcb.
    EGLFS_DEVICE_INTEGRATION = eglfs_kms
     
    include(../common/linux_arm_device_post.conf)
    
    
    load(qt_config)
    autoconfig.sh如下:
    #!/bin/sh
    ./configure \
    -v \
    -opensource \
    -confirm-license \
    -device-option CROSS_COMPILE=arm-arago-linux-gnueabi- \
    -device linux-arm-gnueabi-ti-g++  \
    -prefix /opt/autorun/qt5 \
    -extprefix /home/xxx/Qt_8168/Qt5.6.3/qt5  \
    -hostprefix /home/xxx/Qt_8168/Qt5.6.3/qt5-host  \
    -nomake examples \
    -nomake tests    \
    -opengl es2       \
    -no-xcb   \
    -sysroot /home/xxx/Qt_8168/rfs
    
    
    进入qt-everywhere-opensource-src-5.6.3 /qtbase目录,启动
    ./autoconfig.sh
    Configure结果如下:
    .....
    OpenGL / OpenVG: 
        EGL .................. yes
        OpenGL ............... yes (OpenGL ES 2.0+)
        OpenVG ............... yes-auto
    .....
    QPA backends: 
        DirectFB ............. no
        EGLFS ................ yes
          EGLFS i.MX6 ........ no
          EGLFS i.MX6 Wayland. no
          EGLFS EGLDevice .... no
          EGLFS GBM .......... no
          EGLFS Mali ......... no
          EGLFS Raspberry Pi . no
          EGLFS X11 .......... no
        LinuxFB .............. yes
    .....
    Qt is now configured for building. Just run 'make'.
    Once everything is built, you must run 'make install'.
    Qt will be installed into /opt/autorun/qt5
    
    
    Prior to reconfiguration, make sure you remove any leftovers from
    the previous build.
  • make
    Qt5模块分为三大类:qt基本模块、qt扩展模块、qt开发工具。
    此次只编译qt基本模块也就是qtbase,其余模块按需编译和安装。
    1. 进入/qt-everywhere-opensource-src-5.6.0/qtbase
    ~$make
    成功后:~$make install
    可将qt5安装到了Qt5.6.3/qt5下;服务器交叉编译应用程序的工具存放在Qt5.6.3/qt-host,里面包括有qmake以及版本信息等文件。
    2.编译扩展模块qtdeclarative,包含有quick以及qml等模块
    ~$Qt5.6.3/qt5-host/bin/qmake
    ~$make&&make install
    同样是安装到了Qt5.6.3/qt5下
    3.编译特效模块qtgraphicaleffects
    ~$ Qt5.6.3/qt5-host/bin/qmake
    ~$make&&make install

Demo运行

  • 将我自己用QML做的一个demo(cover_flow)拷贝到服务器/home/Qt_8168/Qt5.6.3目录下
    编译过程:
    Qt5.6.3/qt5-host/bin/qmake;
    make;

    在cover_flow目录下便可得到程序cover_flow,将其拷贝到板子上
  • Qt5库移植
    Graphics SDK demo在板子上运行成功的前提下,将
    /home/xxx/Qt_8168/Qt5.6.3/qt5打包得到
    qt5.6_libs.tar.bz2,将其移植到板子上,并解压到板子上的目录下:
    /opt/qt5
  • Demo 运行
    在板子上设置环境变量:
export QTDIR=/opt/qt5
export QT_QPA_FONTDIR=$QTDIR/../fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH=$QTDIR/bin:$PATH
export PKG_CONFIG_PATH=$QTDIR/lib/pkgconfig/$PKG_CONFIG_PATH
export QML2_IMPORT_PATH=$QTDIR/qml
export LD_PRELOAD=/lib/preloadable_libiconv.so
export FONTCONFIG_PATH=/etc/fonts
export FONTCONFIG_FILE=/etc/fonts/fonts.conf

        在板子上执行:
        ./cover_flow

        在输出屏幕上看到显示的影片图片列表,即成功 .

  注:运行cover_flow程序之前,必须保证板子上有以下的依赖库:
       Qt5.6.3源码交叉编译 --- TI DM8168_第1张图片


你可能感兴趣的:(Qt5)