【转帖】嵌入式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精英版光盘资料\08_源码_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指定的字库文件夹中,再运行,字出来啦,大按钮太丑了。找了个例子拍了个照片,好啦,完成了。

【转帖】嵌入式4412开发板QT5.7编译安装到arm的更多相关文章
- 嵌入式4412开发板学习知识-Linux系统基础知识
1. 什么是Linux系统编程 Linux系统编程分为三个部分:系统调用.C库和C编译器. 系统调用系统编程的基础是系统调用,也结束于系统调用.在带有操作系统的嵌入式开发中,需要从操作系统申请一些服务 ...
- 迅为4412嵌入式安卓开发板兼容3G网络|4G网络
iTOP-Exynos4412开发板内置有无线 WIFI 模块.Bluetooth.GPS.Camera.3G等模组,陀螺仪等,支持 HDMI1.4(1080P/60Hz)显示,客户可以直接从开发平台 ...
- 【开学季】自学嵌入式开发|四核开发板|4412开发板|ARM+Android+linux技术
淘宝店铺:迅为开发板http://arm-board.taobao.com 网站:http://www.topeetboard.com QQ咨询:2551456065 电话咨询:010-5895758 ...
- [转帖]4412开发板/4418开发板Android4.4.4实现ble功能
本文转自迅为论坛:http://bbs.topeetboard.com ①.4418开发板实现ble功能方法: 在4418/android/device/nexell/drone2/device.mk ...
- 迅为三星Exynos 4412开发板四核Cortex-A9ARM安卓linux开发板
开发板光盘资料包含:原理图(PDF格式).底板PCB(Allegro格式).驱动程序源码.芯片和LCD数据手册.开发环境.产品使用手册. 4412开发板简介: iTOP-Exynos4412开发板采用 ...
- 4412开发板升级4.2之后改了logo开机后屏幕闪解决办法
荣品4412开发板升级到4.2请注意增加虚拟机内存. 问:荣品4412开发板升级到Android4.2之后,改了logo.4412板子开机后,过一会屏幕就一闪一闪,是什么原因? Android4.2编 ...
- 【转帖】4412ARM开发板学习笔记(一)
本文转自迅为论坛:http://www.topeetboard.com 新手在进行开发学习前,建议先看01-迅为电子开发板入门视频.对开发板和开发环境有一定的了解后,不要盲目接线开机.以下是个人的一点 ...
- 嵌入式Linux开发板
嵌入式Linux开发板开发介绍: iTOP-4412嵌入式Linux开发板搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,独家配备三星S5M8767电源管理,配备Andro ...
- 基于讯为4412开发板的Android开发流程
讯为4412开发板 使用三星2410芯片,基于arm9架构,由于自己电脑硬件的局限,只能跑Android4.0.3系统. 1.Uboot这个直接使用官方镜像烧写就可以了,一般情况不用去重复烧写. 略 ...
随机推荐
- 基于Metronic的Bootstrap开发框架经验总结(11)--页面菜单的几种呈现方式
在常规的后台管理系统或者前端界面中,一般都有一个导航菜单提供给用户,方便选择所需的内容.基于Metronic的Bootstrap开发框架,是整合了Metroinc样式,以及Boostrap组件模块的内 ...
- 常用html、CSS、javascript前端命名规范
无论是从技术角度还是开发视角,对于web前端开发规范文档都有一定规范,本文就css3和html5的发展前景总结了一系列的web开发文档,仅供大家参考. 规范目的: 为提高团队协作效率, 便于后台人员添 ...
- Java--Jsp内置对象列表
- 【夯实PHP基础】PHP发送邮件(PHPMailer)
本文地址 参考地址 分享提纲: 1. 概述 2. 编写代码发送邮件 3. 参考文档 1. 概述 本文是讲利用邮件类库 PHPMailer来发送邮件方法. 我们在做project的时候常常需要邮件的功能 ...
- Jq基础简介
jQuery就是用原生js写出的框架集(Write less do more ) 1.需要注意的问题?(1).jQuery语法需要重新学习(2).jQuery需要注意版本之间的兼容性 (3)不是越新的 ...
- 基础算法(javascipt)总结
一.排序: 1.选择排序: 2.交换排序: 3.插入排序 二.查找: 三.节点遍历: 四.数组去重: 时间复杂度:找出算法中的基本语句->计算基本语句的执行次数的数量级->用大O记号表示算 ...
- Linux0.11内核--文件系统理论知识
1.文件系统介绍 一个简单的文件系统大致需要这么几个要素: ● 要有地方存放Metadata: ● 要有地方记录扇区的使用情况: ● 要有地方来记录任一文件的信息,比如占用了哪些扇区等: ● 要有地方 ...
- XML 概述 (可扩展标记语言)
XML:eXtensible Markup Language 可扩展标记语言 概念:可扩展:xml中所有的标签都是自定义的.没有预定义的. 功能: 存储数据 ...
- IOS-WebViewJavascriptBridge使用说明
下面来说一下WebViewJavascriptBridge在ios端怎么样使用. 首先确保一份已经配好功能的html文件. 1.初始化一个webview(viewdidload) UIWebView* ...
- 12-返回指针的函数&&指向函数的指针
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...