您的位置:首页 > 编程语言 > Qt开发

QT程序到arm(A8)板的移植之旅

2017-04-14 09:41 316 查看
QT程序到arm板的移植之旅
   
     
     
     
     
     
     
   
 
前记:
     
  由于毕设的原因,将来需要移植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
4000
-4.4.1
(来自三星的arm-2009q3)

QT移植版本:QT-4.7.4
挂载x210开发板根文件系统方式:NFS
自行制作开发板根文件系统

 
二、移植tslib

说明:一般QT程序放到arm板上都需要触摸控制,所以需要移植这个触摸屏库tslib。
(1)下载
百度下载 tslib-1.4.tar.gz
或者开发板九鼎官方提供的tslib_x210_ia.tgz

备注:本人tslib使用的是九鼎官方QT4.8源码(qt_x210v3s_160307.tar.bz2)里面的tslib_x210_ia.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[/b]
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_ia

修改内容为红色字体:
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会输出位置信息。

d6c6

 

三、移植QT
(0)准备
记得本文先行下载了几个库,请参考http://248341.blog.51cto.com/238341/1438867

如果在后面的make编译过程中出现错误,网上查错再下载也可。

 

(1)下载qtcreator和qt源码包,转移到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

 
 
 
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: