zoukankan      html  css  js  c++  java
  • 5.8 的移植

    本来没想弄那么高的版本,一般嵌入式设备都是追求稳定并不是高版本,一般情况都是QT都是4.8版本的。但是之前群里面有小伙伴竟然不会弄,我就开始了交叉编译之路。猛然发现还是蛮痛苦的,用时5天,版子成功运行。目前发现了1个问题我处理不了,就是隐藏鼠标指针。弄的明白的回复一下吧,求小伙伴们帮忙吧!授之以鱼不如授之以渔,特别具体的流程请自行体会吧。

    一 )准备工具。

    1)QT 源码 

    下载地址: http://download.qt.io/official_releases/qt/

    选择QT版本

    2)交叉编译工具链。

    工具链的版本很多,根据命名规则有分有很多架构种类。

    这里有一篇简单介绍各种工具链博客:http://www.veryarm.com/296.html

    由于我的公司的硬件架构原因我选择了 arm-Linux-gnueabihf-gcc

    其他的编译链我也没有,我就把这个工具链的下载地址也发一下吧!

    工具链下载地址:https://releases.linaro.org/components/toolchain/binaries/

    版本,我选择了4.9版本的。

    这2个文件之后都会用得到。

    3)linux 32系统 我用的是乌班图17.04的

    问题 1 .这里使用64位系统,去编译QT会报错。

    arm-none-linux-gnueabihf-gcc:No such file or directory

    原因是交叉编译工具链缺少32位库文件安装一下这个文件就好。建议使用32位系统就好。

     具体命令:sudo apt-get install lib32z1 lib32stdc++6

    4)触摸屏支持的tslib

    具体就是配置一下编译器和输出位置 这个错误还是比较少基本一次就过。

    注意:配置完后要注意第一次执行make 是生成各种可执行程序和库文件,还要执行一次make install 将编译生成的才产物输出到你刚刚配置的输出路径。

    不会的小伙伴再来个比较详细的博客:http://blog.csdn.net/liuqiqi677/article/details/6315565

    交叉编译工具链 = 工具链

    二)搭建编译环境。

    1)交叉编译链环境变量配置具体做法,请百度搜索“交叉编译环境搭建”。

    问题 2 .我这里出现一个问题就是工具链我放在用户目录下了,每当我重新开启一个终端的时候环境变量就会被刷掉,工具链一定要放在根目录的文件夹下面。注意一定是根目录。

    2)配置QT源码。

    1.修改源码包目录下的/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf文件 将编译器换成刚刚配置成功的工具链

    # modifications to g++.conf

    QMAKE_CC               = arm-linux-gnueabihf-gcc

    QMAKE_CXX                   = arm-linux-gnueabihf-g++

    QMAKE_LINK             = arm-linux-gnueabihf-g++

    QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++

    # modifications to linux.conf

    QMAKE_AR                        = arm-linux-gnueabihf-ar cqs

    QMAKE_OBJCOPY            = arm-linux-gnueabihf-objcopy

    QMAKE_NM               = arm-linux-gnueabihf-nm -P

    QMAKE_STRIP                 = arm-linux-gnueabihf-strip

    load(qt_config)

    2.退回源码目录的根目录下执行脚本 ./configure  -help 查看具体配置选项文档。
    英文不太好的小伙本给你们来个福利博客
     
    在当前目录下面创建脚本,根据刚刚查看的配置文档配置自己的
    伸手党脚本内容:

    ./configure

    - extprefix /home/agoulinux/qt5.8_arm     很多博客都是用prefix参数可是我使用这个参数并没用输出东西

    -release

    -make libs

    -xplatform  linux-arm-gnueabi-g++

    -optimized-qmake

    -pch

    -qt-sql-sqlite

    -qt-libjpeg

    -qt-libpng
    -tslib

    -qt-zlib

    -no-opengl

    -no-sse2

    -no-openssl

    -no-nis

    -no-cups

    -no-glib

    -no-iconv    加上这个参数吧 ,我编译后运行程序会报错提示iconv_openfailed  或者在添加库,这个东西没用

    -no-separate-debug-info

    -nomake examples-nomake tools

    -no-pkg-config

    -I/home/agoulinux/tslib1.4/include      tslib的make install输出目录。

    -L/home/agoulinux/tslib1.4/lib            

    3 )配置成功 可是编译 执行 make   公司电脑用了大概半个多小时编译完成 ,然后make install 输出产物。

    到这里基本上完成所有需要的东西。开发板如果不实用QML 的话只需要上面红色框出来的文件夹,其他的可以裁剪掉。其实里面很多东西都可以裁剪掉的,

    我嫌麻烦,就都复制了。(这个目录不要动一会还要使用  复制一直份进行裁剪)

    三)配置根嵌入式设备的文件系统。

    1.将刚刚生成的tslib1.4和qt5.8_arm(裁剪过后的) 目录,复制到文件系统的/opt 下

    2.配置嵌入式系统的环境变量/etc/profile中

    (1).查阅文档配置tslib的环境变量。在源码目录中找到Readme有一栏 (源码:https://github.com/kergoth/tslib

    environment variables

    (2).查阅文档配置QT环境变量

    配置文档:http://doc.qt.io/qt-5/embedded-linux.html

    好吧小伙伴们英文不好来个翻译过的文档博客(翻译的不太好,能看):http://blog.csdn.net/chongzi865458/article/details/54406865

    (3).伸手党的环境变量配置:

    export TSLIB_ROOT=/opt/tslib1.4
    export QT_ROOT=/opt/qt5.8_arm
    export TSLIB_TSDEVICE=/dev/input/event0
    export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0:rotate=180:invertx and inverty #这个是触摸屏幕的旋转,和颠倒
    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 QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event0
    export QT_QPA_FB_TSLIB=1
    export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/
    export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
    export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
    export QT_QPA_FONTDIR=$QT_ROOT/fonts
    export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event0
    export QT_QPA_FB_HIDECURSOR=1  #说好的隐藏呢

    前期的工作都做完了我们要开始第做一个QT程序让他跑起来吧,激动人心的第四步开始了。

    四)配置QtCreator IDE,完成QT程序并运行。
    1).下载QtCreator :http://download.qt.io/official_releases/qtcreator/ 

    看你喜欢的并且和你虚拟机的位数匹配的run文件就好,复制到乌班图 直接执行就好。

    2).配置QtCreator 如图:编辑器选择我们的工具链中的gcc

    配置QMAKE 选择我们刚刚编译出来的QMAKE

    配置kit套件

    3).创建项目 。

    4).重点来了 。这里我编译会报错因为编译参数问题,一开始不知道怎么修改qmake参数,配个图给各位小伙伴

    伸手党的参数:-spec linux-arm-gnueabi-g++

    5).将编译输出可执行文件复制到你的嵌入式系统当中 

    6)写一个脚本进行触摸屏的校准和执行我们的程序

    伸手党的脚本:

    if [ -f $TSLIB_ROOT/etc/pointercal ] ; then
            if [ ! -s $TSLIB_ROOT/etc/pointercal ] ; then
                    rm $TSLIB_ROOT/etc/pointercal
                    $TSLIB_ROOT/bin/ts_calibrate
            fi
    else
            $TSLIB_ROOT/bin/ts_calibrate
    fi

    chmod +x handset #你的应用程序
    ./handset &

    7)运行脚本,我觉得你运行后会提示各种库文件丢失,或者glibc版本不对,没关系还记我们下载工具链的时候那个图的2号箭头不,下载下来

    将这个lib裁剪后替换你自己嵌入式系统lib文件

    伸手党可以看下我的库文件裁剪的:

    [root@buildroot /lib]# ls -l
    total 27376
    -rwxr-xr-x    1 root     root        724360 May 20 03:43 ld-2.19-2014.08-1-Git.so*
    -rwxr-xr-x    1 root     root        724360 May 20 03:43 ld-linux-armhf.so.3*
    -rwxr-xr-x    1 root     root       8802523 May 20 03:43 libc.so.6*
    -rwxr-xr-x    1 root     root        155170 May 20 03:43 libcrypt-2.19-2014.08-1-git.so*
    -rwxr-xr-x    1 root     root        155170 May 20 03:43 libcrypt.so.1*
    -rwxr-xr-x    1 root     root         90509 May 20 03:43 libdl.so.2*
    -rw-r--r--    1 root     root           132 May 20 03:43 libgcc_s.so
    -rw-r--r--    1 root     root       1494029 May 20 03:43 libgcc_s.so.1
    -rwxr-xr-x    1 root     root       1510961 May 20 03:43 libm.so.6*
    -rwxr-xr-x    1 root     root        505104 May 20 03:43 libnsl.so.1*
    -rwxr-xr-x    1 root     root         80433 May 20 03:43 libnss_dns.so.2*
    -rwxr-xr-x    1 root     root        214424 May 20 03:43 libnss_files.so.2*
    -rwxr-xr-x    1 root     root        855293 May 20 03:43 libpthread.so.0*
    -rwxr-xr-x    1 root     root        307548 May 20 03:43 libresolv.so.2*
    -rwxr-xr-x    1 root     root        172465 May 20 03:43 librt.so.1*
    -rwxr-xr-x    1 root     root       5475009 May 20 03:43 libstdc++.so*
    -rwxr-xr-x    1 root     root       5475009 May 20 03:43 libstdc++.so.6*
    -rwxr-xr-x    1 root     root        198041 May 20 03:43 libthread_db.so.1*
    -rwxr-xr-x    1 root     root       1023306 May 20 03:43 libubsan.so.0*
    -rwxr-xr-x    1 root     root         30613 May 20 03:43 libutil.so.1*

    在次运行完美哈哈:

    唯一闹心的问题就是 :

    export QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event0

    将触摸屏的点击事件配置成qt的鼠标点击事件以后会有一个光标,

    export QT_QPA_FB_HIDECURSOR=1  #说好的隐藏呢 反正我是隐藏不掉。

    求解吧!有知道问题的小伙伴给我回复!我也不用QT5.8嘿嘿 ,重要的事情3变 我不用5.8  我不用5.8  我不用5.8

  • 相关阅读:
    《程序是怎样跑起来的》读书笔记——第十一章 硬件控制方法
    《程序是怎样跑起来的》读书笔记——第十章 通过汇编语言了解程序的实际构成
    《程序是怎样跑起来的》读书笔记——第九章 操作系统和应用的关系
    《程序是怎样跑起来的》读书笔记——第八章 从源文件到可执行文件
    《程序是怎样跑起来的》读书笔记——第七章 程序是在何种环境中运行的
    Linux入门之常用命令(15) lsof
    关于volatile 最完整的一篇文章
    Redis缓冲区设置
    设计模式之【抽象工厂模式】
    设计模式之【工厂模式】
  • 原文地址:https://www.cnblogs.com/yr-linux/p/6895015.html
Copyright © 2011-2022 走看看