建立mini2440的Qt4.5.1工作环境

时间:2023-02-10 00:08:38

http://hi.baidu.com/wellalone/blog/item/2fbf0641942dd81d9213c611.html

 

 

一、工作环境

虚拟机版本:VM6.5
操作系统:fedora 9

编译工具:gcc 4.3 和arm-linux-gcc 4.3.2

文件系统:自己制作的文件系统,有基本的busybox工具和arm-linux-gcc 4.3.2的库,脚本基本缺省配置,最简单那种,仅仅能启动基本服务。注意:不是用友善光盘的文件系统。

移植的linux:系统是我自己直接从linux 2.6.30.10配置的,由于没友善的完善,可能缺了点驱动,所以假如是你也是自己配置的内核,请确保你的AD驱动跟触屏的驱动移植好,要不然,是无法进行触屏操作的。

参考文章:http://blog.chinaunix.net/u3/109488/showart_2138306.html

    :http://blog.sina.com.cn/s/blog_492448510100gdb8.html

压缩包:
1. qt-embedded-linux-opensource-src-4.5.1.tar.gz
2. qt-x11-linux-opensource-src-4.5.1.tar.gz
3. tslib-1.4.tar.gz

二、背景知识

  Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。
  Qt/E(Qt/Embedded)是用于嵌入式Linux系统的Qt版本。Qt/E去掉了X Lib的依赖而直接工作于Frame Buffer上,因而效率更高,但它并不是Qt的子集,而应该是超集,部分机制(如QCOP等)不能用于Qt/X11中。
  Qtopia是一个构建于Qt/E之上的类似桌面系统的应用环境。相比之下,Qt/E是基础类库。
  Qtopia Core:就是原来的Qt/E,大概从Qt 4开始改名,把Qtopia Core并到Qtopia的产品线中去了。但实际上Qtopia Core就相当于原来的Qt/E,仍然作为基础类库。
  另外,似乎奇趣最近又把Qtopia Core改名叫做Qt for Embedded Linux了,不知道是不是因为Qtopia Core搞得大家都很糊涂,没人来买的缘故。

-----------------------------------------------

  qt-x11-linux-opensource-src-4.5.1.tar.gz 这个安装包主要应用在linux下,安装完成后,会得到类似arm-linux-gcc和gcc这样的东西,可以编译相应的程序,安装这个包,有两个目的:

  1、方便以后在Linux环境下编译调试好后,移植到开发板上
  2、提供qmake、designer、qvfb等工具去让我们编译QT程序

  qt-embedded-linux-opensource-src-4.5.1.tar.gz,主要是为了获得在ARM下,运行QT程序的库文件,当然它也能提供像qmake、designer、qvfb工具,不过由于我们在安装了qt-x11-linux-opensource-src-      4.5.1.tar.gz的前提下,也就不需要重新安装了,所以这个安装包,我们可以根据实际情况缺省安装。


  tslib-1.4.tar.gz,这个是驱动触屏的程序,只有正确安装这个程序,我们才能够操作开板的触屏

三、安装tslib-1.4
  这是个触摸屏的库文件,据网上说qt4只支持tslib-1.4。我没有实验别的,就用了这个,可以成功。把tslib-1.4.tar.gz放到/home目录下
  #tar xvzf tslib-1.4.tar.gz
  #cd tslib
  #./autogen.sh
  #./configure --profix=/home/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
  #make
  #make install

  这样以后可以看到/home/mytslib/下有了库文件,移植时会用到!先不详细说明。

四、安装qt-x11-linux-opensource-src-4.5.1.tar.gz
  谨记,在安装这个包的时候,只要确保你的硬盘空间至少有6G以上,一般不会出错。
  把qt-x11-linux-opensource-src-4.5.1.tar.gz放到/opt目录下

  #tar xvzf qt-x11-linux-opensource-src-4.5.1.tar.gz
  #cd qt-x11-linux-opensource-src-4.5.1
  #./configure
  #gmake      //过程很长,由于我的机子配置差,编译了4小时以上,希望各位有心理准备
  #gmake install

  这是安装PC机上的qt4,方便设计,在PC机上能够成功了,在交叉编译就方便了!然后制作一个运行环境变量的文件,方便改变环境变量设置,如下在当前文件夹下接着输入
  #gedit setenv-x11.sh
  这时会跳出来一个编辑文本,在里面输入:


  PATH=/usr/local/Trolltech/Qt-4.5.1/bin:$PATH
  QTDIR=/usr/local/Trolltech/QT-4.5.2
  MAINPATH=$QTDIR/man:$MAINPATH
  LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
  export PATH QTDIR MAINPATH   LD_LIBRARY_PATH

  然后保存!在每次进入qt-x11-linux-opensource-src-4.5.1目录中要 #source setenv-x11.sh
把环境变量设置好。

