下载并编译tslib-1.4

下载地址:http://pan.baidu.com/disk/home#from=share_pan_logo&path=%2FWizNote
名称为:tslib-1.4.tar.gz,解压到source/tslib1.4目录下

a. 配置

sudo apt-get install automake libtool
./autogen.sh
./configure CC=arm-cortex_a9-linux-gnueabi-gcc CXX=arm-cortex_a9-linux-gnueabi-g++ --prefix=/usr/local/qt-arm/tslib-1.4 --host=arm-cortex_a9-linux-gnueabi ac_cv_func_malloc_0_nonnull=yes --enable-debug=no

b. 编译和安装

make
sudo make install

完成后,tslib1.4将会安装到/usr/local/qt-arm/tslib-1.4。

c. 修改配置文件
接着需要将tslib-1.4/etc/ts.tsconf文件第二行中的“#module_raw_input”中的注释去掉,并删除前面的空格。
说明:之所以需要编译tslib-1.4,是因为在采用触摸屏的设备中,触摸屏性能的调试是个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确、有抖动等问题。tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。

下载并编译qt4.8.5

下载地址:http://pan.baidu.com/disk/home#from=share_pan_logo&path=%2FWizNote
名称为:qt-everywhere-opensource-src-4.8.5.tar.gz, 解压到source/qt-4.8.5目录下

a. 指定交叉编译器

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

b. 配置

export TSLIB_ROOT=/usr/local/qt-arm/tslib-1.4
export PKG_CONFIG_PATH=$TSLIB_ROOT/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH
./configure -force-pkg-config --prefix=/usr/local/qt-arm/qt4.8.5 -opensource -release -shared -Declarative -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/usr/local/qt-arm/tslib-1.4/include -L/usr/local/qt-arm/tslib-1.4/lib -confirm-license

我在配置的时候碰到了如下错误:

The tslib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR and QMAKE_LIBDIR in
/home/jessen/source/qt//qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++.

提示找不到交叉编译器,但是我确信已经添加到环境变量中,无奈之下,我把a步骤中指定的交叉编译器统统改成了绝对路径,就此通过配置。

c. 修改源码
修改…/src/gui/embedded/qkbdlinuxinput_qws.cpp

#if 0if (m_tty_fd >= 0) {// save tty config for restore.tcgetattr(m_tty_fd, &m_tty_attr);struct ::termios termdata;tcgetattr(m_tty_fd, &termdata);// record the original mode so we can restore it again in the destructor.::ioctl(m_tty_fd, KDGKBMODE, &m_orig_kbmode);// setting this translation mode is even needed in INPUT mode to prevent// the shell from also interpreting codes, if the process has a tty// attached: e.g. Ctrl+C wouldn't copy, but kill the application.::ioctl(m_tty_fd, KDSKBMODE, K_MEDIUMRAW);// set the tty layer to pass-throughtermdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);termdata.c_oflag = 0;termdata.c_cflag = CREAD | CS8;termdata.c_lflag = 0;termdata.c_cc[VTIME]=0;termdata.c_cc[VMIN]=1;cfsetispeed(&termdata, 9600);cfsetospeed(&termdata, 9600);tcsetattr(m_tty_fd, TCSANOW, &termdata);}
#endif

如果不修改的话,在嵌入式设备中使用环境变量QWS_KEYBOARD的时候,运行Qt程序,程序会被挂起,串口终端那边无法再输入任何东西。大多数人的解决办法就是使用QWS_USB_KEYBOARD,但是由于我使用的是不是USB键盘设备,所以这种方法对我没什么用。

d. 编译和安装

sudo make
sudo make install

完成后,qt将会被安装到/usr/local/qt-arm/qt4.8.5。

配置PC端

export PATH=$PATH:/usr/local/qt4.8.5-arm/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qt4.8.5-arm/lib

配置ARM端

#tslib...............
export TSDIR=/usr/local/qt-arm/tslib-1.4
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_PLUGINDIR=$TSDIR/lib/ts
export TSLIB_CONFFILE=$TSDIR/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_TSEVENTTYPE=H3600
export PATH=$TSDIR/bin:$PATH
export LD_LIBRARY_PATH=$TSDIR/lib:$LD_LIBRARY_PATH
#qt4.8.5..............
export QTDIR=/usr/local/qt-arm/qt4.8.5
#export QWS_MOUSE_PROTO="Tslib:/dev/input/event1"
#export QWS_MOUSE_PROTO="Intellimouse:/dev/input/mice"
export QWS_MOUSE_PROTO="LinuxInput:/dev/input/event1 IntelliMouse:/dev/input/mice"
export QWS_SIZE=1024x600
export QWS_KEYBOARD="LinuxInput:/dev/input/event0"
#export QWS_DISPLAY="LinuxFb:mmWidth600:mmHeight480:0"
export QWS_DISPLAY="LinuxFB:/dev/fb0"
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QT_PLUGIN_PATH=$QTDIR/plugins/
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

