海思Hi3521a + Qt4.8.6移植+Ubuntu14.04.5LTS+Qtdemo测试

《海思Hi3521a + Qt4.8.6移植+Ubuntu14.04.5LTS+Qtdemo测试》

1.下载qt-everywhere-opensource-src-4.8.6.tar.gz

官网下载:http://download.qt.io/archive/qt/4.8/4.8.6/

2.解压并安装

tar -zxvf qt-everywhere-opensource-src-4.8.6.tar.gz

3.修改qmake.conf文件和qplatformdefs.h文件

进入目录:cd qt-everywhere-opensource-src-4.8.6
(1)将qmake.conf文件中的编译工具链换成arm-hisiv300-linux

备份原配置文件:

cp ./mkspecs/qws/linux-arm-g++ ./mkspecs/qws/linux-arm-g++_old -r
cd qt-everywhere-opensource-src-4.8.6
vi ./mkspecs/qws/linux-arm-g++/qmake.conf

(打开文件后在命令模式下输入下面命令,将文件中的arm-linux全部替换成arm-hisiv300-linux)

:%s/arm-linux/arm-hisiv300-linux/g

在load(qt_config)上面添加下面三行

# modifications to gcc-base.conf
QMAKE_CFLAGS_RELEASE    += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
QMAKE_CXXFLAGS_RELEASE += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations

注:上面两行配置可参考海思目录MPP下配置Makefile.param //在第200行左右

# LIB GLOBAL CFLAGS
ifeq ($(HIARCH),hi3521a)
export LIBS_CFLAGS    = -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
export LIBS_LD_CFLAGS = -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
    endif

(2)修改qplatformdefs.h文件,在文件末尾添加

    #vi ./mkspecs/qws/linux-arm-g++/qplatformdefs.h
    #undef O_CLOEXEC//为解决 编译过程中找不到accept4函数问题
    #回到qt顶层目录:cd ../../../

4.配置configure

动态库编译:
./configure -embedded arm -little-endian -host-little-endian -xplatform qws/linux-arm-g++ -prefix /opt/qt4.8.6 -release -shared -opensource -confirm-license -no-multimedia -no-audio-backend -no-webkit -nomake examples -nomake demos -nomake docs -nomake tools -no-qt3support -no-javascript-jit -no-script -no-scripttools -no-declarative -qt-zlib -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -no-openssl -no-nis -no-cups -no-dbus -qt-freetype -no-opengl -depths 15,16,24,32 -qt-gfx-linuxfb -qt-mouse-linuxinput

静态编译

./configure -embedded arm -little-endian -host-little-endian -xplatform qws/linux-arm-g++ -prefix /opt/qt4.8.6 -release -static -opensource -confirm-license -no-multimedia -no-audio-backend -no-webkit -nomake examples -nomake demos -nomake docs -nomake tools -no-qt3support -no-javascript-jit -no-script -no-scripttools -no-declarative -qt-zlib -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -no-openssl -no-nis -no-cups -no-dbus -qt-freetype -no-opengl -depths 15,16,24,32 -qt-gfx-linuxfb -qt-mouse-linuxinput

**解释:-prefix /opt/qt4.8.6 //为安装的路径,根据自己选择而定
-xplatform qws/linux-arm-g++ //交叉编译工具,修改后可以直接使用**

5.编译:make

6.安装:make install //这将会安装到指定的目录下/opt/qt4.8.6

7.配置环境变量:

方法一:

vi /etc/profile

文件末尾添加:

    # Thu Nov 23 08:55:07 CST 2017
    # Hisilicon Linux, Cross-Toolchain PATH
    export PATH="/opt/qt4.8.6/bin:$PATH"
    # 

使环境变量生效:
执行source /etc/profile
qmake -v //查看版本信息

方法二:
最简单的方式创建符号链接,类似于window的快捷方式

ln -s /opt/qt4.8.6/bin/qmake /usr/bin/arm-qmake

注:执行是root用户下,arm-qmake是自己定义的一个快捷方式名
查看下是否链接成功:arm-qmake -v //编译的时候直接用arm-qmake -xxx.pro 即可生成Makefile文件
输出:QMake version 2.01a
Using Qt version 4.8.6 in /opt/qt4.8.6/lib

8.移植Qt4.8.6的库到Hi3521a上

注:由于板子上只有16M,空间不足以移植这些库,本人采取了外置存储库的方式,配置外置环境变量即可关联了
拷贝过程中,链接文件可能无法复制,可以先把相关库移植过去再做软链接ln -s

8.1测试程序:用qmake生成Makefile文件,可以看看Makefile交叉编译工具是不是arm-hisiv300-linux-g++

    #在项目目录下执行:qmake xx.pro        //xx.pro工程名
    #make    
    #生成可执行文件如:hi3521a_qt_demo
    #file hi3521a_qt_demo   //查看是否为arm版的文件
    #查看hisi_qt_test使用的动态库:arm-hisiv300-linux-readelf -d hi3521a_qt_demo
    #把用到的库/opt/qt4.8.6/lib/* 移植到板子上(我只放到U盘,然后做链接,原理也是一样的)
ln -s /mnt/usb/qt4.8.6/lib/libQtGui.so.4.8.6 /lib/libQtGui.so.4
ln -s /mnt/usb/qt4.8.6/lib/libQtNetwork.so.4.8.6 /lib/libQtNetwork.so.4
ln -s /mnt/usb/qt4.8.6/lib/libQtCore.so.4.8.6 /lib/libQtCore.so.4
ln -s /mnt/usb/qt4.8.6/lib/libstdc++.so.6.0.19 /lib/libstdc++.so.6
ln -s /mnt/usb/qt4.8.6/lib/libgcc_s.so.1 /lib/libgcc_s.so.1

—–>>以上是把U盘下/mnt/usb/qt4.8.6/lib/* 链接到arm板上lib目录下了,有些库不是Qt库(如libstdc++.so.6.0.19、libgcc_s.so.1,在PC端目录/opt/hisi-linux可以搜索到),
再复制到U盘,链接可以自己写下脚本生成。(注意/mnt/usb/qt4.8.6/lib/是自己库的目录)
#在板子上配置环境变量,制定库和字体文件的位置
#vi /etc/profile
#在后面加上

export LD_LIBRARY_PATH=/mnt/usb/qt4.8.6/lib/:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=/mnt/usb/qt4.8.6/lib/fonts/
export QWS_DISPLAY="linuxFb:/dev/fb0"
export QT_QPA_PLATFORM="linuxFB:fb=/dev/fb0:size=1280x720:mmSize=1280x720:offset=0x0"

source /etc/profile //配置环境生效,这是临时的,重启需要执行

8.2解决海思图层显示QT问题:

    #初始化Hisilicon Framebuffer才能显示Qt界面,下面拿海思自带初始化图层的例子修改;
vi mpp/sample/hifb/sample_hifb.c

在mian()函数修改下让程序自动进入模式SAMPLE_HIFB_Compression();剩下的模式可以屏蔽掉。
在函数SAMPLE_HIFB_COMPRESS(void *pData)里的stCanvasBuf.UpdateRect.h = HEIGHT;下面写getchar();
//在此处暂停,然后去执行QT程序,不让其打开海思例子的图片。

8.3执行Qt

首先把例子后台运行:
./sample_hifb & //屏幕会变绿色
然后执行qt程序:
./hi3521a_qt_demo -qws

你可能感兴趣的:(海思平台)