设为首页 收藏本站
查看: 756|回复: 0

[经验分享] 移植tslib和Qt5.6到三星s5pv210开发板

[复制链接]

尚未签到

发表于 2017-11-22 20:25:49 | 显示全部楼层 |阅读模式
tslib1.4移植


下载tslib1.4后
1.cp tslib-1.4.tar.bz2 /home/gec
2.tar jxvf tslib-1.4.tar.bz2
3.sudo -s
4.cd tslib-1.4/
5../configure --host=arm-linux --prefix=/usr/local/arm ac_cv_func_malloc_0_nonnull=yes
6.make
7.make install



修改tslib安装目录下的/etc/ts.conf文件去掉# module_raw input注释。

安装后把整个文件夹下载到开发板
在开发板/etc/profile 里配置环境变量,我的如下,要按你放的位置配置
export TSLIB_ROOT=/usr/local/tslib

export TSLIB_TSDEVICE=/dev/event0
export POINTERCAL_FILE=/etc/pointercal
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=$TSLIB_ROOT/lib:/lib:/usr/lib:$LD_LIBRARY



source /etc/profile 使配置生效或重启开发板

进入/usr/local/tslib/bin 目录执行ts_calibrate校准程序,进行5点触摸校准  生成的校准文件名为pointercal,位于/etc目录下。


  


这些网址都是介绍tslib的移植,可以参考下。
  http://blog.sina.com.cn/s/blog_406127500101dsmy.html
  http://blog.chinaunix.net/uid-12461657-id-2975918.html
http://www.ttfanwen.com/info_12/fw_2537170.html
http://www.embeddedlinux.org.cn/emb-linux/system-development/201603/28-5238.html

  http://mojijs.com/2016/07/217478/index.html
可能用到的资料
  Linux系统如何查看版本信息
输入"uname -a ",可显示电脑以及操作系统的相关信息。
输入"cat /proc/version",说明正在运行的内核版本。
输入"cat /etc/issue", 显示的是发行版本信息。
lsb_release -a (适用于所有的linux,包括Redhat、SuSE、Debian等发行版,但是在debian下要安装lsb)

  

  虚拟机当前内核版本安装位置
/lib/modules/`uname -r`/kernel


移植出现的错误


  错误1:< selected device is not a touchscreen I understand >
  查看tslib源码可知编译器的EV_VERSION要与内核的EV_VERSION一致。
  修改内核include/linux/input.h的EV_VERSION使之与编译器的一致
  移植经验表明修改内核的EV_VERSION较好
  <1.从工程角度来看,一个项目中为了兼容不同编译特性,可能经常换编译器,而内核却很少重新解压编译
  更换编译器以后,很容易忘记掉修改input.h文件
2.从版本兼容的角度看,0x01001修改为0x01000是可以的,但是从0x01000修改为0x01001不合理
3.从跨平台角度,一个编译器可能有Linux版本和Windows版本,为了做到兼容或者跨平台编译,也不应修改编译器(出自网络某大神)>

  

  tslib的EV_VERSION在linux/input.h里
  其中有
内核编译器 结果
EV_VERSION0x0100010x010000ok
EV_VERSION0x0100000x010000ok
EV_VERSION0x0100010x010001no
EV_VERSION0x0100000x010001no
  不信的话可以自己试试。
  参考下这个
  http://www.cnblogs.com/lcw/p/3802624.html



  错误2:< 出现界面,点十字架没反应 > < selected device is not a touchscreen I understand >触摸屏能显示,但对其操作无反应。
  

           原因1:网络上一参考博文的环境配置,其中没有export QWS_MOUSE_PROTO=tslib:/dev/input/event1

           解决:环境变量加上export QWS_MOUSE_PROTO=tslib:/dev/input/event1 ,重启板子即可。
  QWS_MOUSE_PROTO该如何写
  http://www.cnblogs.com/baizx/archive/2010/04/08/1707790.html
  

  原因2:内核裁剪时没加上触摸设备(更可能的原因)
       查看触摸屏的设备文件
hexdump /dev/event0
点触摸屏,有输出则证明event0是触摸设备
  这是我的内核触摸驱动配置
  Device Drivers --->
