首页 > 编程语言 >交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序

时间:2023-02-01 22:37:27浏览次数:72  
标签:Qt lib 编译 TSLIB tslib QT4.8 1.21 qt


嵌入式linux平台交叉编译并移植QT4.8.5运行第一个嵌入式Qt程序


开发环境:

  • ubuntu1404-i686
  • TQ2440开发板(samsung s3c2440)
  • 天嵌官方交叉编译器(版本4.3.3)
  • qt-everywhere-opensource-src-4.8.5.tar.gz
  • tslib-1.21.tar.bz2

Qt下载地址:http://download.qt.io/archive/qt/​​
tslib下载地址:https://github.com/libts/tslib/releases


(一)安装编译所必须的库及工具

sudo apt-get install libtool autogen autoconf automake build-essential libgl1-mesa-dev

(二)交叉编译tslib-1.21

tar xvf tslib-1.21.tar.bz2
cd tslib-1.21/
./autogen.sh
./configure --host=arm-linux --prefix=/usr/local/tslib
make && make install

说明:–prefix=[安装目录,根据你的需求进行修改]

我编译的时候遇到如下两个问题:

  • ​./src/.libs/libts.so: undefined reference to EVIOCGPROP'​
  • ​error: 'SYN_MT_REPORT' undeclared (first use in this function)​

这两个问题出现的原因是tslib版本比较新,但是交叉编译器比较老,也就是版本不匹配的问题,这两个宏定义可以在主机linux中的<linux/input.h>头文件中找到(/usr/include/linux/input.h),直接复制过来粘贴进tslib/src/tslib.h中即可。

编译完成后,拷贝到开发板:

cp /usr/local/tslib /opt/embeded/yaffs2/lib -rf

配置开发板上tslib的环境:

vi /etc/profile

添加:

export TSLIB_ROOT=/lib/tslib
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib

