交叉编译tslib1.4过程详述,配合QT4.5.3成功在Mini(2)

truct tsdev *ts;
char *tsdevice = "/dev/input/event0";
ts = ts_open(tsdevice, 0);
int ts_tmpfd = ts_fd(ts);
if (ts_tmpfd== -1)
{
    perror("ts_open");
    exit(1);
}
unsigned long val =1;
int ioctl_ret=ioctl(ts_tmpfd,EVIOCGRAB,&val);
printf("now lock the ts ioctl ret is:%d/n",ioctl_ret);

if (ioctl_ret!=0)
{
    printf("Error: %s/n", strerror(errno));
    exit(1);
}
printf("lock the ts success /n");

现在开始交叉编译tslib,在开始编译前需要确定自己的开发环境是否安装了autoconf、automake和 libtool等软件包。之前我的虚拟机并不是完全安装,在编译过程中出现很多问题,在这里我建议大家虚拟机完全安装。不过如果确实不想重装系统的话,也可以手动安装,之前我自己就是手动安装的,虽然成功安装了tslib软件,但是在后续的QT移植过程中出现很多不可预知的错误,因此还是建议大家的虚拟机是完全安装的。可以利用命令查看自己虚拟机上的autoconf版本:autoconf –V

在开始编译tslib前还有一个问题需要特别注意:就是要确定在编译时所用的工具是交叉工具链而不是PC平台下的GCC工具,因为我要运行的平台是嵌入式ARM架构而不是PC的X86架构。关于这一点,在网上找到很多资料都没有说明,几经寻找之下,终于看到一篇文章对这一点作了说明。详细解析tslib-1.4交叉编译:

第一步:解压源码包:

tar  xvzf tslib-1.4.tar.gz

cd tslib

第二步:进入tslib之后关键是要设置交叉编译环境(下面是根据我自己的实际情况所添加的)——如果不设置交叉编译环境,在移植到开发板时,执行./ts_calibrate程序时会出现以下错误:

./ts_calibrate: line 1: syntax error :”(” unexpected.

$export PATH=$PATH:/usr/local/arm/4.3.2/bin

$export CC=arm-linux-gcc

$export CXX=arm-linux-g++

设置好交叉编译环境后就可以开始安装了:

执行./autogen.sh

交叉编译tslib1.4过程详述,配合QT4.5.3成功在Mini

执行./autogen.sh之后可能会有上述信息出现,但是我的机器上灰常不给力,只是显示出其中几行信息,一开始以为是出错,但是最后还是移植成功,证明这步就算只出现几行信息并无多大关系。

接着执行以下命令:

./configure  --prefix=/usr/local/tslib/  --host=arm-linux  ac_cv_func_malloc_0_nonnull=yes

(1)有些开发板在执行此命令时需要添加—enable inputapi=no或者—enable input=no,至于是哪一个就需要根据tslib目录下的configure文件才可以知道。(建议这个文件还是看一下)。由于友善之臂mini2440的触摸屏驱动是支持ioctl操作的(在内核移植时做触摸屏驱动时可以看到源码中是支持ioctl的),因此我在这里并没有加上—enable inputapi=no.

(2)如果没有加上ac_cv_func_malloc_0_nonnull=yes会出现交叉编译错误:undefined reference to `rpl_malloc'. 这是由ac_cv_func_malloc_0_nonnull检查引起的,为了不让它检查,产生一个cache文件daiq_tslib.cache,欺骗configure再执行:因此为了编译的顺利进行,在配置的时候需要加上这一句:ac_cv_func_malloc_0_nonnull=yes

最后执行make & make install就可以在指定的路径上成功安装tslib。我的指定路径是/usr/local/tslib/,在这个文件下安装成功的话会有四个目录:lib/  etc/  include/  bin/. 

安装好tslib之后将动态链接库文件拷贝到根文件系统中,(注意tslib依赖的是动态链接库文件),如果忘记拷贝动态链接库的话会出现以下错误:

拷贝进去之后需要在自己的根文件系统的/etc/profile(在文件的一开始添加下面的内容)设置tslib的环境变量(要根据自己的实际情况来设置),下面是我的开发板所设置的有关tslib的环境变量:

# Ash profile

#vim syntax=sh

#No core files by default

echo "Set ENV for tslib......"

export  QTDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm(文件系统中QT的安装目录)

export TSLIB_ROOT=/usr/local/tslib   (tslib的目录)

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal

export POINTERCAL_FILE=$TSLIB_ROOT/etc/pointercal

export  QWS_DISPLAY=LinuxFb:dev/fb0

export set QWS_SIZE=320x240

export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

echo “the env is successful”

当配置好这些环境变量后下载到开发板,执行./ts_calibrate时如果出现:

ts_open: No such file or directory

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/86165623174d0441fb241cbafcc67fc0.html