【嵌入式LINUX开发】交叉编译QT4.8.6与tslib1.4到IMX283平台

6 篇文章 1 订阅
2 篇文章 0 订阅

编译tslib

(1)建立工作目录

(2)编译安装tslib

将下载的tslib源码复制到工作目录,并解压:

$ unzip tslib-master.zip
$ cd tslib-master

(3)编译

配置tslib,安装路径可以通过 --prefix 参数设置,这里安装到 /usr/local/tslib:

$ ./autogen.sh
$ ./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-none-linux-gnueabi --prefix=/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/tslib/tslib_install ac_cv_func_malloc_0_nonnull=yes

编译安装:

$ make

Makefile:472: recipe for target 'ts_calibrate.o' failed

In file included from /usr/include/fcntl.h:252:0,
             from /usr/include/x86_64-linux-gnu/sys/fcntl.h:1,
             from ts_calibrate.c:20:
In function ‘open’,
	inlined from ‘main’ at ts_calibrate.c:227:11:
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:51:24: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
调用open函数,如果在第二个参数中使用了 O_CREAT,就必须添加第三个参数:创建文件时赋予的初始权限。修改tests/ts_calibrate.c文件的第227行和地230行,添加文件的操作模式:
if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
	cal_fd = open (calfile, O_CREAT | O_RDWR, 0777);
} else {
	cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, 0777);
}

$ sudo make install

(4) 系统配置

完成后,将tslib拷贝到主机 /usr/local/tslib 目录下。
进入下一步之前,先将主机中 /usr/local/tslib/etc/ts.conf 文件第二行“#module_raw input”的注释去掉,变为“module_raw input”,注意一定要顶格。

(运行错误)
提示“ts_open:no such file or directory”
解决方法:
引起此错误的情况较多,触屏校正程序执行时会先去打开触屏的设备节点,IMX283开发板的触屏设备节点对应为/dev/event0,查看系统环境变量是否配置正确,查看/dev/目录下是否存在触屏的设备节点event0。
 
问题2.出现:no raw modules load
tsconfig:no such file or directory
解决方法:
/TSLIB/etc/ts_conf 文件中语句modle_raw input前可能存在空格,把空格去掉


更改配置:
在/etc/profile中添加
export TSLIB_ROOT=/usr/local/tslib
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0 
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_TSEVENTTYPE=INPUT
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts

(5)应用tslib

main.c

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/time.h>

#include "tslib.h"


int main()
{
	struct tsdev *ts;
	char *tsdevice=NULL;

        if( (tsdevice = getenv("TSLIB_TSDEVICE")) != NULL ) {
                ts = ts_open(tsdevice,0);
        } else {
                ts = ts_open("/dev/input/event0", 0);
        }

	if (!ts) {
		perror("ts_open");
		exit(1);
	}

	if (ts_config(ts)) {
		perror("ts_config");
		exit(1);
	}

	while (1) {
		struct ts_sample samp;
		int ret;

		ret = ts_read(ts, &samp, 1);

		if (ret < 0) {
			perror("ts_read");
			exit(1);
		}

		if (ret != 1)
			continue;

		printf("%ld.%06ld: %6d %6d %6d\n", samp.tv.tv_sec, samp.tv.tv_usec, samp.x, samp.y, samp.pressure);

	}
}

Makefile:

CC = arm-none-linux-gnueabi-gcc
INC = -I../include
CFLAGS =-L/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/tslib/tslib_install/lib -lts
 
TARGET=./main
 
SRC=$(wildcard ./*.c)
 
OBJ=$(patsubst %.c, %.o, $(SRC))
 
$(TARGET): $(OBJ)
	$(CC)  -o $@ $^  $(CFLAGS)
 
$(OBJ):%.o: %.c
	$(CC)  $(INC) -o $@ -c $< $(CFLAGS)
 
clean:
	rm -f *.o
	rm -f $(TARGET)

编译QT

打开解压目录下的mkspecs/qws/linux-arm-g++/qmake.conf:

$ vi mkspecs/qws/linux-arm-g++/qmake.conf

用vi打开qmake.conf 后,将arm-linux-全部替换 arm-none-linux-gnueabi-(注意:根据自己板子而定,并且一定要先将交叉编译器的路径加入PATH变量中),并加上-lts,然后保存退出,更改后如下:
```sh
#
# qmake configuration for building with arm-linux-g++
#

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

# modifications to g++.conf
QMAKE_CC                = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX               = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK              = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB        = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-g++ -lts

# modifications to linux.conf
QMAKE_AR                = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-objcopy
QMAKE_STRIP             = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-strip 

load(qt_config)
```

配置脚本:

sudo ./configure --prefix=/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/qt-everywhere-opensource-src-4.8.6/qt_install -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 demo -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/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/tslib/tslib_install/include -L/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/tslib/tslib_install/lib -confirm-license
make
make install

安装到平台上

编译完成以后得到qt_install
将lib中需要的文件拷贝到/usr/lib中
将fonts文件拷贝到/usr/lib中
对profile做出如下配置
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
export QT_QWS_FONTDIR=/usr/lib/fonts

运行
./IMX -qws

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与光同程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值