前记:
由于毕设的原因,将来需要移植QT程序到arm板子运行,故有此文。
看博客寻资料,看到一位作者写道:知识来源于互联网,必将回报互联网。赞。
介于从陌生到熟悉的折腾,故将移植过程记录,发文,以己省人。
————————————————————备注———————————————————————
备注:1、移植过程存在各种情况,如遇编译报错,可百度查询,都能解决问题;
2、本文仅记录作者所遇到的移植问题,仅供参考。
3、参考另一博客:http://whylinux.blog.51cto.com/10900429/1856076
————————————————————正文———————————————————————
一、开发环境
主机环境:ubuntu14.04
目标机:九鼎创展科技的x210开发板(S5PV210)
主机工具链:gcc-4.8.2
交叉编译工具链:arm-none-linux-gnueabi-gcc-4.4.1 (来自三星的arm-2009q3)
QT移植版本:QT-4.7.4
挂载x210开发板根文件系统方式:NFS
自行制作开发板根文件系统
二、移植tslib
说明:一般QT程序放到arm板上都需要触摸控制,所以需要移植这个触摸屏库tslib。
(1)下载
百度下载 tslib-1.4.tar.gz
或者开发板九鼎官方提供的tslib_x210_qtopia.tgz
备注:本人tslib使用的是九鼎官方QT4.8源码(qt_x210v3s_160307.tar.bz2)里面的tslib_x210_qtopia.tgz
(2)解压
将tslib源码复制到ubuntu 的/usr/local/src/目录下,解压,并创建一个目录tslib_x210用于稍后的tslib安装
(3)修改及缘由(往下看)
查看使用的工具链中的arm-none-linux-gnueabi/libc/usr/include/linux/input.h中的EV_VERSION宏的值,它一定要和内核中的include/linux/input.h中的EV_VERSION宏的值一样(一般都需要修改,选其中任何一个修改同样值即可;本人选择将内核该宏值修改为0x010000,因为本人工具链该宏值是这个,再重新编译内核烧录)
以上缘由:
在tslib源码中的/plugins/input-raw.c文件中check_fd函数里,有一段代码对开发板的触摸屏进行检测,若下面条件只要有一个不满足,则报告"selected device is not a touchscreen I understand",意思是检测不到触摸屏:
if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) && (version == EV_VERSION) &&
(ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit) * 8), &bit) >= 0) &&
(bit & (1 << EV_ABS)) &&
(ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit) * 8), &absbit) >= 0) &&
(absbit & (1 << ABS_X)) &&
(absbit & (1 << ABS_Y)) &&
(absbit & (1 << ABS_PRESSURE))))
{ fprintf(stderr, "selected device is not a touchscreen I understand\n"); return -1; }
a、如果修改参数后不清楚是否修改成功,可见前面“备注”第3条参考博主对该段的debug;
b、注意一些板子触摸屏驱动文件中对上面的ABS_X、ABS_Y、ABS_PRESSURE的定义和使用情况,在本人移植的九鼎x210开发板ft5x06触摸屏驱动文件中,它就没使用ABS_X、ABS_Y,而是多点触摸的定义ABS_MT_POSITION_X、ABS_MT_POSITION_Y,导致打印 "selected device is not a touchscreen I understand”
解决方法:去除ft5x06触摸屏驱动文件里的多点触摸相关定义ABS_MT_WIDTH_MAJOR和ABS_MT_TRACKING_ID所在函数,再将ABS_MT_POSITION_X、ABS_MT_POSITION_Y改成ABS_X、ABS_Y。(MT =multiple
c、上面这条,仅起提醒作用,其他x210板子用户可验证是否确实有这个问题。
(4)配置、安装tslib
a、解压后进入tslib目录,执行./autogen.sh
b、执行./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-none-linux-gnueabi --prefix=/usr/local/src/tslib_x210 ac_cv_func_malloc_0_nonnull=yes
(--prefix 指定tslib的安装目录 : 此文件夹在前面已经创建)
c、先后执行make、 make install,之后tslib就会安装在指定的目录tslib_x210 下,它里面有bin、lib、include、etc四个文件夹
(5)修改ts.conf
进入安装目录tslib_x210 ,vi命令打开etc/ts.conf :
a、如果是网上下载、安装的tslib-1.4版本,则将第二行“# module_raw input” 的“# ”去掉,并顶格,不能留下空格
b、如果是九鼎官方提供的tslib_x210_qtopia
修改内容为红色字体:
module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100 (原来是10000)
module linear
保存
(6)设置开发板环境变量
将整个安装目录tslib_x210 复制到开发板的文件系统,启动开发板通过NFS方式启动它的文件系统,再通过开发板的终端 打开环境变量文件/etc/profile,添加如下内容:(先看下方备注)
export TSLIB_ROOT=/tslib_x210
export TSLIB_TSDEVICE=/dev/input/event2
export QWS_MOUSE_PROTO=tslib:/dev/input/event2
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:/lib
备注:
a、前三项需要自行检查;TSLIB_ROOT更换为自己实际存放的路径;
b、TSLIB_TSDEVICE (第2项)和QWS_MOUSE_PROTO(第3项)这两项需要查看自己的板子的触摸屏设备对应/dev/input/下那个文件,方法:进入查看/dev/input/,里面有几个event ,每个cat一次,并点触摸屏看看secureCRT是否有内容输出,乱码也允许;
c、对于第3项的QWS_MOUSE_PROTO,这里使用的QT控制方式是触摸屏,故它的关键字的“tslib”,如果将来的QT程序想同时允许使用触摸屏和鼠标来控制,那这里参数可改为
export QWS_MOUSE_PROTO="tslib:/dev/input/event2 Mouseman:/dev/input/mouse2" (本人的是mouse2,可插入usb鼠标后自行测试)
d、若QT程序移植到arm后只采用触摸屏控制,不想看到鼠标箭头,则打开QT程序主函数,添加以下代码即可:
1.引入头文件 
#include   <QWSServer>
2.设置鼠标样子属性为false 
QWSServer::setCursorVisible(false);
(7)测试并校准触摸屏(一定要校准,否则触摸位置不准确)
a、执行source /etc/profile更新环境变量(每次修改profile文件都要记得执行此命令,就不需重启开发板)
b、进入tslib_x210/bin/目录,执行其中的触摸屏校准程序
./ts_calibrate
如果出现tslib的触摸屏五点校准画面,说明tslib的安装移植成功完成。
校准:点击五点十字架(按出现的顺序点击!)后就会得到pointercal触摸屏检验的信息文件,会在tslib_x210的etc目录中出现;也可执行此目录下其他的程序来体验触摸屏,secureCRT会输出位置信息。
三、移植QT
(0)准备
记得本文先行下载了几个库,请参考http://248341.blog.51cto.com/238341/1438867
如果在后面的make编译过程中出现错误,网上查错再下载也可。
(1)下载qtcreatorqt源码包,转移到ubuntu下


(2)ubuntu下安装qtcreator,并解压qt源码包
a、给上面的.bin文件添加“可执行”权限:chmod +x 文件名,再执行./qt-creator-linux-x86-opensource-2.4.1.bin,接下来的qtcreator安装过程so easy省略,qtcreator会默认安装在/usr/local/Trolltech目录;
b、将qt源码包解压至/usr/local/src目录下,解压,
进入qt-everywhere-opensource-src-4.7.4/mkspecs/qws/linux-arm-g++/目录下,打开qmake.conf文件。修改内容如下:
(3)配置
本文是要将qt安装在/usr/local/qt4arm 目录下,安装的是嵌入式版本QT
执行如下:(先看下面备注)
./configure --prefix=/usr/local/qt4arm -opensource -release -shared -Declarative -importdir /opt/imports -fast -no-largefile -qt-sql-sqlite -qt3support -exceptions -xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -svg -no-webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg -make libs -make tools -nomake examples -nomake docs -nomake demos -no-nis -no-cups -iconv -no-dbus -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,24,32 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-kbd-qvfb -armfpa -no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR -no-pch -I/usr/local/src/tslib_x210/include -L/usr/local/src/tslib_x210/lib -confirm-license
备注:
--prefix=是后面编译源码后,安装QT时所在的目录;
-I后面的是你的tslib所在的头文件路径;
-L后面的是你的tslib所在的lib路径;
本文按照此配置可正确安装,来源网络,可参考其他移植QT文章
若需重新配置,请参考执行下面命令:
(4)执行make编译
这是一个漫长的等待过程,本文需要3小时,如果编译过程中报错,则可能缺少什么库,网上查询再apt-get install即可 ,只要没有重新配置./configure生成新的Makefile,make 都是可以继续编译下去的。
(提醒一点:本文在编译过程出现几个错误,全都网上搜索,都有解决方法,就是不要干等着后台编译)
(5) 执行make install安装  
本文已配置安装在/usr/local/qt4arm目录
(6)库文件的转移
进入QT安装目录/usr/local/qt4arm/lib目录,复制所有so文件到开发板文件系统的lib/下
cp ./* /root/rootfs/rootfs/lib/ -rf
细心地发现qt使用的字体库在lib/fonts目录下,也被上述命令一起复制到开发板的/lib/下了,
故需将开发板的lib目录下的fonts字体库文件夹转移到顶层根目录,开发板终端执行:mv /lib/fonts /
(7)再次配置环境变量
打开开发板的/etc/profile,添加字体库export QT_QWS_FONTDIR=/fonts即可;
至此,基本的QT移植到arm板就完成了,简单地总结就是将嵌入式版本的QT的lib库移植到arm板子上,配合触摸屏等输入类设备来控制使用
(8)测试QT程序
准备好编写好的qt测试程序源代码,先后执行以下命令:
qmake -project
qmake
make
再用命令file 目标文件名,查看目标可执行文件是否为ARM架构,若是ARM架构的,则需将目标可执行文件复制到开发板文件系统中,加上“-qws”执行测试程序,例如下面例子中,将在开发板终端执行命令:./yizhi_test -qws。那么板子屏幕就能看到QT测试程序了。
————————————————————完毕——————————————————————
至此,基本的QT移植到arm板工作就完成了,简单地总结就是将嵌入式版本的QT的lib目录和触摸屏库tslib的lib目录移植到arm板子上,配合触摸屏等输入类设备来控制使用。
若遇其他问题,则请借助强大的互联网。
————————————————“知识来源于互联网,必将回报互联网”————————————
本文部分参考博客:
http://blog.csdn.net/qq_15653225/article/details/49762385
http://blog.csdn.net/embeddedman/article/details/7423107
http://www.itnose.net/detail/534830.html

QT程序到arm板(s5pv210)的移植之旅相关推荐

  1. Qt程序在arm板上运行

    1.Qt中的库需要拷贝到arm板上: 2.配置环境变量,参考该文. 总结: 1.可执行程序在终端中运行前,需要配置好环境变量,我们用export的形式配置的,这种形式只在当前终端中生效(因为,如果我们 ...

  2. 迅为4412开发板一键烧写QT程序到开发板

    之前我们写好一个程序,都是先交叉编译完,然后在通过 nfs/tftp 或者其他的方法拷贝到开发板,然后在手动执行,如果我们调试程序很频繁,那我们每次都重新拷贝到开发板,那这样就太麻烦了,有没有方便一点 ...

  3. Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440

    Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440 参考: http://hi.baidu.com/jiyeqian/blog/item/f46d2 ...

  4. Fedora9 下搭建Qt Creator的ARM开发环境并移植Qt4.6.3-books到mini2440

    Fedora9 下搭建Qt Creator的ARM开发环境并移植Qt4.6.3-books到mini2440 分类: LINUX 2011-10-18 16:44:56 因为在搭建ARM的qte环境时 ...

  5. Qt——用在ARM板上的Mplayer(1.3.0,1.0rc4)安装编译步骤!还有,Mplayer背景抖动闪烁问题解答,终于来了!

    注意:若转载,请贴上链接"https://blog.csdn.net/qq_41042595/article/details/112308184",如若发现抄袭或未标明来源现象,都 ...

  6. Qt程序移植到ARM

    公司之前做了个项目是基于arm+linux的体系,想要在板子上运行c++的服务器程序,思前想后觉得Qt既对c++有非常好的兼容.又有非常之好的跨平台性将来移植到别的系统非常的方便,而且Qt提供的编辑工 ...

  7. 嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板

    想要把qt工程放到开发板上运行,就需要用到交叉编译.由于qt是跨平台的,所以只需要换个编译器编译一下就可以. 以qt学习–计时器的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时 ...

  8. arm qt mysql插件,关于移植QT的Sqlite数据库到ARM板运行的问题

    关于移植QT的Sqlite数据库到ARM板运行的问题 运行一般的程序我们的步骤一般是在PC主机上编译,编译成功后交叉编译,然后把程序下载到ARM开发板上,因为主机的交叉编译库和ARM开发板的运行的QT ...

  9. opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译

    opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译 原文我是用有道笔记记录的,下面排版不是很好,可参看有道笔记原文:h ...

最新文章

  1. PHP 毫秒级定时器,实现php毫秒定时器方法详解
  2. 识别强直性脊柱炎高效和疾病特定的基质改变
  3. 在线阅读计算机组成,计算机组成原理RAM.pdf
  4. PostgreSQL开放自由
  5. 使用runnable创建线程
  6. C#LeetCode刷题-排序
  7. 知名投资机构董事总经理在培训中晕倒后去世,这个培训究竟是什么?
  8. C#之不得不上的网站。
  9. 按值传递和按引用传递的区别_c++按值、地址、引用传递参数
  10. mysql安装_win版
  11. 几种常用的数据校验(异常检测)总结(3σ、肖维勒准则、狄克逊准则、格拉布斯准则、皮尔士准则、卡方检验、T检验等等)
  12. Idea的JShell Console
  13. opencv2.4.10配置vs2010旗舰版过程与遇到问题的解决
  14. 负数在内存中的存储形式——补码
  15. 大数据学习路线详解,零基础学大数据学习路线
  16. [Java]-单例模式与volatile简介
  17. 【3D视觉创新应用竞赛作品系列​】基于嵌入式的室内静态场景实时重建系统
  18. 佳明手表APP开发系列01——简单汉化英文版
  19. 图神经网络(一)DGL框架搭建GCN图卷积神经网络模型
  20. 深度学习在推荐领域的应用lookalike

热门文章

  1. data mapping
  2. 5个省,7大 “5G+智能电网” 落地应用案例!
  3. Python pandas库|任凭弱水三千,我只取一瓢饮(5)
  4. 【Java8新特性 串行/并行流-Optional容器类-时间格式化线程安全等】
  5. 为什么我的程序中没有stdafx.h头文件?
  6. marvell 88W8686 sdio wifi模块学习
  7. 电路与电子线路实验一万用表的设计与仿真——北京理工大学
  8. 拼多多2021校招2020.9.1笔试题 T2 and T4
  9. 解决win2008 R2远程桌面授权过期的方法
  10. (每日一练python)组合总和