qte在mini2440上的移植及交叉编译环境的搭建.doc_第1页
qte在mini2440上的移植及交叉编译环境的搭建.doc_第2页
qte在mini2440上的移植及交叉编译环境的搭建.doc_第3页
qte在mini2440上的移植及交叉编译环境的搭建.doc_第4页
qte在mini2440上的移植及交叉编译环境的搭建.doc_第5页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网上的文章不少,不过大多都是摘录别人的,直接复制过来自己都不实践一下,复制来复制去难免有很多错误发生,一个小错误可能就误导了不少人。更气人 的是有的还不说明是转载来的,让别人费了半天劲弄不出来才发现文章有错。以下内容是我参考下面两篇文章亲自实践过的。适应与我的环境。下面详细说明。强烈 建议详细阅读这篇博客/space.php?uid=23121765&do=blog&cuid=2138306。读懂了那么我的就不用看了。主要参考文章:/wellalone/blog/item/2fbf0641942dd81d9213c611.html/space.php?uid=23121765&do=blog&cuid=2138306一:环境介绍ubuntu 11.04 arm-linux-gcc4.4.3 虚拟机VMware6.5 使用的是我之前制作的文件系统,这个文件系统仅仅能够完整基本的启动功能。内核是采用友善之臂提供的内核,使用我自己制作的内核发现触摸屏的驱动没有调试好(应该还和AD转换有关,没有深究)。 由于我这是在新装的虚拟机系统,所有在装之前,我安装了gcc 、g+,arm-linux-gcc等必须的工具。须要用到的压缩包:1. qt-embedded-linux-opensource-src-4.5.1.tar.gz2. qt-x11-linux-opensource-src-4.5.1.tar.gz3. tslib-1.4.tar.gzqt-x11-linux-opensource-src-4.5.1.tar.gz这个安装包主要应用在linux下,安装完成后,会得到类似arm-linux-gcc和gcc这样的东西,可以编译相应的程序,安装这个包,有两个目的:1、方便以后在Linux环境下编译调试好后,移植到开发板上2、提供qmake、designer、qvfb等工具去让我们编译QT程序但 是即使我装了这个包,在使用qvfb &时,提示要想运行qvfb,还需要安装qt4-dev-embeddded(具体提示是不是这个我记不太清了,提示可以安装两个,一个是这,另 外一个是qt3-dev-tools-embedded,我安装了第一个).。结果安装完成之后可以运行qvfb了。其实我当时在测试miniguif的 时候,使用qvfb是用了qt3-dev-tools-embedded。但是网上有说这个版本的qvfb会出错,所有就没有装下面一个。虽然这个包很费时,还是装了吧,毕竟可能必须有这个包的。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库。为了更好的说明。我们约定以上三个软件包在/opt目录。首先安装tslib-1.4.tar.gzcd /opttar zxvf tslib-1.4.tar.gzcd tslib./autogen.sh #必须先执行这个才会生成makefile文件./configure -prefix=/home/mytslib/ -host=arm-linux ac_cv_func_malloc_0_nonnull=yes #注意中间的空格makemake install这样就将可以在/home/mytslib/看到有库文件了,移植时会用到。(保险起见首先在/home下建立mytslib目录)正如我上一篇博文提到的,这一步经常出现的错误是“cant exec libtoolize这个时候执行:apt-get install autoconf automake libtool详见我上一篇博文:/%C7%E5%D3%C6%CE%D2%D0%C4/blog/item/3b54af67f9143d33ab184ca0.html三:安装qt-x11-linux-opensource-src-4.5.1.tar.gz qt- x11版本可以产生Qt开发工具,如qmake、designer、qvfb(Qt/Embedded Virtual Framebuffer)等等。借助qvfb工具就可以在PC上仿真开发Qt Embedded 的应程序。其实编译qt-x11的主要目的是为了得到qvfb这个工具,为此花费好几个钟, 安装这个库须要很大的硬盘容量,如果是虚拟机的话很可能出现磁盘不足,要有准备。网上说至少须要6G。#tar xvzf qt-x11-linux-opensource-src-4.5.1.tar.gz#cd qt-x11-linux-opensource-src-4.5.1#./configure -prefix /usr/local/qt-x86 -qvfb #设置编译安装到/usr/local/qt-x86目录。为了保险起见,最好实现创建该目录。#make#make install #执行该命令后,就安装到了/usr/local/qt-x86目录。这里网上很多地方使用的都是gmake,我在ubuntu上使用gmake,他不认识。后来查到说gmake在linux环境中就是make,我就使用make,make install。配置参数中记得一定要有-qvfb,否则后面的qvfb工具无法编译。这一编译过程十分耗时,约三个小时。 到这里还没有完,还须要编译安装qvfb。执行完上面的步骤后,然后就可以编译安装qvfb了。cd qt-x11-opensource-src-4.5.3/tools/qvfb/makesudo make install (注:是在qt-x11-opensource-src-4.5.3/tools/qvfb/目录下执行此命令的)这样qvfb就被安装到/usr/local/qt-x86/bin目录下了。下面就是设置环境变量,使我们可以直接使用qvfb。gedit /.bashrc在该文件最后加上:export PATH=$PATH:/usr/local/qte-x86/bin保存退出即可。我在完成了以上步骤后执行qvfb &。发现提示还须要安装别的软件包(如前面所述),那就安装吧。安装完成之后就可以使用qvfb了。(转载请注明来源:清悠我心:/%E6%B8%85%E6%82%A0%E6%88%91%E5%BF%83/home)四,编译安装qt-embedded。 我们在/opt目录新建两个目录:qte-x86 ,qte-arm。将qt-embedded-linux-opensource-src-4.5.3解压之后,把里面的文件分别全部复制到qte-x86和qte-arm中。须要说明的是:在qte-x86目录下编译x86架构的编译工具链,用于PC机上的仿真调试。在qte-arm目录下编译arm架构的编译工具链,用于交叉编译在arm开发板上运行的程序。A:编译安装qte-x86(进入到/opt/qte-x86目录)依次执行./configure -prefix /usr/local/qte-x86-no-qt3support -system-zlib -system-libtiff -system-libpng -qt-libmng -system-libjpeg -make libs -make examples -make demos -no-nis -no-cups -no-iconv -xplatform qws/linux-x86-g+ -embedded x86 -depths 16,24,32 -qt-gfx-qvfb -no-gfx-linuxfb -no-gfx-transformed -no-gfx-vnc -no-gfx-multiscreen -qt-kbd-usb -qt-kbd-tty -qt-kbd-qvfb -qt-mouse-pc -no-glib -qt-mouse-qvfbmakemake install #安装到了/usr/local/qte-x86,最好事先建立该该文件夹B:编译安装qte-arm(进入到/opt/qte-arm目录)依次执行./configure -prefix /usr/local/qte-arm -no-qt3support -qt-zlib -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake demos -nomake docs -no-nis -no-cups -no-iconv -xplatform qws/linux-arm-g+ -embedded arm -little-endian -qt-freetype -depths 8,16,24,32 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-qvfb -no-gfx-vnc -no-gfx-multiscreen -qt-kbd-usb -qt-kbd-tty -qt-mouse-pc -no-glib -qt-mouse-tslib -I/home/mytslib/include -L/home/mytslib/libmakemake install编译选项-qt-mouse-tslib需要用到触摸屏功能的动态库,所以得把之前编译安装的tslib库包含进来。至此,Qt/E的编译安装工作算是完成了,把这两个都编译好所花时间4个多小时,还真是一个漫长的过程。(特 别说明:编译安装以上两个库,我的系统报出了很多错误。这些错误奇奇怪怪,但都有一个共同点:一定是由于某一个文件库没有安装或者找不到某个文件。针对这 个问题,我都是一个错误一个错误的查的。如果提示缺少了某一个库。特别是png,jpeg,zlib库,下载源码包都装上了。我就使用yum 或者新立德软件包管理器,只要看着名称相似的软件包我都转上。如果是提示缺少某一个文件,我就在本系统中搜索该文件,一般是缺少头文件,找到之后我就将他 放在/usr/include目录。也不不知道排了多少错,总算完整编译了。如果说这几天最大的收获是什么,我觉得就是我在linux下排错的能力有了提高) 为了方便使用qte-x86和qte-arm工具链来编译程序,必要的环境变量还是得设置一下的。其实,在编译Qt程序时,我们一般只是使用到了qmake工具,所以只要在/.bashrc中添加几个alias就可以了。gedit /.bashrc在该文件最后加上:alias qte-x86-make=/usr/local/qte-x86/bin/qmakealias qte-arm-make=/usr/local/qte-arm/bin/qmake到这里,交叉编译环境以及要移植的环境都搭建好了。五,制作配置文件系统 我们在mini2440根文件系统的根目录中创建mini2440,tslib目录。我的开发板上的文件系统是/opt下rootfs。那么就在rootfs下创建mini2440和tslib目录。 我们把/usr/local/qte-arm目录下的lib目录复制到开发板文件系统的mini2440文件夹(网上说复制lib这一个就好了,我还复制了include)。然后将/home/mytslib/下面的所有文件都复制到开发板 文件系统的tslib目录包括lib,bin等。我们进入开发板的tslib/etc文件夹,修改触屏配置gedtt /opt/rootfs/tslib/etc/ts.conf修改如下:module_raw input #就是在把这个之前的#号去掉,其他不变,据说前面不能有空格module pthres pmin=1module variance delta=30module dejitter delta=100module linear最后,就是设置开发板的环境变量了,在你制作的文件系统中,进入/etc修改profile文本添加以下信息export QTDIR=/mini2440export T_ROOT=/tslibexport PATH=$QTDIR/bin:$PATHexport TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0export TSLIB_TSDEVICE=/dev/input/event0export TSLIB_PLUGINDIR=$T_ROOT/lib/tsexport TSLIB_CONFFILE=$T_ROOT/etc/ts.confexport TSLIB_CALIBFILE=/etc/pointercalexport QWS_MOUSE_PROTO=tslib:/dev/input/event0export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib六,测试我们在/opt/code编写三个文件如下:这些代码是在网上摘录的finddialog.cpp#include #include finddialog.hFindDialog:FindDialog(QWidget *parent) :QDialog(parent) label=new QLabel(tr(Find &what:); lineEdit=new QLineEdit; label-setBuddy(lineEdit);caseCheckBox=new QCheckBox(tr(Match &case); backwardCheckBox=new QCheckBox(tr(Search &backward); findButton=new QPushButton(tr(&Find); findButton-setDefault(true); findButton-setEnabled(false);closeButton=new QPushButton(tr(Close);connect(lineEdit,SIGNAL(textChanged(const QString &),this,SLOT(enableFindButton(const QString &); connect(findButton,SIGNAL(clicked(),this,SLOT(findClicked(); connect(closeButton,SIGNAL(clicked(),this,SLOT(close();QHBoxLayout *topLeftLayout =new QHBoxLayout; topLeftLayout-addWidget(label); topLeftLayout-addWidget(lineEdit);QVBoxLayout *leftLayout=new QVBoxLayout; leftLayout-addLayout(topLeftLayout); leftLayout-addWidget(caseCheckBox); leftLayout-addWidget(backwardCheckBox); QVBoxLayout *rightLayout=new QVBoxLayout; rightLayout-addWidget(findButton); rightLayout-addWidget(closeButton); rightLayout-addStretch();QVBoxLayout *mainLayout=new QVBoxLayout; mainLayout-addLayout(leftLayout); mainLayout-addLayout(rightLayout); setLayout(mainLayout);setWindowTitle(tr(Find); setFixedHeight(sizeHint().height();void FindDialog:findClicked()QString text =lineEdit-text();Qt:CaseSensitivity cs=caseCheckBox-isChecked() ? Qt:CaseSensitive :Qt:CaseInsensitive;if(backwardCheckBox-isChecked() emit findPrevious(text,cs);else emit findNext(text,cs);void FindDialog:enableFindButton(const QString &text)findButton-setEnabled(!text.isEmpty();finddialog.h#ifndef FINDDIALOG_H#define FINDDIALOG_H#include class QCheckBox;class QLabel;class QLineEdit;class QPushButton;class FindDialog : public QDialogQ_OBJECTpublic: FindDialog(QWidget *parent=0);signals: void findNext(const QString &str,Qt:CaseSensitivity cs); void findPrevious(const QString &str,Qt:CaseSensitivity cs);private slots: void findClicked(); void enableFindButton(const QString &text);private: QLabel *label; QLineEdit *lineEdit; QCheckBox *caseCheckBox; QCheckBox *backwardCheckBox; QPushButton *findButton; QPushButton *closeButton;#endifmain.cpp#include #include finddialog.hint main(int argc, char *argv) QApplication a(argc, argv); FindDialog *dialog=new FindDialog; dialog-show(); return a.exec();在编写一个文件,代码如下:HEADERS = finddialog.hSOURCES = finddialog.cpp main.cppCONFIG+=qt warn_off release在当前目录执行:qte-x86-make make会生成一个可执行的hello。我们继续执行qvfb &,打开qvfb。然后执行./hello -qws,会出现如下图面。本机交叉编译测试成功。接着我们执行make clean。主要是消除上面qte-x86-make产生的文件,不然我们在下面使用qte-arm-make的时候会报错。继续执行:qte-arm-make make将生成的hello可执行文件放到开发板文件系统的根目录。我们在/opt目录执行:mkyaffs2image-128 rootfs rootfs.img会生成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论