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

来源:互联网 发布:c语言函数首部 编辑:程序博客网 时间:2024/06/04 18:29
                                             
前记:
        由于毕设的原因,将来需要移植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/event2Mouseman:/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

0 0
原创粉丝点击