移植QT到tiny4412开发板
目录
- (一) 环境准备
- (二) Qt源代码下载
- (三) 移植tslib库
- (四)操作流程
- 1.解压qt源码包
- 2.配置编译环境
- 3.生成Makefile
- 4.编译安装
- 5.安装一些库用来支持 qt
- 6. 添加以下内容到开发板目录下的/etc/profile 文件
- 7. 添加字体
- 8.QT中文支持
- (五)使用QtCreater编写测试程序
- (六)使用命令编译测试
- (七)关于交叉编译器版本的问题:
(一) 环境准备
- ubuntu16.04
- 交叉编译工具:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
- linux内核版本:linux-3.5
一定要注意交叉编译器版本和qt源代码版本的问题,否则制作Makefile会出现问题,关于出现版本问题,在文末有解决办法提示。
交叉编译器的版本是arm-linux-gcc 4.5.1 ,该编译器版本对C++11支持不完善,如果需要编译更加高的QT版本,就需要升级交叉编译器,目前4友善之臂光盘提供的编译器最高只能支持QT5.6版本的交叉编译。
最新的交叉编译器下载地址: https://www.veryarm.com/arm-none-linux-gnueabi-gcc
这里我们下载arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,文中演示使用的也是这个版本 ,安装交叉编译器参考:linux安装交叉编译环境
(二) Qt源代码下载
下载链接:Qt
这里根据自己的需求选择,我这里选择5.1版本的
选择single下载完整的源码包
选择.tar.gz结尾的,我这里有以前下载好的5.7.0的源码包直接使用了,如果下载其他版本的方法不变。
(三) 移植tslib库
移植前需要先移植好tslib库,tslib 是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。操作触摸屏时,QT需要依赖tslib获取屏幕坐标。
具体的移植过程参考:tiny4412移植tslib库
(四)操作流程
1.解压qt源码包
tar -xvf qt-everywhere-opensource-src-5.1.0.tar.gz cd qt-everywhere-opensource-src-5.1.0
注意这里解压的时候不要选择ubuntu自带的提取到此处,有可能丢失文件,我在这个部分找了好久错误
2.配置编译环境
由于我用的是新更新的源代码,所以交叉编译器安装的是5.4的,在配置qmake.conf的时候需要注意。
root@1:/qt-everywhere-src-5.1.0# gedit qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
qmake.conf 文件内容如下:
#
#qmake configuration for building with arm-linux-gnueabi-g++
#MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublibQT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-ainclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)#modifications to g++.confQMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++#modifications to linux.confQMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_NM = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = arm-none-linux-gnueabi-strip
load(qt_config)
QT_QPA_DEFAULT_PLATFORM选项是指定图形插件, Qt5将各平台底层抽象为一个 qpa 插件,通常在mac上是cocoa, 在window上是windows, 在linux X11下是xcb, 如果有OPENGL支持, 那么选eglfs。而对于无硬件加速的设备,则选择linuxfb。
armv7-a :是当前CPU的构架,需要根据当前的CPU实际构架填写。
3.生成Makefile
创建脚本文件, 生成 Makefile,对 qt 进行裁剪及安装配置
gedit autoConfigure.sh
内容如下:
#!/bin/sh
./configure \
-v \
-prefix /usr/local/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/usr/local/tslib/include \
-L/usr/local/tslib/lib
exit
以上的配置选项信息可通过./configure –help 查看
修改脚本运行权限,执行脚本,完成后在文件夹下生成 Makefile
chmod +x autoConfigure.sh
./autoConfigure.sh
编译出现如下错误(如果没错误忽略这一点)(1)(2):
查看config.log信息
root@1:/qt-everywhere-src-5.14.2# vim config.log
查看配置的帮助信息:
./configure -help
(1) -std=c++11 没有
这是交叉编译器版本较低,安装高版本的交叉编译器就行
(2) main.cpp:2:24: fatal error: libspeechd.h: 没有那个文件或目录
4.编译安装
make -j8 && make install -j8
编译过程比较慢,需要几个小时
5.安装一些库用来支持 qt
apt-get install libncurses5-dev libreadline-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev libxcb-xinerama0-dev
将/usr/local/ Qt5.7.0 拷贝到开发板/usr/local/
cp /usr/local/ Qt5.7.0 /driver/rootfs/usr/local/ -r
6. 添加以下内容到开发板目录下的/etc/profile 文件
export QT_ROOT=/usr/local/Qt5.7.0/
export TSLIB_ROOT=/usr/local/tslib/
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_TSEVENTTYPE=input
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=none
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
export QWS_MOUSE_PROTO=tslib:/dev/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
export QT_QPA_FB_TSLIB=1
7. 添加字体
mkdir /driver/rootfs/usr/local/Qt5.7.0/lib/fonts
将/usr/share/fonts/truetype/ubuntu-font-family 下的字体文件,复制到根文件系统/usr/local/ Qt5.7.0/lib/fonts
目录下
cp /usr/share/fonts/truetype/ubuntu-font-family/* /driver/rootfs/usr/local/Qt5.7.0/lib/fonts –r
8.QT中文支持
Qt的字体目录是根据自己在PC机的QT源码编译安装目录有关。
如果想让QT显示中文,可以将windows下的中文字体拷贝到QT的字体库目录下。
这是我的Qt安装目录:
windows下字体目录在:C:\Windows\Fonts
将上面的字体拷贝到Qt安装目录下的fonts下就行了。
(五)使用QtCreater编写测试程序
打开QtCreater,这里我已经安装好了,没安装的可以在上面提供的网址下载。
同时,想要将编译后的文件在开发板环境下运行需要添加
exportLD_PRELOAD=$TSLIB_ROOT/lib/libts.so 到根文件的/etc/profile,否则运行时会出现
Couldnt load module pthres
ts_config() failed (No such file or directory)
除了使用QtCreater编译程序,我们还可以使用qmake命令编译
(六)使用命令编译测试
1.创建qt工程
root@1:/mydriver/rootfs/home/qt/led1# ls
led.pro main.cpp mainwindow.h socket.cpp
led.pro.user mainwindow.cpp mainwindow.ui socket.h
2.使用qmake命令构建Makefile
root@1:/mydriver/rootfs/home/qt/led1# qmake
Info: creating stash file /mydriver/rootfs/home/qt/led1/.qmake.stash
root@1:/mydriver/rootfs/home/qt/led1# ls
led.pro mainwindow.cpp Makefile
led.pro.user mainwindow.h socket.cpp
main.cpp mainwindow.ui socket.h
3.编译程序
root@1:/mydriver/rootfs/home/qt/led1# make
root@1:/mydriver/rootfs/home/qt/led1# ls
led led.pro.user main.o mainwindow.h mainwindow.ui moc_mainwindow.cpp moc_predefs.h socket.h ui_mainwindow.h
led.pro main.cpp mainwindow.cpp mainwindow.o Makefile moc_mainwindow.o socket.cpp socket.o
上面生成的led就是可执行文件,可以直接复制到开发板运行
./led
(七)关于交叉编译器版本的问题:
最近更新的qt源码要求c++11,没有./configure -no-c++11选项,因为arm-linux-gcc4.8以后才支持c++11
,所以可以下载以前的qt源码+低版本的交叉编译器(arm-linux-gg-4.8以前)或者下载最近的qt源码+高版本的交叉编译器(arm-linux-gg-4.8以后)
如果下载的是以前的qt可以使用上面提供的arm-linux-gcc-4.5,在制作makefile的时候使用:
#./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix $PWD/tmp -no-c++11 -no-opengl -no-dbus
如果下载的是最近的qt可以使用上面提供的arm-linux-gnueabihf-gcc-5.4:
#./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix $PWD/tmp -std=c++11 -no-opengl -no-dbus
qt5.1.0(2013年发布)版本:
qt5.14.2(2017年维护的):
移植QT到tiny4412开发板相关推荐
- 迅为4412开发板一键烧写QT程序到开发板
之前我们写好一个程序,都是先交叉编译完,然后在通过 nfs/tftp 或者其他的方法拷贝到开发板,然后在手动执行,如果我们调试程序很频繁,那我们每次都重新拷贝到开发板,那这样就太麻烦了,有没有方便一点 ...
- imx6q 开发板_mplayer移植-迅为IMX6Q开发板
0 1 mplayer简介 mplayer是一款开源多媒体播放器,以gnu通用公共许可证发布.它资源占用率低,无论是音频还是视频方面,支持的格式相当全面,支持的输出设备也很多,可以在各种主流操作系统中 ...
- mysql移植海思_live555 交叉编译移植到海思开发板
1.首先到它的主页下载一个源码包: http://www.live555.com/liveMedia/public/ 我下载的是latest的,具体什么版本还真不清楚 2.放到linux目录下解压: ...
- tiny4412开发板LED灯驱动写法
简介 led灯成本很低,操控简单,在嵌入式产品中不可或缺,可以作为调试标识,状态指示等等,高级用法还可以作为呼吸灯进一步增强其美观性.本章介绍只控制led灯的亮灭,tiny4412开发板有四个LED灯 ...
- tiny4412开发板实现uboot引导启动android 5.0.2系统
1目的 实现uboot引导启动android 5.0.2系统. 2 现有环境 友善之臂tiny 4412开发板,superboot引导启动android5.0.2系统,内核版本为linux3.0.8. ...
- [长文干货]MicroPython移植到野火STM32F429开发板
最近通过参考网上的文章,成功将MicroPython移植到野火STM32F429开发板上,给大家分享一下自己的移植过程,可以作为STM32系列移植MicroPY的参考. 1.移植前准备工作 实验环境: ...
- 物联网操作系统HelloX已成功移植到MinnowBoard MAX开发板上
在HelloX开发团队的努力下,以及Winzent Tech公司(总部在瑞典斯德哥尔摩)的支持下,HelloX最新版本V1.78已成功移植到MinnowBoard MAX开发板上.相关源代码已经发布到 ...
- tiny4412开发板Android篇_2基于tiny4412的Android系统的编译
tiny4412开发板使用的android系统版本是android5.0.2,由友善之臂公司提供,下载网址: https://pan.baidu.com/s/1pnn6N8Wpsx8PISLmKT59 ...
- mplayer移植-迅为IMX6Q开发板
0 1 mplayer简介 mplayer是一款开源多媒体播放器,以gnu通用公共许可证发布.它资源占用率低,无论是音频还是视频方面,支持的格式相当全面,支持的输出设备也很多,可以在各种 ...
最新文章
- oracle增量备份如何恢复,【Oracle】增量备份和全库备份怎么恢复数据库
- 遇到问题描述:Android Please ensure that adb is correctly located at问题解决
- 为什么深度学习没有取代传统的计算机视觉?
- c语言打开文件出现分段故障,c fclose() 导致分段故障_segmentation-fault_开发99编程知识库...
- 第三章 ASP.NET MVC (模型绑定)
- 有了它,让我在bug面前一点也不慌!
- GCD 代码以及GCD思想
- 几种数据可视化框架分析
- echarts入门教程(超级详细带案例)
- windows11(win10大部分通用)系统C盘清理 | 深度优化
- 软件设计师中级考试备考资料
- 搞懂特征值与特征向量
- 20172328《程序设计与数据结构》第六周学习总结
- mysql更新加锁_一条简单的更新语句,MySQL是如何加锁的?
- Riedel 水晶杯:葡萄酒终极发烧设备
- 企业的性质:诺奖得主科斯经典原文翻译及解读1
- 全球地名中英文对照表(I-J)
- c语言 w 的作用,C语言当中文件W什么意思?
- CF489C Given Length and Sum of Digits
- 最近标杆型自媒体程苓峰发文章说自己的广告效果多么好
热门文章
- apache 统计404日志_Apache监控与调优(四)Apachetop监控
- php7 daemon,编译PHP7
- VS Code vue 模板
- KAFKA 集成 SpringBoot2 消息发送和消费消息(基础篇)
- 解决Windows中PLSQL连接虚拟机中Oracle缓慢的问题
- PLSQL 设置布局
- MySQL 输入任何语句都提示You must reset your password using ALTER USER 解决方法
- 第九篇:Spring Boot整合Spring Data JPA_入门试炼05
- 从javaScript数据类型开始了解垃圾回收机制
- C++中关于隐藏的理解