移植tslib和Qt5.6到三星s5pv210开发板

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_VERSION 0x010001 0x010000 ok
EV_VERSION 0x010000 0x010000 ok
EV_VERSION 0x010001 0x010001 no
EV_VERSION 0x010000 0x010001 no

不信的话可以自己试试。

参考下这个

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

这是我的配置脚本

  1. -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:

configuration
Warning:Disabling
pkg
-configsincePKG_CONFIG_LIBDIRis
not

set
.

Warning:Disabling
pkg
-configsincePKG_CONFIG_SYSROOT_DIRis
not

set
.

Couldnotdeterminethetargetarchitecture!

Turnonverbose
messaging
(-v)toseethefinal
report.


原因:没有指定自己交叉编译器

输入: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程序,点击图片还能开启新线程进入到另一个程序界面。

时间: 2024-10-19 23:26:14

移植tslib和Qt5.6到三星s5pv210开发板的相关文章

(转载)移植最新内核linux-3.14.6到mini2440开发板

1.建立目标平台1.1 添加机器码--LINGD2440在arch/arm/tools/mach-types 下,添加以下一行[email protected]:~/arm/linux-3.14.6$ vim arch/arm/tools/mach-types lingd2440 MACH_LINGD2440 LINGD2440 19981.2 添加平台文件--mach-lingd2440.c复制arch/arm/mach-s3c24xx目录下的 mach-smdk2440.c,命名为mach-

三星Exynos4412开发板RP4412升级烧写时注意按开机键5秒左右

关于荣品4412开发板使用中相关问题,仅作参考. 注意:RP4412开发板升级烧写换到inand启动时一定要按开机键5S左右. 问:用的荣品三星Exynos4412开发板,我把RP4412的iNAND内容清空后,按照升级方法所说的在命令行运行writer_4412_file.bat,升级完后开发板不能从iNAND启动.什么原因? 答:烧写的文件是1G内存的还是2G内存的.确定下烧对文件. 问:好像是1G,我在试试看试了还是不行呢怎么办,现在都没法启动了. 答:你确认下有没有严格按照步骤来烧写文件

三星 A8开发板 杂记

1.三星 A8开发板 可执行文件存放路径 默认在:/opt/PDA/bin/ 2.三星 A8开发板 开机启动程序 默认在: /bin/pda 3.三星 A8开发板 设置系统时间 date -s "2012-08-27 15:04:00" 4.三星 A8开发板 设置网络IP ifconfig eth0 192.168.4.1 netmask 255.255.255.0

三星RP6818开发板添加应用后分区烧写问题分析

当用三星RP6818开发板添加应用后分区烧写出现问题,可以将应用去掉再烧写测试,可能是应用.环境配置等出了问题. Q:烧写时,partmap我可以改吗?system.img有些大,超过500M了. 但我看这个长度也是足够的,为什么烧写出现unknownerror? 400m烧写的时候没问题. A:未知错误不是长度的问题.system分区足够大的了. Q:应该是什么问题?现在我烧写以前成功过的映像,也不行了,歇菜了. A:清除分区. Q:我看system分区,0x2f200000大约742M左右,

MPlayer在ARM上的移植(S5PV210开发板)

MPlayer 1.0已经把大部分解码库都自带了,如ffmpeg,但是自带的音频库在S5PV210下效果非常不好.换成使用libmad效果不错.因此MPlayer 在ARM-Linux的最简单的移植只需要移植这两个即可.移植后即进行字符界面的播放.      移植之前先做好移植前准备,安装好arm-linux交叉编译器,并下载 MPlayer-1.0rc2.tar.bz2 和libmad包(libmad-0.15.1b.tar.gz) 1.安装libmad(1)解压libmad解压libmad包

Linux3.4.2移植CS8900网卡驱动到优龙FS2410开发板

一.S3C2410和CS8900的硬件连接 FS2410开发板的原理图我没有找到,但可看参考资料2,里面写的非常详细 二.移植过程 a) 配置内核支持S3C2410 选好Samsung S3C24XX SoCs后,会自动返回到上一级菜单(即前一张图),然后选择: b) 配置内核支持CS89x0网卡 Device Drivers-->Network device support-->Ethernet driver support-> c) 修改drivers/net/ethenet/cir

解决三星ARM11开发板图片采集程序源码出现的Bug

三星公司提供的图片采集程序源码是这个: /***************** Capture Thread *****************/ void capture_thread(void) { int start, ret; int key; start = 1; ret = ioctl(cam_c_fp, VIDIOC_STREAMON, &start); if (ret < 0) { printf("V4L2 : ioctl on VIDIOC_STREAMON fai

Gt9xx芯片,在规格书+Linux驱动的基础上,移植为USB裸机经验。直接用开发板,不去碰硬件的坑。

1,用内核代码和规格书来印证数据格式: //命令3字节,IC地址 u8 end_cmd[3] = {GTP_READ_COOR_ADDR >> 8, GTP_READ_COOR_ADDR & 0xFF, 0}; //总长度 前 3个字节.最大点数*8.加1 u8 point_data[2 + 1 + 8 * GTP_MAX_TOUCH + 1]={GTP_READ_COOR_ADDR >> 8, GTP_READ_COOR_ADDR & 0xFF}; 2,读数据:调

(一)S5PV210开发板常用易忘操作记录

一.调试串口 2.SD卡槽