zoukankan      html  css  js  c++  java
  • qt移植

    QT 移植

    1.交叉编译工具的安装和配置

    1.1 首先需要明白,在linux下编译的可执行文件在arm下是不能跑的,所以我们需要一个交叉编译工具,这个工具是为了在虚拟机中的linux下通过arm-linux-g++指令编译成的程序,而这个程序才能在arm板上跑起来!

    1.2 下载一个EABI-4.3.3_EmbedSky_20100610.tar.bz2(这是一个已经弄好的程序),解压后只需要把bin文件下的可执行程序配置进环境变量中即可

    1.3 一般的,在/usr/local/创建一个arm-linux-compiler文件夹,解压到该文件夹下,然后把/usr/local/arm-linux-compiler/opt/EmbedSky/4.3.3/bin,该路径配置进/etc/profile文件中即可

    1.4 vim /etc/profile   在最后一行加上 export PATH=/usr/local/arm-linux-compiler/opt/EmbedSky/4.3.3/bin:$APTH      执行命令source /etc/profile , 此时生效!(永久生效), $PATH查看是否生效,没有生效,PATH=.....:$PATH临时配置也行,或者重启

    1.5 在命令界面下,任意路径下执行  arm-linux-gcc ,若有此命令,恭喜你,第一步已经成功!

    到这一步,所写得c程序,在通过arm-linux-gcc命令编译过后的程序,传送到arm板上,已经可以运行了!

    2.tslib的编译,安装

    2.1 tslib 这玩意用来干啥?arm有触控屏吧?要能点,能动吧?就是用来干这事的!

    2.2 下载一个 tslib-1.4.tar.gz , 解压到opt下.(在 http://blog.chinaunix.net/u2/75270/showart_1793535.html 有tslib 1.4的下载)

    2.3 进入/opt/tslib目录下,执行.autogen.sh脚本(这玩意是用来生成配置文件的)

    2.4 运行配置文件,设置安装路径  ./configure --prefix=/usr/local/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes(--prefix=/usr/local/tslib:安装路径参数)

    2.5 

    修改tests目录下的ts_calibrate.c

    在判断if (perform_calibration (&cal)) 中

    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);
    }

    2.6 返回目录tslib, 执行 make 命令(编译); 再执行 make install 命令(安装)

    2.7 最后一步将虚拟机中linux系统下的/usr/local/ 目录中的tslib中的所有东西tar 打包,发送到arm板上的linux系统中相应的文件夹下,即/usr/local,解压!(正常情况下,这样就差不多了,但为了双重保险)

      把tslib 中的 bin etc lib include 文件夹全部复制到  arm板中的linux系统的对应文件下bin->/bin    etc->/etc   lib->/usr/lib  include->/usr/include(没有则手动创建)(复制文件夹,别给我用cp指令,里面有动态链接库,tar后再cp,然后再解压开,否则后面步骤会出现各种问题)

    2.8 至此第二步骤已经完成!不过别急,重头戏在后面。。。

    3.Qt arm 板的编译和安装(装在虚拟机中的linux)

    3.1 既然是qt移植,没个qt软件还搞毛线!

    3.2 下载一个qt-everywhere-opensource-src-4.7.4.tar.gz ,解压到/opt文件夹下,到/opt/qt-everywhere-opensource-src-4.7.4/mkspecs/qws/linux-arm-g++下查看是否有qmake.conf  以及qplatformdefs.h,如果没有从别的目录拷贝过来(一般都有,除非你命苦)

    3.3

    查看qmake.conf 文件内容,是否有

    QMAKE_CC                = arm-linux-gcc 

    QMAKE_CXX               = arm-linux-g++ 

    QMAKE_LINK             = arm-linux-g++ 

    QMAKE_LINK_SHLIB        = arm-linux-g++ 

    你的qt程序是要移植到arm板上的,所以明白这玩意的意义了吧。

    3.4 最后就是编写脚本文件 gedit myconfig.sh  ./myconfig.sh  然后老规矩 make (这一步需要花大量的时间,别急慢慢等)   make install

    4.测试QT arm 开发环境

    4.1 配置环境变量 

    export ARMQDIR=/usr/local/Trolltech/QtEmbedded-4.7.0-arm

    export PATH=$ARMQDIR/bin:$PATH

    export MANPATH=$ARMQDIR/man:$MANPATH

    export LD_LIBRARY_PATH=$ARMQDIR/LIB:$LD_LIBRARY_PATH

    4.2 

    执行qmake -v, 显示以下信息

    QMake version 2.01a

    Using Qt version 4.7.4 in /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib

    执行which qmake, 显示

    /usr/local/Trolltech/QtEmbedded-4.7.0-arm/bin/qmake

    说明环境变量配置成功!

    4.3

    编写一个hello world.cpp 程序 c++程序

    #include <QApplication>
    #include <QLabel>
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    QLabel *label = new QLabel("Hello Qt!");
    label->show();
    return app.exec();
    }

    4.4 在当前目录下

    4.4.1执行qmake  -project;qmake  -makefile

    生成Makefile

    4.4.2 执行make  生成helloworld 程序

    File  helloworld  命令查看文件属性 可看见  ARM关键字。。

    至此,虚拟机中的linux的开发环境已经搭完,也就是说,编译后的文件是可以在arm板上跑的,如果你的程序可以在虚拟机中的linux上跑,那么恭喜你,上面哪一步出错了~~~~

    5.arm上的linux

    5.1 前面的步骤,完成的是vm下linux的搭建,那么想vm下linux生成的qt程序能在arm上实际跑起来,arm中的linux也需要搭建一下环境,简单的说,就是环境变量的配置,所需运行库的拷贝

    5.2 首先在开发板的linux 系统下建立同名的目录,以便拷贝, /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib   

    5.3 把虚拟机下的linux的/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib目录下的文件全部拷贝过去

    5.4  把虚拟机下的linux的/usr/local/tslib 所有的文件拷贝到开发板上(同一个路径下)在前面的第二步,已经完成!

    5.5.设置环境变量 vi setqtenv

    export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH

    export QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.0-arm

    export T_ROOT=/usr/local/tslib

    export PATH=$T_ROOT/bin:$PATH

    export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH

    export TSLIB_CONSOLEDEVICE=none

    export TSLIB_FBDEVICE=/dev/fb0

    export TSLIB_TSDEVICE=/dev/input/event0

    export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

    export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

    export TSLIB_CALIBFILE=/etc/pointercal

    export QWS_KEYBOARD=USB:/dev/input/event1

    export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

    export QT_QWS_FONTDIR=$QTDIR/lib/fonts

    执行 source setqtenv

    5.6 然后把 libstdc++.so.6.0.9 和libz.so.1.2.3 传送到开发板的 /usr/local/lib 目录下(这俩个文件分别在vm linux下的/usr/lib   /lib  文件夹下)

    5.7

    在开发板运行触摸屏校正:
    (1) 在运行触摸屏校正之前,需要设置一些环境变量,以下是我的开发板的 /etc/profile 文件的内容:

    设置环境变量 vi profile

    vi profile

    # Ash profile                                                       

    # vim: syntax=sh                                                    

    # No core files by default                                          

    #ulimit -S -c 0 > /dev/null 2>&1                                                                         

    export set HOME=/root                                               

    #export set QTDIR=/opt/PDA                                           

    #export set QPEDIR=/opt/PDA     

    export set QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.0-arm

    export set QPEDIR=/usr/local/tslib                                 

    export set QWS_DISPLAY="LinuxFB:/dev/fb0"                           

    export set QWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"           

    export set QWS_KEYBOARD="TTY:/dev/tty1"                             

    if [ -f /sys/devices/virtual/input/input1/uevent ] ; then           

            export set TSLIB_TSDEVICE=/dev/event1                       

            export set TSLIB_CALIBFILE=/etc/pointercal                  

            export set TSLIB_CONFFILE=/etc/ts.conf                      

            export set TSLIB_PLUGINDIR=/lib/ts                          

            export set QWS_MOUSE_PROTO="TSLIB:/dev/event1 MouseMan:/dev/"

    else                                                                 

            export set QWS_MOUSE_PROTO="MouseMan:/dev/mice"             

    fi                                                                  

    #export set QT_PLUGIN_PATH=$QTDIR/plugins/                            

    export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH

    export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/

    export set PATH=$QPEDIR/bin:$PATH                                   

    #export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/plugins/imageformats:$P

    export set LD_LIBRARY_PATH=$QPEDIR/lib:$QTDIR/lib:$LD_LIBRARY_PATH

    export set TSLIB_TSDEVICE=/dev/event1     

    export set TSLIB_CALIBFILE=/etc/pointercal                              

    export set TSLIB_CONFFILE=$T_ROOT/etc/ts.conf                           

    export set TSLIB_PLUGINDIR=$T_ROOT/lib/ts

    export TSLIB_FBDEVICE=/dev/fb0

    export TSLIB_CONSOLEDEVICE=none                                                             

    USER="`id -un`"                                                     

    LOGNAME=$USER                                                        

    PS1='[u@h W]# '                                                  

    PATH=$PATH                                                                                                                 

    HOSTNAME=`/bin/hostname`                                                                                                         

    export USER LOGNAME PS1 PATH           

    source profile

    5.8 运行触摸屏校正:
    # cd /usr/local/tslib/bin
    # ./ts_calibrate
          报错 “No raw modules loaded.”, 原因是缺省时,/usr/local/tslib/etc/ts.conf 中所有的 raw module 都注释掉了,打开第一项 “module_raw input” 即可 。

      重新运行,应该成功;点击屏幕上出现的需要校正的“+”,校正结果存放在 ,/usr/local/tslib/etc/pointercal 文件中。

    5.9 运行QT测试程序

    ./helloworld -qws

    至此,大工告成!!!!(期间会遇到各种问题,不罗列出来,祝好运~~)

  • 相关阅读:
    anoconda 安装jieba库
    数据挖掘算法
    统计学方法论
    PowerBI 的简单介绍
    Numpy的补充(重要!!)
    Mysql语法顺序和执行顺序
    快速激活Navicat Premium 12
    day4-Mysql数据库基础操作
    day3-Mysql多实例配置
    day2-Mysql5.6.36编译安装
  • 原文地址:https://www.cnblogs.com/helloc14/p/7223060.html
Copyright © 2011-2022 走看看