Input device support --->
  • Touchscreens --->
    < > S3C touchscreen driver //去除S3C 触摸屏驱动支持
    <*> TSC2007 based touchscreens //添加TSC2007 驱动
      具体驱动按自己的开发板lcd型号配置
      其他原因参考
      http://www.it165.net/embed/html/201409/2656.html
      http://blog.chinaunix.net/uid-14782631-id-111870.html
      

      tslib源码分析
    http://blog.csdn.net/subfate/article/details/6361062
    http://blog.csdn.net/hejinjing_tom_com/article/details/49252333
    http://www.latelee.org/embedded-linux/porting-linux-tstest-code.html

      http://www.ttfanwen.com/info_12/fw_2537170.html
      

    Qt5.6移植

    下载Qt5.6源码:https://download.qt.io/archive/qt/5.6/5.6.0/single/   下载qt-everywhere-opensource-src-5.6.0.tar.gz


    1.tar zxvf qt-everywhere-opensource-src-5.6.0.tar.gz
    2.cd qt-everywhere-opensource-src-5.6.0
    3.指定开发板架构和交叉编译器/---+/#
    # qmake configuration for building with arm-linux-gnueabi-g++
    #


    MAKEFILE_GENERATOR      = UNIX
    CONFIG                 += incremental
    QMAKE_INCREMENTAL_STYLE = sublib


    QT_QPA_DEFAULT_PLATFORM =linuxfb                 #指定Qt运行平台 EGLFS, LinuxFB, KMS, DirectFB, Wayland                     
    QMAKE_CFLAGS_RELEASE    += -O2 -march=armv7-a #O2为优化选项,march只处理器架构,s5pv210的架构是armv7
    QMAKE_CXXFLAGS_RELEASE  += -O2 -march=armv7-a


    include(../common/linux.conf)
    include(../common/gcc-base-unix.conf)
    include(../common/g++-unix.conf)


    QMAKE_INCDIR +=/usr/local/tslib/include #连接的tslib库位置
    QMAKE_LIBDIR +=/usr/local/tslib/lib


    # modifications to g++.conf
    QMAKE_CC                = arm-si-linux-gnueabi-gcc #交叉编译器的名称(以下部分全换成自己的交叉编译器)
    QMAKE_CXX               = arm-si-linux-gnueabi-g++
    QMAKE_LINK              = arm-si-linux-gnueabi-g++
    QMAKE_LINK_SHLIB        = arm-si-linux-gnueabi-g++


    # modifications to linux.conf
    QMAKE_AR                = arm-si-linux-gnueabi-ar cqs
    QMAKE_OBJCOPY           = arm-si-linux-gnueabi-objcopy
    QMAKE_NM                = arm-si-linux-gnueabi-nm -P
    QMAKE_STRIP             = arm-si-linux-gnueabi-strip
    load(qt_config)


    4.根据需求配置Qt
    ./mkqt.sh
    这是我的配置脚本

    •     -L /usr/local/tslib/lib  


    Qt配置选项解释
      Qt4(解释更详细)
      http://www.360doc.com/content/10/0225/22/79031_16834764.shtml#
      Qt5(与以上网址对比看)
      http://www.cnblogs.com/chenfulin5/p/5798764.html


    5.make  -j4 (4线程编译,长时间等待囧)
    6.make install


    错误分析:
    配置时遇到的错误
      错误1:

    configurationWarning:Disablingpkg-configsincePKG_CONFIG_LIBDIRisnot set.
    Warning:Disablingpkg-configsincePKG_CONFIG_SYSROOT_DIRisnot set.

    Couldnotdeterminethetargetarchitecture!
    Turnonverbosemessaging (-v)toseethefinalreport.
    原因:没有指定自己交叉编译器
    输入:arm-linux-gcc -v查看自己的交叉编译器名称
    mkspecslinuxarmgnueabig+qmake.conf修改#modifications to g++.conf内容以下交叉编译器
      
      错误2:
      Project ERROR: Unknown module(s) in QT: quick         (quick说明已跳过该步骤,影响不大嘛)
      make[4]: *** [sub-textureandlight-make_first] 错误 3
      make[4]:正在离开目录 `/home/sice/sources/qt/qt-everywhere-opensource-src-5.6.0/qtcanvas3d/examples/canvas3d/canvas3d'
      make[3]: *** [sub-canvas3d-make_first] 错误 2
      make[3]:正在离开目录 `/home/sice/sources/qt/qt-everywhere-opensource-src-5.6.0/qtcanvas3d/examples/canvas3d'
      make[2]: *** [sub-canvas3d-make_first] 错误 2
      make[2]:正在离开目录 `/home/sice/sources/qt/qt-everywhere-opensource-src-5.6.0/qtcanvas3d/examples'
      make[1]: *** [sub-examples-make_first] 错误 2
      make[1]:正在离开目录 `/home/sice/sources/qt/qt-everywhere-opensource-src-5.6.0/qtcanvas3d'
      make: *** [module-qtcanvas3d-make_first] 错误 2
      make: *** 正在等待未完成的任务....
      原因:由于配置时加了-no-opengl影响了该例子的生成,对编译Qt影响不大不用管
      解决:找出s5pv210提供的opengl库和头文件,配置时加上-opengl并设置相应路径后编译通过
      
      安装时遇到的错误
      Project ERROR: Unknown module(s) in QT: quick      (已跳过该步)
      make[4]: *** [sub-textureandlight-install_subtargets] 错误 3
      make[4]:正在离开目录 `/home/sice/sources/qt/qt-everywhere-opensource-src-5.6.0/qtcanvas3d/examples/canvas3d/canvas3d'
      make[3]: *** [sub-canvas3d-install_subtargets] 错误 2
      make[3]:正在离开目录 `/home/sice/sources/qt/qt-everywhere-opensource-src-5.6.0/qtcanvas3d/examples/canvas3d'
      make[2]: *** [sub-canvas3d-install_subtargets] 错误 2
      make[2]:正在离开目录 `/home/sice/sources/qt/qt-everywhere-opensource-src-5.6.0/qtcanvas3d/examples'
      make[1]: *** [sub-examples-install_subtargets] 错误 2
      make[1]:正在离开目录 `/home/sice/sources/qt/qt-everywhere-opensource-src-5.6.0/qtcanvas3d'
      make: *** [module-qtcanvas3d-install_subtargets] 错误 2
      原因:与上面对应,编译不通过,安装时也出错,不过影响不大,只是不嫩生成该例子而已

      7.安装完后把Qt所在文件夹下的lib、plugins文件夹打包下载到开发板,配置环境变量

      vi /etc/profile
      添加             (!具体配置要按你所放的目录位置)
      我的配置如下
      export QTEDIR=/usr/local/Qt5.6
      export QT_QPA_GENERIC_PLUGINS=tslib:$TSLIB_TSDEVICE                                   
      export QT_QPA_FONTDIR=$QTEDIR/lib/fonts                                               
      export QT_QPA_PLATFORM_PLUGIN_PATH=$QTEDIR/plugins                                    
      export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
      export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:/lib:/usr/lib:$QTDIR/lib:$QTEDIR/lib:$LD_LIBRAR
      export LD_PRELOAD=/lib/preloadable_libiconv.so            
      source /etc/profile 使配置生效

      8.运行example里的程序测试Qt是否移植成功

      出错

    QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
    QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
    This application failed to start because it could not find or load the Qt platform plugin "linuxfb".
    Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, xcb.


    解析:这里包含2个错误
    错误1:

      QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
      QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
      原因:配置时没有设置-no-iconv或-iconv。iconv是一个计算机程序以及一套应用程序编程接口的名称。它的作用是在多种国际编码格式之间进   行文本内码的转换。这对跨语言 Qt开发人员来说是很有用的   
      解决办法:网上下载libiconv,交叉编译 ,编译好后将 ./preload/preloadable_libiconv.so拷贝到板子的 /lib 下面,设置环境变    量 export    LD_PRELOAD=/lib/preloadable_libiconv.so


    错误2:

        This application failed to start because it could not find or load the Qt platform plugin "linuxfb".
        Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, xcb.    原因1:qmake.conf中QT_QPA_DEFAULT_PLATFORM=linuxfb没有设置为linuxfb。

    解决:设置为linuxfb后重新编译
       
       原因2:
       环境变量重叠  LD_LIBRARY_PATH写了2个


      解决:把LD_LIBRARY_PATH合成一个,既包括tslib也包括Qt
      export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:/lib:/usr/lib:$QTDIR/lib:$QTEDIR/lib:$LD_LIBRAR
      
      再次运行example里的程序,成功!      
      example里的fluidlauncher程序,点击图片还能开启新线程进入到另一个程序界面。
    DSC0000.jpg

  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-409644-1-1.html 上篇帖子: linux 日志 下篇帖子: 基于zookeeper的Swarm集群搭建
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表