说明:

  • TSLIB_ROOT是开发板文件系统上tslib库目录
  • TSLIB_TSDEVICE是触摸屏设备文件(可以使用命令cat /dev/event0测试一下,正常的话触摸屏幕会有乱码打印出来,若没有打印则该文件不是触摸屏的设备文件。
  • TSLIB_FBDEVICE是LCD帧缓冲设备文件。
  • TSLIB_CALIBFILE是校准屏幕后的坐标信息

更新环境变量:

source /etc/profile

运行屏幕校准测试:

/lib/tslib/bin/ts_calibrate

此时屏幕会出现坐标点,依次点击后会生成文件/etc/pointercal,该文件目录不要更改,因为Qt会在/etc
目录下找pointercal这个文件。


(三)交叉编译Qt-4.8.5

解压Qt源码包并进入

tar xvf qt-everywhere-opensource-src-4.8.5.tar.gz
cd qt-everywhere-opensource-src-4.8.5/

修改交叉编译器并添加tslib的库目录:

gedit mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf

第一步,添加tslib的包含目录和库目录:

QMAKE_INCDIR = /usr/local/tslib/include/
QMAKE_LIBDIR = /usr/local/tslib/lib/

第二步,修改编译器名称,改成你自己的交叉编译器,并添加-lts选项,目的是链接tslib库。

gedit mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf

修改后:

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序_交叉编译tslib

配置编译:

./configure -prefix /usr/local/qt4.8.5-arm \
-force-pkg-config \
-opensource \
-confirm-license \
-release -shared \
-embedded arm \
-xplatform qws/linux-arm-gnueabi-g++ \
-depths 16,18,24 \
-fast \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-qt-libpng \
-qt-freetype \
-little-endian -host-little-endian \
-no-qt3support \
-no-libtiff -no-libmng \
-no-opengl \
-no-mmx -no-sse -no-sse2 \
-no-3dnow \
-no-openssl \
-webkit \
-no-qvfb \
-qt-mouse-tslib \

说明:-prefix [Qt安装目录],这里根据你的需要进行修改。

开始编译并安装Qt:

make -j4 && make install

说明:-j4,这里的4表示是4核心,取决于你的电脑CPU是几核的,目的是为了加速编译。

我按照此开发环境和步骤编译是没有问题的,其他环境和版本未知。

编译完成后拷贝到开发板文件系统中:

cp /usr/local/qt4.8.5-arm /opt/embeded/yaffs2/lib/ -rf

(三)开发板Qt环境配置

配置开发板上qt的运行环境:

vi /etc/profile

添加:

export QWS_DISPLAY="LinuxFb:mmWidth95:0"
export QWS_MOUSE_PROTO=tslib:/dev/event0
export QWS_SIZE=480*272
export QTDIR=/lib/qt4.8.5-arm
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

说明:

  • QWS_DISPLAY是Qt的显示设备和设置分辨率,如果不设置那么在ARM上运行Qt程序显示的字体就会很小。具体设置参考这篇博客:http://blog.chinaunix.net/uid-26993600-id-4568302.html
  • QWS_MOUSE_PROTO是触摸设备文件,可以设置为:
    1. 触摸屏:​​​export QWS_MOUSE_PROTO=tslib:/dev/eventN​​​,N为数字
    2. USB鼠标:​​​export QWS_MOUSE_PROTO="Intellimouse:/dev/mouseN"​​,N为数字
  • QWS_SIZE是屏幕的大小
  • QTDIR是Qt的库目录

更新环境变量:

source /etc/profile

运行Qt自带的示例程序:

注意要加 -qws选项:

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序_开发板_02


效果:

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序_Qt_03


(四)运行自己编译的Qt程序

Qt的安装教程就不在此写了,网上很多linux上安装Qt的教程。

打开Qt Creator->Tools->Options…->Build & Run,配置如下几项:

添加qmake:

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序_Qt_04


添加交叉编译工具链:

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序_交叉编译tslib_05


添加构建套件:

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序_Qt_06

新建一个HelloWorld工程,构建套件选择我们刚添加的embeded,然后布局如下并编译工程:

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序_交叉编译tslib_07


编译完成后在工程目录下找到HelloQt并拷贝到开发板的文件系统中,然后./HelloQt -qws运行:

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序_开发板_08


开发板运行效果:

交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序_交叉编译Qt_09


ends…


标签:Qt,lib,编译,TSLIB,tslib,QT4.8,1.21,qt
From: https://blog.51cto.com/u_15950551/6031931

相关文章

  • 2023.1.21除夕课内浅浅学习
    早上-上午:1.语文:两首古诗背诵(15min)实际用时:14'07''2.英语:回顾单词(45min)实际用时32'09''3.生物:《五三》P17-P18,P179-P183(神经冲动的产生和传导)1hour20min实际用时:1ho......
  • 闲话 23.1.21
    闲话为啥最近在讲解板子呢?主要是最近过年了就不动脑子了(拜年祭!拜年祭!拜年祭!去bilibili233直播间可以砍很可爱寐寐大家!除夕快乐!冒泡排序,选择排序,插入排序,快速排序......
  • 2023.1.21 app后端pyinstaller启动
    1.打包后会在dist文件夹中暂时生成一个新的文件目录,点击app.exe后也是在这个暂时的文件目录下读取文件的,所以需要以下代码拷贝添加原始项目中的文件pyinstaller-Dapp.p......
  • qt4.8.7安装
    centos7.9Qt4.8.7静态编译安装依赖:yum-yinstalllibX11-devellibXext-devellibXtst-devel解压Qt源码到指定目录:tar-zxvfqt-everywhere-opensource-src-4.8.7.......
  • 2022.01.21.类成员函数指针
    在继承下,允许未经转换,父类的指针可以指向子类指针父类的指针可以指向子类对象:同意多种类型,提高复用性,扩展性在调用继承于同一个父类的多个子类的同一个函数时,可以使用父......
  • kubeasz搭建k8s集群1.21.0
    系统版本root@harbor:~#cat/etc/issueUbuntu20.04.2LTS\n\lIP分配和集群机器配置:192.168.10.110k8s-deploy-harbor2c2g192.168.10.111k8s-master1-etcd......
  • kubernetes 1.21 版本升级
    1.规划升级前:组件名称位置版本kube-apiserver/usr/bin/kube-apiserverv1.21.13etcd、etcdctl/usr/bin/etcd、/usr/bin/etcdctl3.5.4kube-controll......
  • ubuntu 二进制部署k8s 1.21版本
    #1.修改主机名hostnamectlset-hostnamek8s-master01hostnamectlset-hostnamek8s-node01hostnamectlset-hostnamek8s-node02#2.主机名解析cat>>/etc/host......
  • VS2019使用Qt4.8.7
    取消系统变量中的Qt_INCLUDEPATH_。C:\Users\octob\AppData\Local\QtMsBuild中添加qt4.natvis.xml,qt4.natvisforvisualstudio2015forqt4IverifiedQString,Q......
  • vs2019编译Qt4.8.7
    下载4.8.7源码Indexof/archive/qt/4.8/4.8.7复制mkspecs\win32-msvc2015到mkspecs\win32-msvc2019修改qmake.conf第2行:2017=>2019第4行:2017=>2019第12......