zoukankan      html  css  js  c++  java
  • 【转帖】嵌入式4412开发板QT5.7编译安装到arm

    QT5.7.0+UBUNTU16.04+ARM-NONE-LINUX-GNUEABI4.8+busybox最小LINUX系统

    Orandragon记录

    本文转自迅为4412开发板群:http://topeetboard.com

    平台:iTOP-4412精英版+4.3寸屏

    有学东西写文章的习惯,毕竟都是入门,在这里记录一下安装过程,虽然可能短期内用不到了,但以后用到的时候可以作为参考。
    ********************************华丽的分割线***************************
    1、从网上下载所有最新的源码
    Ubuntu16.0 amd64版本第一个,这个就不要源码了,直接安装就好了
    QT5.7.0,万能的度娘一找就找到了(官网下载),注意是下载源码,linux版本的源码。ARM-NONE-LINUX-GNUEABI-GCC4.8,arm-***以后就这么写了,名字太长,这个选择源码或者选择编译好的都可以,有一个博客(http://blog.csdn.net/ee230/article/details/41513957)搜集到了从08-14版本的所有编译器版本,如果从官方下载比较费劲,还要注册啥的,(谁要有兴趣去把15,16下载下来,发我一份),大公司就是装逼,注册都这么费劲
    2、ubuntu16的安装就没什么可以讲得了,虚拟机一路下一步
    3、系统装好了,装一下辅助软件。Wine1.9,这个安装过程貌似有什么特殊需要注意的问题,ssh的安装,直接apt-get就好了,其实国外服务器也不是很慢的,我没有改服务器,下载速度500~600kbps还是可以接受的。ATTENTION:最新版本的ssh不支持旧版本的加密协议,导致客户端连接会出现问题,这个时候就该度娘出马了,问题好解决,不写了,自己搜一下一步一步跟着做。Wine安装完之后什么source insight呀、notepad++呀就全装上吧,你想装个QQ也行,把字库改一下,要不用不了,以后基本所有操作就在linux下进行了。
    4、编译器的安装,这个地方要安装两个编译器(如果你以后不想找麻烦的话),arm-***q09和arm-***q14(下文继续简化为q09和q14)装第一个编译器的原因是为了编译kernel(用q14当然也可以,期间你需要极其细心以及极具耐心的调试,我编译通过,耗时两天,新版编译器内联函数编译方法改变很大,所以要一点一点调试,当然有问题可以多交流~~),编译器就不重装了,安装过程也比较简单,直接解压到opt目录下然后配置一下环境就可以了(鉴于马上要编译qt,这个地方先把q09的环境注释起来,添加q14的环境),安装完成后打开控制台,输入arm双击tab,看看有没有很神奇的事情发生(出现了很多arm开头的命令,那说明你成功了)。

    5、tslib的编译
    编译tslib的历程异常曲折,这本来应该是最好编译的一个插件,但是因为版本太久了,2009年就停止更新了吧,其open函数凡是用到O_CREAT的都没有加第三个参数,2009年以后的arm-none编译器要求O_CREAT打开的文件必须要第三个参数,尼玛改来改去累死我了,然后我就惊奇的发现了4412光盘里道长已经给编译好了。。。。。。(4412光盘iTOP-4412精英版光盘资料8_源码_QtE以及qtopia2.2.0文件系统patch),直接拷过去用,然而又是版本的问题,没有与qt5.7.0很好的兼容,况且又没有源码,根本就没法调试嘛,失败。咋整,继续度娘,终于,找到了一个在qt5.5下编译ts的大神,提供了一份完美的源码,一点没动,q2014编译器编译直接通过,源码不难为大家,我直接放在压缩包里传给大家了,看一下我的编译过程(倒腾这个整整用了我一下午的时间)

     


    大爱的tslib呀,强行收藏。
    依然用人见人爱的脚本写编译过程,非常的舒畅:
    Tslib文件夹下新建文件vim configTslib14.sh
    内容:
    #!/bin/sh

    make clean && make distclean
    echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
    CC=/usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/tslib1.4 --cache-file=arm-linux.cache
    make && make install

    运行./configTslib14.sh
    编译安装完成,其实之前我是先编译好qt的,直接tslib复制到qt目录下模块编译,失败(到现在没有找到原因,大家可以尝试先编译qt5.7,然后再模块编译tslib),既然如此就重新打包编译把,直接编译到qt中去好了,所以这个地方可以省下大家的时间,我其实是先成功编译了一次的qt5.7,足足两个小时,结果发现tslib模块编译失败又返回来重新打包编译,所以这篇教程的顺序是先编译的tslib,也希望大家有兴趣研究一下模块编译,这样就可以随意的在qt5.7中增减模块,因为qt5.7最大的特点就是模块化,非常的方便,然而我却没有利用起来。继续教程~

    6、qt的编译
    这个地方我重新编译一下qt,可以给大家保存一些截图,因为第一次编译没有删掉那些没用的模块,足足编译出了140mb的库,尼玛哟什么鼠标键盘nfc啥都有,qt5.7里还带了什么purchasing模块,没错,就是购买模块,有点像apple pay,这些我们都不要,所以我重新编译一下,刚好过程可以screenshot一下了,注意qt5.7必须要q2014的编译器哦,因为qt5.7源码是用stdc++11 版本写的(2011年出的c++新规则,你用q2009怎么可能编译通过,之前在这个地方犯2很久),开始操作了。
    1、源码解压,个人没有好习惯,源码就在桌面上放着,个人还是习惯图形界面跟控制台一起操作,你要是在控制台root用户下tar,文件夹所属是root,图形界面的用户是修改不了其中的文件的(当然可以chmod 777一下,但还是很麻烦),所以,简单操作,撇开控制台,右击源码压缩包,直接extract here解压
    留下压缩包以备后用,这里可以看到控制台tar的文件夹旁边都有一个小锁,普通用户只可以读不可以更改的。

     


    Ctrl+alt+t打开控制台,vim修改qt-everywhere-opensource-src-5.7.0/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf文件,开始添加这三句,告诉Qmake咱们的平台,这些脚本的解释在官网都有,有兴趣的自己去看一下

     


    /********************************新加入***************************/
    QT_QPA_DEFAULT_PLATFORM = linux #eglfs
    QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
    QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a

     

    编译器名字加上none,当然你用友善编译器、elf编译器都可以,根据名字修改,保存。

    在qt-everywhere-opensource-src-5.3.0/目录下为方便配置建立一个autoconfig.sh文件(直接文件夹右击新建,双击打开),内容为:
    #!/bin/sh
    ./configure
    -v
    -prefix /opt/qt5.7.0
    -release
    -opensource
    -make libs
    -xplatform linux-arm-gnueabi-g++
    -optimized-qmake
    -pch
    -qt-sql-sqlite
    -qt-libjpeg
    -qt-zlib
    -no-opengl
    -skip qt3d
    -skip qtcanvas3d
    -skip qtpurchasing
    -no-sse2
    -no-openssl
    -no-nis
    -no-cups
    -no-glib
    -no-iconv
    -nomake examples
    -nomake tools
    -skip qtvirtualkeyboard
    -I/opt/tslib1.4/include
    -L/opt/tslib1.4/lib

    exit
    最后两行为tslib的安装位置,根据需要改动
    其实一直没有搞懂nomake和skip的含义,我感觉用起来一样,上面的这些内容就是告诉qt需要哪些模块,不需要哪些模块,及其安装路径等等,具体的可以输入./configure --help查看。有些模块没有opengl的话要进行修改,否则编译不通过。这些模块我都用不到,全部skip掉。还有examples,这个建议大家编译进去吧,里边的小例子可以直接用于测试,我已经编译过了,所以直接nomake,特别注意,所有的连字符/前边都要加一个空格,exit前要回车,sh文件格式很关键,多一个空格都会出错,大家自己摸索一下,千万不要乱打空格,即使在每行的最后也不能有空格。-no-iconv 这个必须要加上,否则字库会出问题,我们暂时不用这个模块。

    设置完成后,运行:
    ./autoconfig.sh
    等待qmake配置一会儿,检查一下弹出的模块列表看有没有少的多的
    然后就是套路了
    make
    哇啦哇啦#¥……%&……*&()*#%¥%……&(),等待一个小时左右

     



    编译的期间,再去qt官网上把linux的ubuntu版本qt5.7下载下来,这个不要源码,下载那个.run的文件,下载到电脑上,直接双击安装(注意:qt5.7的linux版本只能在ubuntu16上安装,ubuntu12上是打不开的,不要用控制台安装,直接双击打开安装就可以了,默认是安装在/home路径下,以后用起来方便)

    好了,源码编译完成了
    make install安装到opt目录下面
    安装完成。

     


    这里边我们用的就是plugins lib include
    还没有完成,tslib还没有以插件的形式安装进qt
    我们进入这个文件夹cd qt-everywhere-opensource-src-5.7.0/qtbase/src/plugins/generic/tslib
    运行我们刚刚编译出的qmake /opt/qt5.7.0/bin/qmake
    创建好makefile
    然后make
    make install

    下面就可以打包啦,tar一下(tslib和qt5.7.0),插上sd卡复制到开发板再解压到开发板的opt目录(没有的话就自己建一个),根据道长的qt视频随便编译一个程序,我拖了一个大按钮上去,拷贝到开发板运行测试一下

     

    我们要的就是这个.so,我们看到已经自动安装在里边啦
    到opt目录下 tar –zvcf qt.gz qt5.7.0/
    复制到u盘
    顺便从ubuntu里复制几个好看的字库 我这里复制了两个 ukai.ttc uming.ttc,感觉不错哦,复制带中文字库的,以后写程序就用它了,除非你不用中文
    其他乱七八糟的都是我常年不整理的遗留物

     


    下面的操作转战开发板,开发板搭载的系统就是道长提供的kernel和busybox,这里busybox希望用最新版本的话就去官网下载一个自己编译吧,不操作了,一切从简。
    放进开发板的opt目录下,没有就自己新建一个

     

    搭建环境

    export TSLIB_ROOT=/opt/tslibexport QT_ROOT=/opt/qt5.7.0

    export TSLIB_TSDEVICE=/dev/input/event2
    export TSLIB_TSEVENTTYPE=input
    export TSLIB_CALIBFILE=/opt/tslib/pointercal
    export TSLIB_CONFFILE=/opt/tslib/etc/ts.conf
    export TSLIB_PLUGINDIR=/opt/tslib/lib/ts
    export TSLIB_CONSOLEDEVICE=none
    export TSLIB_FBDEVICE=/dev/fb0


    export QWS_MOUSE_PROTO=tslib:/dev/input/event2
    export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/
    export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
    export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
    export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
    export QT_QPA_GENERIC_PLUGINS=tslib

    (我的tslib1.4改名为tslib了)
    这是我的设置,设置内容官网上讲解非常详细,自行查看,按照自己的实际操作
    配置完成source更新一下环境

    然后打开opt/tslib/etc下的ts.conf,把第二行的注释去掉,把ts设置成输入模式

    好啦,配置完成了有没有很激动,赶紧做个程序试一下,按照道长的qt教程去电脑端在qtcreator里拖一个大按钮进去,qmake一下,拷进开发板,./test 运行一下,心哇凉哇凉的,又有错误,说缺少stdc++.so.6,这是因为我们kernel的环境下没有这个库,好解决,去编译器下的目录复制一个进来就行了,放到环境目录的任意一个目录下,以后写程序难免会用到开发板没有的库,解决方法有两个,一个是复制一个库进来,一个是静态编译。其实对于qt这个系统来讲,静态编译应该是非常好的一种解决方法,可以省下很大的空间,毕竟我们就只运行一个程序。但是,如果要采用静态编译,我们必须把qt编译成静态的,这样才能有静态库来编译我们的静态程序。这里不演示了,毕竟我的板子还是16g内存的哈哈哈,不在乎这点小空间(当然安装程序的空间需要你重新编译uboot来多分配一点,否则就只有300mb左右哦,300mb也够用了)。

    回正题,运行:
    我们先运行一个tslib的初始化程序,在opt/tslib/bin 里

     

    这个程序会校准触摸屏,并把校准信息储存在profile文件中指定的目录下边

     

    好的校准完成了
    运行一下我的大按钮:./test
    老子的字不见了,看一下超级终端,字库错误,哦,忘记把字库放进去了,刚才存的字库拷贝到profile指定的字库文件夹中,再运行,字出来啦,大按钮太丑了。找了个例子拍了个照片,好啦,完成了。

     

  • 相关阅读:
    git常用命令总结
    chrome浏览器使用技巧
    chorme浏览器的Access-Control-Allow-Origin拦截限制
    基于HP DL388 Gen 9服务器基本配置(ESXI 6.5)
    c# winform 窗体之间的传参
    <<测试驱动开发的艺术>>读书笔记
    <<人性的弱点>>读书笔记
    一个很奇怪的重复链接lib的问题
    redis集群的一些笔记
    <<敏捷开发>>读书笔记
  • 原文地址:https://www.cnblogs.com/topeet/p/5711957.html
Copyright © 2011-2022 走看看