五、安装qt-embedded-linux-opensource-src-4.5.1.tar.gz
  把qt-embedded-linux-opensource-src-4.5.1.tar.gz放到/tmp目录下
  在安装qt-embedded-linux-opensource-src-4.5.1.tar.gz之前先在根目录下建立两个目录(即文件夹)如下步骤:
    #cd /     进入根目录
    #mkdir mini2440   这里准备存放qt-embedded-linux-opensource-src-4.5.1的库文件
                         最后要移植到开发板的。
    #mkdir tslib    这里准备放触屏的库文件,最后也会移植到开发板。


  好了,现在安装qt-embedded-linux-opensource-src-4.5.1.tar.gz
    #cd /tmp 确定qt-embedded-linux-opensource-src-4.5.1.tar.gz放到/tmp目录下了才行
    #tar xvzf qt-embedded-linux-opensource-src-4.5.1.tar.gz
    #cd qt-embedded-linux-opensource-src-4.5.1.

    #./configure -prefix /mini2440   -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license -qt-mouse-tslib -I/home/mytslib/include -L/home/mytslib/lib

  mini2440内的空间有限,所以剪裁很多,注意最后的红色部分是为了找到触屏的库文件,然后
  #gmake
  #gmake install
  这样,嵌入式版本的qt4也装成功了,若想进行交叉编译,首先也得改变环境变量,所以也可以在当前目录下建一个环境变量的文件setenv-embedded.sh 如下:

  #gedit setenv-embedded.sh

  这时跳出一个编辑文本输入:

  PATH=/mini2440/bin:$PATH
  QTDIR=/mini2440
  MAINPATH=$QTDIR/man:$MAINPATH
  LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
  export PATH QTDIR MAINPATH   LD_LIBRARY_PATH

  保存退出。每次进行qt4-embedded的交叉编译前先# source setenv-embedded.sh

  两个版本的qt4在PC机上的安装算是结束了,下一步要移植嵌入式的qt4库文件到开发板。

六、制作库文件
  前面介绍了在根文件系统下建立两个目录mini2440和tslib1.4.经过第5步后,mini2440内已经有了库文件,现在把触屏的库文件移植到开发板的tslib目录。

  在根文件的mini2440文件中除了有lib目录,还有bin,examples等目录,我们只需要那个lib文件,大概30多兆,我们的nand flash有64M足够了,如果你是用友善自带的文件系统,可能需要删除它所带的qt2.2的库文件。

  在你制作的(mini2440)文件系统目录下
  #mkdir mini2440  
  #mkdir tslib

  将PC机下所生成的30多兆的lib库文件移动到文件系统的mini2440文件夹中,再将tslib安装成功后获得的文件夹,包括Lib,和bin等,放到你制作的文件系统的tslib文件夹当中。
  接着,进入tslib文件夹,修改ts.conf,将内容修改为:
  module_raw input
  module pthres pmin=1
  module variance delta=30
  module dejitter delta=100
  module linear

  最后,就是设置开发板的环境变量了,在你制作的文件系统中,进入/etc 修改proble文本添加以下信息

  export QTDIR=/mini2440
  export T_ROOT=/tslib
  export PATH=$QTDIR/bin:$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_MOUSE_PROTO=tslib:/dev/input/event0
  export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib

七、进入我们的hello world!
A,PC机下编译:
  进入PC机中/opt/qt-x11-linux-opensource-src-4.5.1
     #cd /opt/qt-x11-linux-opensource-src-4.5.1.
     #source setenv-x11.sh   改变环境变量,设置为适合pc机的开发环境
     #mkdir hello        
     #cd hello 进入hello目录
     #vi hello.cpp 编写hello world 程序,在hello.cpp中输入以下代码:
                   #include <QApplication>
                   #include <QPushButton>
                  int main(int argc, char *argv[])
                  {
                        QApplication app(argc,argv);
                        QPushButton b("Hello World !");
                        b.show();
                     QObject::connect(&b,SIGNAL(clicked()),&app,SLOT(quit()));
                     return app.exec();
                   }
  保存退出。然后在当前目录下继续执行以下命令:
  #qmake -project
  #qmake
  #make
  #ls

  这时在这个目录下可以看到生成了可执行文件hello,然后
  #./hello
  你会发现,跳出了一个hello world的对话框,这样一个简单的界面就成功了

B,交叉编译
  首先把/opt/qt-x11-linux-opensource-src-4.5.1下的hello目录拷到/tmp/qt-embedded-linux-opensource-src-4.5.1目录下

  #cp /opt/qt-x11-linux-opensource-src-4.5.1/hello /tmp/qt-embedded-linux-opensource-src-4.5.1
  #cd /tmp/qt-embedded-linux-opensource-src-4.5.1
  #source setenv-embedded.sh   这一步很关键,否则你交叉编译不了,改变的环境变量
  #cd hello
  #make clean
  #qmake -project             重新生成.pro
  #qmake                    重新生成适合交叉编译的Makefile
  #make
  #ls

  这时候,你发现有hello 的可执行文件,原来的hello已经被替换掉了,现在这个hello文件是适合开发板运行的!这时候你如果执行./hello是不会有界面的,把它放到开发板的文件系统下才会有界面(前提是设置好了开发板的环境变量,具体看下一步)

C,移植到开发板

  把刚才在/tmp/qt-embedded-linux-opensource-
src-4.5.1/hello下生成的hello可执行文件移植到开发板的根目录下(可自己选择存放位置),你可以用串口传送,优盘传送或者nfs,不管怎样,最后的结果是在超级终端下可以看到开发板的文件系统中有hello,我是放在了根目录下,然后在超级终端下操作开发板:

  #chmod +x hello   增加它的可执行权限

  然后输入,#./hello –qws ,嘿嘿,它报错了吧!原因很简单,因为还没进行触屏调校,所以
  #cd tslib
  #cd bin
  #./ ts_calibrate
  #./ts_test //试一下触屏的性能,兄弟,你的移植到了这一步,就离成功不远了。

  进行校验后,就可以正常使用触屏,再次输入#./hello –qws 看到hello world,不过呵呵,字有点小,相信,以后程序会修复到。
PS:如果是自己移植的系统,请确保,你已经创建了设备文件了,要不然触屏是找不到触屏的。