这里有个问题就是究竟event0是键盘还是event1是键盘,这个可以利用tslib-1.4/bin下的ts_tests来测试。
或者

cat /proc/bus/input/devices

测试代码

hello.cpp

#include <QApplication>
#include <QPushButton>int main(int argc,char *argv[])
{QApplication app(argc,argv);QPushButton btn("hello world!");btn.show();return app.exec();
}

在PC上接着编译,

qmake -project
qmake hello.pro

然后弄到arm下运行

./hello -qws

如果一切顺利的话就可以看到显示啦。

qt4.8.5在arm下的移植相关推荐

  1. 解决Windows下Arm下Linux下Qt4程序的中文乱码问题

    解决Windows下Arm下Linux下Qt4程序的中文乱码问题 ################################################################### ...

  2. [2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植

    文章目录 一.前言 二.准备所用到的环境以及版本信息 1.Ubuntu和内核版本 2.gcc和g++版本 3.交叉编译gcc和g++版本 4.开发板信息 三.开发环境编译&安装qrencode ...

  3. QT4.6.3在TQ2440上的移植

    QT4.6.3在TQ2440上的移植 1. 需要的工具和开发环境 交叉编译工具:arm-linux-gcc-4.4.3-20100728.tar.gz Qt包:qt-everywhere-openso ...

  4. OpenCV在ARM上的移植

    OpenCV在ARM上的移植 与X86 Linux类似,请参考: Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且 ...

  5. 移植c语言算法到arm上,μCOS-II移植到ARM处理器上的几个要点

    原标题:μCOS-II移植到ARM处理器上的几个要点 本文主要介绍μCOS-II移植到ARM处理器上的几个要点,如下所示: uCOS II在ARM处理器上移植过程中的中断处理 uCOS II是一个源码 ...

  6. Android x86的arm兼容库移植--初步分析及尝试手动移植houdini/ndk_translation

    适用于x86架构的安卓5.0以上需要root,或者离线改文件,但并非全部适用:本文仅为个人经验,未涵盖的地方需要自行探索. 手动移植Android x86的arm兼容库(houdini/ndk_tra ...

  7. 北邮实验:ARM实验板移植Linux操作系统,LCD显示汉字

    ARM实验板移植Linux操作系统,LCD显示汉字 一. 实验目的 1. 熟悉点阵字库的使用2. 熟悉Linux操作系统的使用3. 熟悉ARM嵌入式系统开发的过程 二. 实验内容 1. pc端编写用* ...

  8. arm开发板移植 curl

    arm开发板移植 curl 一,下载curl源码 二,配置curl 三,移植到arm平台上 三,arm平台curl测试 一,下载curl源码 地址:https://curl.haxx.se/downl ...

  9. arm linux imx6u移植goahead web服务器

    arm linux imx6u移植goahead web服务器 源码下载 源码结构 源码移植 源码下载 1.源码版本goahead2.5 2. 百度云下载链接https://pan.baidu.com ...

最新文章

  1. 数据库中存储与读取文件
  2. zigbee 串口不稳定_基于项目的ZigBee系统组网介绍
  3. 美团、饿了么,你凭什么让我多等几分钟?
  4. std::ios::sync_with_stdio(false);
  5. easyui tabs 使用iframe 出现两个垂直滚动条 解决方法
  6. 阅读文献的三大问题:坐不住,记不住,想不开
  7. 蛤玮学计网 -- 简单的判断ip
  8. python模拟postman发https请求_【接口测试】Postman入门01-特点和简介
  9. overflow超出显示_实现:超过N行折叠并显示“...查看全部”【功能】
  10. Artech的MVC4框架学习——第八章View的呈现
  11. 路由删除命令_清除思科路由器配置信息的两种方法
  12. 大数据信息安全需要准备哪些工具
  13. MongoDB的江湖传说
  14. OpenStack柏林峰会主会场侧记:OpenStack立柱、拱券与灵魂
  15. 瑞星个人防火墙万能序列号ID号
  16. 基于SSM实现的演唱会网上订票系统-JAVA【数据库设计、源码、开题报告】
  17. 脱机使用打印机是什么意思?
  18. kfc小程序_利用实验室成长的“未来之肉”将肯德基转换为3D打印鸡肉
  19. 如何在网络上传输中文
  20. 霍夫变换阀值选取问题

热门文章

  1. c语言数字拆分,在手机上玩C语言—数字拆分
  2. Java swing简易浏览器(其二)前进后退与收藏夹实现
  3. 用js写一个功德木鱼
  4. C#异步执行方法的几种方式
  5. 第10课:《ChatGPT提示工程》—— Guidelines(入门)
  6. replaceAll()如何同时替换多个不同的字符串(或多个符号)
  7. 如何搭建自己CDN服务器
  8. 论微信朋友圈,巨头的解决之道
  9. 两两相望计算机音乐,两两相望 苏汐洋 两两相望歌曲,两两相望mp3在线试听 - 5nd音乐网...
  10. 【我的Android进阶之旅】 高效的设计稿标注及测量工具Markman介绍