Linux编译移植Qt4的环境_在OMAPL138平台
Linux编译Qt4的环境_OMAPL138
手里有一块创龙OMAPL138的板子,我要在上面成功移植Qt环境和触摸屏幕,这是我第二次进行Linux的Qt环境移植,发现了很多问题,需要重新整理。 我编译了,Qt5版本以上的,结果就是不成功,总是死在PDA问题上,在 configure文件上加入-xcb的选项,就算我安装了xcb所有的库文件,最后还是出问题,我还在研究之中,等着编译Qt5通过之后,我会重新写一个Linux编译Qt5的环境。
本文不适合配置Qt5的环境,不要用在Qt5上
准备
交叉编译环境(一定要找到适合你板子的交叉编译环境)
Qte嵌入式源代码,文件的名字如同:qt-everywhere-opensource-src-4.8.6.tar.xz
我的环境:
PC 机: Ubuntu16.04 (64bit)
OMAPL138提供的交叉编译工具链:arm-arago-linux-gnueabi http://www.veryarm.com/arm-none-linux-gnueabi-gcc
- PS:不同平台的交叉编译工具链不同,基本上芯片厂商出一个ARM芯片,就配套一个交叉编译工具链。
- PS:最好检测板子是否支持整个工具链的方式就是编写一个最简单的hello word程序,然后到目标板子上运行,能够运行出来就说明这个交叉编译环境对劲儿。
Qt源码: qt-everywhere-opensource-src-4.8.6.tar.gz
*下载地址:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt/ 进入目录./4.8/4.8.6/single 找到这个文件。
tslib 1.4 触摸屏幕支持库:tslib1.4
交叉编译环境配置
其实也可以不进行配置,反正后面我们在编译器名称的时候都用绝对路径
在本文中我就直接写交叉编译环境的路径按照我电脑上的配置了,如果配置你的话注意灵活修改路径:
我的放在了:/home/delvis/opt/toolschain/omapl138 文件夹中
编译tslib1.4
对触摸屏信号的获取、校正、滤波处理,均采用开源的tslib,本文采用的tslib版本为最新的tslib1.4(可以从本文提供的链接中下载tslib1.4)。
1.将下载好的tslib1.4拷贝到/home/lz/transplant目录下(可以根据自己的系统选择某一目录),然后执行解压缩命令
tar -vxf tslib-1.4.tar.gz
切换到tslib目录:
cd tslib
安装交叉编译tslib必须的一些工具(可以先查看是否已安装,ubuntu16.04自带这些工具,可跳过)
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
2.利用脚本写编译过程
在tslib文件夹下新建文件configTslib14.sh
touch autoconfig.sh
vim autoconfig.sh
chmod 777 autoconfig.sh
内容如下:
#!/bin/sh
make clean && make distclean
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
CC=/home/delvis/opt/toolschain/omapl138/arm-none-linux-gnueabi
./configure --host=arm-linux --prefix=/home/delvis/opt/tslib1.4 --cache-file=arm-linux.cache
make && make install
这里面需要注意的地方就是:
- CC=/home/delvis/opt/toolschain/omapl138/arm-none-linux-gnueabi 这个位置一定要修改成你的交叉编译环境的路径。
- --prefix=/home/delvis/opt/tslib1.4 这个是编译好输出的路径,这个位置要注意了,很多网上的教程输出到的/opt/tslib1.4 这个路径,但是这个/opt的文件路径需要的权限是root,而我们编译运行的时候的路径没有使用root用户或者没有加sudo,所以这里推荐不要直接输出到/opt文件夹,而是自己的用户文件夹。
然后运行
./autoconfig.sh
执行结束后,我们查看一下是否安装成功,执行命令:
ls /home/delvis/opt/tslib1.4
如果出现bin,etc,include,lib这4个目录,如下图所示,说明交叉编译并安装tslib成功。 这个先放在这里了。
然后开始我们的重头戏,交叉编译Qt
交叉编译QT4.8.6
交叉编译Qt成功之后,编译后的文件需要应用两个位置,一个部分需要移植到我们的开发板上,另一个部分需要把编译成功的库配置到我们运行QtCreator的PC机上,两个部分只有统一了才不会出问题。
1)准备好Qt的源码文件
将下载的qt-everywhere-opensource-src-4.8.6.tar.gz执行如下命令解压:
tar -vxf qt-everywhere-opensource-src-4.8.6.tar.gz
cd qt-everywhere-opensource-src-4.8.6
2)配置源码文件
创建架构信息:
- 进入架构信息路径 (qt4的源码路径一般是)
cd ./qtbase/mkspecs/qws
- 创建一个文件夹(ps: 预告以下这个文件名会影响到后面的配置,这个东西我搞了很久)
mkdir omapl-g++
- 进入这个文件夹并创建两个文件
cd omapl-g++; touch qmake.config qplatformdefs.h
- 修改qplatformdefs.h ,直接把下面这个粘贴上去,只有这一句。
#include "../../linux-g++/qplatformdefs.h"
如果发现在编译过程中提示找不到qplatformdefs.h整个文件,就在mkspec/qws文件夹的其他架构信息的文件夹,看看人家的怎么写的是什么路径,基本上就是你的路径。
- 修改交叉编译架构用到的信息:
gedit qmake.conf
在qmake.conf文件中需要注意以下信息:
QMAKE_CFLAGS_RELEASE += O2 -march=xxxxx,就是整个march要注意自己的平台是什么架构的,比如说arm9基本上就是arm5te,cortexA8都有不一样的架构,整个地方必须写正确,否则当我们搭建好交叉编译环境编译Qt工程然后运行的时候,就会出现illeagle instruction. 的错误提示。也有些配置文件没有指定这个信息,最好也写上。
我在这里的时候,即便是配置了交叉编译环境,还是提示arm-linux-gnueabi-gcc找不到,而我单拿出来在命令行上面 arm-linux-gnueabi-gcc -v 的时候还能显示出来,我换了四种方法配置交叉编译环境,重启N次还是不见效,所以我在qmake.config文件上做了手脚,使用绝对路径进行配置,没想到编译通过了,所以我建议在qmake.config文件上使用绝对路径。
后面的include也是,看看mkspec/qws/中的寻文件的路径是什么,可能是前一层的目录,也可能是前两层的目录。
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linuxfb #eglfs
#Compiler Flags to take advantage of the ARM architecture
#Run the linux terminal command "arch" to see the detail your target cpu arch information.
QMAKE_CFLAGS_RELEASE += -O3 -march=armv5te
QMAKE_CXXFLAGS_RELEASE += -O3 -march=armv5te
include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-gcc
QMAKE_CXX = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++
QMAKE_LINK = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++
QMAKE_LINK_SHLIB = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-objcopy
QMAKE_NM = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-nm -P
QMAKE_STRIP = /home/delvis/opt/toolschain/omapl/arm-arago-linux-gnueabi/bin/arm-arago-linux-gnueabi-strip
load(qt_config)
3)创建configrue的执行文件
回到qt的顶层目录,创建一个脚本文件,用于生成Makefile,执行命令
gedit run.sh
chmod 777 run.sh
输入下面内容并保存:
./configure -prefix /home/delvis/work/qt-arm-4.8.6 -embedded arm -xplatform qws/omapl138-g++ -no-webkit -qt-libtiff -qt-libmng -no-neon -qtlibinfix E -nomake examples -lrt
其中
-prefix /home/delvis/work/qt-arm-4.8.6代表我们编译完QT后要安装地址(这个文件需要用到两个地方);你可以根据自己需求进行配置编译,去掉不需要的部分,留下需要的部分,比如:增加-tslib代表QT对触摸板的支持,-I 和 -L后面分别为为第一步编译tslib的include和lib的安装目录。 (这里暂时不给这些)
执行命令:(这里推荐用sudo,管理员权限进行配置和编译,很多小伙伴遇到工具链中有一个东西没有调用的权限,结果搞了好久才搞明白,所以这里为了防止发生这样的问题,我们直接使用sudo)
sudo ./run.sh
上述命令自动生成Makefile文件。
*)说几个坑
- 在编译之前需要检查一下Qt的编译环境有没有配置好,主要还是一下几个方面:
- 在命令行输入: export
- 然后输出几个找到QMAKESPEC这个,如果有这个,我们就要把它删除掉,否则就会很蛋疼。我们使用unset QMAKESPEC 这个命令,把这个环境变量在当前的命令窗口下删除,这样就不影响我们编译了。
还有一个比较重点的坑,就是我们上面提到的mkdir omapl-g++,如果我们对Qt源文件下的配置文件不加修改,那么就会报错:undefined reference to `QInotifyFileSystemWatcherEngine::create()
查找相关资料,查到这个解决方法,看画红圈的位置,还有其他网站提供的解决方案,加入arm-linux字符,但是在我这里依然不好使。后来我想明白了,经过实验也是正确的,这些解决方法没有给定原理在哪里。如图:
我们在mkspec/qws中创建了文件夹(架构信息)的名字叫做omapl-g++,所以我们这个位置需要改的信息应符合我们这个omapl-g++这个文件夹的名字
在Qt根目录下:
vim ./src/corelib/io/io.pri
找到
linux-*
这一块,然后改成inux-*|omap*{
这个意思就非常明显了,我们在mkspec/qws创建的文件夹的名字叫做omapl-g++ 那么需要在这里制定信息也是要匹配这个名字的,所以增加
omap*
这样的通配符,如果你是在mkspec/qws中创建的是zynq-g++ 那么显而易见那么增加的应该是zynq*
或者zynq-g*
都行。
4)开始编译
执行命令启动编译:(8线程编译,如果你的CPU受不住8线程你可以用双线程 -j2参数,-几就是几线程编译)
sudo make -j4
我的大概能编译10分钟左右,此时CPU利用率达到100%,温度如果是笔记本的话,超级高。编译时间根据你的配置多少来决定。编译的过程不可能是一帆风顺的,总会出现各种各样的错误,如果出现编译错误,那么就去百度解决。
编译结束后,执行安装命令:
sudo make install
我们切换到-prefix设定的目标目录下看看是否安装成功:
cd /home/delvis/work/qt-arm-4.8.6
ls
如果在bin目录出现了qmake基本上就成功了。
配置PC的QtCreator
这个部分不在赘述,我找到http://blog.csdn.net/u012175418/article/details/52704734 引用这个博客的“设置QT的交叉编译环境”,部分,按照这个步骤在PC机的Qt上面配置好我们刚编译的组件和刚刚编译Qt的交叉编译环境。
拷贝文件到目标板并配置环境
1)传输Qt4.8.6到开发板
就是把我们刚才编译的环境拷贝到我们的目标板的目录下,可以使用FTP,可以使用OTG挂在U盘的方式,我喜欢使用SSH协议的scp命令。
sudo scp -r /home/delvis/work/qt-arm-4.8.6 root@192.168.2.103:/opt
输入密码之后就可以把整个文件夹传输到开发板上面了。
2) 配置开发板的环境
我们传输完毕之后,则需要在开发板上设定环境,当我们运行qt程序的时候才能寻找到这些Qt库文件。
打开
vi /etc/profile
增加以下,需要注意的是QT_ROOT,写对Qt的路径,还有TSLIB_ROOT编译的是tslib的路径。
export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt-arm-4.8.6
export TSLIB_TSDEVICE=/dev/input/event2
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 QWS_MOUSE_PROTO=tslib:/dev/input/event2
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_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
完成之后,更新一下环境。
source /etc/profile
完成配置。
3)测试
我们利用Qt Creator制作一个简单的界面,然后编译出可执行文件,讲可执行文件传输到目标板子上面执行,我们的可执行程序叫做TestEM,需要qws参数。
./TestEM -qws
然后就可以看见界面了。
参考文献:
[1] 德州仪器手册. Building_Qt. 德州仪器WIKI.
[2] Qt官网forum. Error in cross compilation for ARM OMAP35x development kit). Qt官方Forum.
[3] BigSam78. ARM 指令集版本和ARM 版本. 新浪博客.
版权声明:
1. 本文为MULTIBEANS团队研发跟随文章,未经允许不得转载。
2· 文中涉及的内容若有侵权行为,请与本人联系,本人会及时删除。
3· 尊重成果,本文将用的参考文献全部给出,向无私的工程师,爱好者致敬。
Linux编译移植Qt4的环境_在OMAPL138平台的更多相关文章
- Linux编译移植Qt5的环境_Xillinx的ZYNQ平台
Linux编译Qt环境 2017年的十一假期,足不出户,一个人在教研室里面搞Qt的移植.我手里面有Samsung的CortexA8,Samsung的 CortexA53还有Ti的Sitara系列的AM ...
- Linux编译移植Qt5的环境_OMAPL138平台
Linux编译移植Qt5_OMAPL138 [导语]:昨天编译Qt5各种失败,各种离奇的错误在Google上面也搜索不到,真是让人"蛋疼菊紧",今天把所有的环境全部清理干净,也重新 ...
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- 重要:Linux下IDE--KDevelop (用来跟踪调试C++) Ubuntu下QT4开发环境的搭建及初体验
Linux下安装Qt4有两大问题,一是环境变量,二是IDE(集成开发环境).安装Qt4也有两种方法,一种是apt-get,一种是下载源码包,而后 一种方法已经人证实是最有可能不好使的方法.所以我最终采 ...
- Linux基础环境_安装配置教程(CentOS7.2 64、JDK1.8、Tomcat8)
Linux基础环境_安装配置教程 (CentOS7.2 64.JDK1.8.Tomcat8) 安装包版本 1) VMawre-workstation版本包 地址: https://my.vmw ...
- 二、linux编译环境的搭建
1.linux编译工具安装 vim安装:apt-get install vim 注意:使用C语言源代码语法加亮功能,需要配置文件/etc/vim/vimrc,加入代码syntaxon.文件后缀必须为. ...
- 非常详细的ok6410的linux系统移植…
目录 Linux 3.3.5系统移植 2 LED驱动移植 8 按键驱动移植 9 LCD驱动移植 11 DM9000网卡驱动移植 14 搭建NFS网络文件系统 25 移植触摸屏驱动 38 移植Qt4.8 ...
- 海思 3520D 移植Qt4.5.3 一
一.移植Qt4.5.3 1.获得 Qt4.5.3 的源码Qt4.5.3源码的原始包 qt-embedded-opensource-src-4.5.3.tar.gz 将其复制到 /opt 下, ...
- 将Linux代码移植到Windows的简单方法
一.前言 Linux拥有丰富各种源代码资源,但是大部分代码在Windows平台情况是无法正常编译的.Windows平台根本无法直接利用这些源代码资源.如果想要使用完整的代码,就要做移植工作.因为C/C ...
随机推荐
- 一、简单gridview列表展示
1.HomeController public ActionResult Index() { //返回绑定models的index.cshtml return View(NorthwindDataPr ...
- 菜鸟 学注册机编写之 Android app
0x00前言 环境及工具: 手机 Nexus 4(己root) 系统版本 Android 5.01 工具 AndroidKiller_V1.2 关于Android平台app注册机的编 ...
- arm寄存器解析
寒假闲来无事准备将自己的走过的arm之路总结一下,今天就先从arm的寄存器说起吧,欢迎各位拍砖. 要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式: Arm处理器有七种工作模式,为的是形成 ...
- jq 操作select
添加option $("#ID option").each(function(){if($(this).val()==111){$(this).remove();}}); 移除op ...
- js从入门到精通到深入到就业
本篇博客是我参看人家代码做的总结,个人感觉非常非常好,简单.步步深入,不用花大量时间来学完正本js,只需要把其中的代码理解透彻,上班无压力(上班无压力是指js部分,包括查看框架源代码都有很大帮助) / ...
- ODBC驱动程序丢失解决方法
今天运行SqlDbx连接数据库的时候报错,提示没有找到相应的ODBC driver,打开ODBC管理面板一看,发现里面的驱动程序都不见了.这时想起今天卸载了一个成本核算软件后成这样的,网上搜索一下只需 ...
- jmter安装配置
一 JMeter 简介 JMeter 它是Apache组织的开放源代码项目,它是现在比较流行的功能和性能测试的工具.JMeter requires a fully compliant JVM 7 or ...
- Open XML的上传、下载 、删除 ......文件路径
/// <summary> /// Get download site, if download tempfolder not existed, create it first /// & ...
- 在vue中同时使用过渡和动画
在上次的动画中,在显示和隐藏有动画效果,但是,刷新页面的时候,第一次的显示没有动画效果 需求:刷新页面的时候也有动画效果 <transition name='fade' appear enter ...
- oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
1.解决问题:TNS或者数据库不能登录. 最简单有效方法:使用oracle系统提供的工具 netca 配置(把原来的删除掉重新配置) $netca 2.然而,仍有疑问:如何指定'l ...