原创 基于OMAP3530 QT/E的移植全过程

2009-10-27 11:00 5196 9 11 分类: MCU/ 嵌入式

PC 机:    操作系统fedora 8   <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


toolchain Gouceg++ 2007q3版本


Omap3530 linux<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.6.22


源代码:   tmake-1.13.tar.gz   qt-embedded-2.3.10-free.tar.gz  qt-x11-2.3.2 .tar.gz


依赖库:   e2fsprogs-libs-1.37 ext2 文件系统工具包


             jpeg-6b jpeg 解码库


             tslib 触摸屏工具包


             libstdc++  C++标准库


 


作者:gurongjiang


http://blog.ednchina.com/gurongjiang/


                                          



 


最近到手的这块OMAP35xEVM,虽然非常强大,奈何只是一个评估板子,里面几乎没有什么应用,到现在我对linux下怎么控制DSP核,SGX核等都没有完全搞清楚。算了这些先放一放,以前一直想搞QT,可惜原来的s3c2440太老了,是03年的,只有16MNORFLASH,只能玩玩minigui了,现在就用这个OMAPQT玩玩吧,百度了一下,用这个板子的人几乎没有,资料就更少的可怜了,只能自己动手了,根据博创的2410移植QT的手册照猫画虎,花了整整两天终于弄好了。其中有很多问题的解决还是很花心思,给大家分享下。


 


一.             PCQTE的移植


 


1)解压安装包并设置环境变量


     把上面的源文件都复制到:   /Qt


 


  1.安装Tmake


cd  /Qt


tar –xzf tmake-1.13.tar.gz


export TMAKEDIR=$PWD/tmake-1.13


2.安装Qt 2.3.2


cd  /Qt


tar –xzf qt-x11-2.3.2.tar.gz


export QT2DIR=$PWD/qt-2.3.2


3安装Qt/Embedded


cd  /Qt


tar –xzf qt-embedded-2.3.10-free.tar.gz


export QTEDIR=$PWD/qt-2.3.10


 


环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包.


 


(2)编译


   1.首先,要先编译出Qt,利用Qt的库编译QtE


   1Build Qt2.3.2


cd $QT2DIR


export TMAKEPATH=$TMAKEDIR/lib/linux-g++//利用tmake工具编译


export QTDIR=$QT2DIR


export PATH=$QTDIR/bin:$PATH


export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH


./configure -no-xft                           //出现选项时都输入yes


make


cp –arf bin/uic $QTEDIR/bin/                 //新编译出的uic覆盖旧的


 


      ./configure 是对Qt 进行配置,它包括很多选项,例如可以通过添加“ -no-opengl”等,如果想要进一步了解可以通过键入 ./configure --help 来获得更多的帮助信息。编译完成后需要将生成的/bin/uic 复制到$QTEDIR 下新创建的目录bin 中,因为在随后编译


Qt/Embedded 的时候会用到这个工具。


 


   编译的时候,源码是有错误的,修改方法如下:


   错误信息:


xml/qxml.h:214: 警告:class QXmlReader 有虚函数却没有虚析构函数
xml/qxml.h:402:
警告:
class QXmlContentHandler 有虚函数却没有虚析构函数
xml/qxml.h:419:
警告:
class QXmlErrorHandler 有虚函数却没有虚析构函数
xml/qxml.h:428:
警告:
class QXmlDTDHandler 有虚函数却没有虚析构函数
xml/qxml.h:436:
警告:
class QXmlEntityResolver 有虚函数却没有虚析构函数
xml/qxml.h:443:
警告:
class QXmlLexicalHandler 有虚函数却没有虚析构函数
xml/qxml.h:456:
警告:
class QXmlDeclHandler 有虚函数却没有虚析构函数
xml/qxml.cpp:1518:
警告:未使用的参数
ret
/qt/qtx11/include/qvaluestack.h: In member function
T QValueStack<T>::pop() [with T = QMap<QString, QString>]:
xml/qxml.cpp:513: instantiated from here
/qt/qtx11/include/qvaluestack.h:57:
错误:不能从 QValueListIterator<QMap<QString, QString> > 转换到 const char*,为实参 1(属于 int remove(const char*))
/qt/qtx11/include/qvaluestack.h: In member function
T QValueStack<T>::pop() [with T = QString]:
xml/qxml.cpp:2502: instantiated from here
/qt/qtx11/include/qvaluestack.h:57:
错误:不能从 QValueListIterator<QString> 转换到 const char*,为实参 1(属于 int remove(const char*))
make[2]: *** [xml/qxml.o]
错误 1
make[2]: Leaving directory `/qt/qtx11/src'
make[1]: *** [sub-src]
错误 2
make[1]: Leaving directory `/qt/qtx11'
make: *** [init]
错误 2



成功编译的方法:


更改qt-2.3.2文件夹中src/tools/qvaluestack.h57行源代码:


remove (this->formLast() );


为:


this->remove (this->formLast() );



configure
时要使用以下语句:


./configure -debug -no-opengl -no-xft


 


2.编译Tmake工具QVFB,这是虚拟framebuffer的工具,在PC上方便调试


export TMAKEPATH=$TMAKEDIR/lib/linux-g++


export QTDIR=$QT2DIR


export PATH=$QTDIR/bin:$PATH


export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH


cd $QTEDIR/tools/qvfb


/ Qt/tmake-1.13/bin/tmake -o Makefile qvfb.pro  //利用tmake生成qvfbmakefile


(上面指令不对可改用:/ Qt/tmake-1.13/bin/tmake qvfb.pro > makefile


make


mv qvfb $QTEDIR/bin/         //QtE中的qvfb执行程序替换成新编译出来的


 


另外:PC上启动FrameBuffer方法是修改:/etc/grub.conf。在kernel那句话后面加上


      Vga=784   //640*480*16


      重启生效


 


3. 最后编译我们的 Qt/EmbeddedQtE


    cd $QTEDIR


export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++


export QTDIR=$QTEDIR


export PATH=$QTDIR/bin:$PATH


export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 


./configure -no-xft -qvfb -depths 4,8,16,32


yes


5


make


 


在配置./configure -qvfb 用来支持Virtual framebuffer-depths 4,8,16,32 支持4 位,8


位,16 位,32 位的显示深度,此外还可以添加如-syestem-jpeg -gif 来提供对jpeg gif


的支持。配置系统同时还支持对特定平台系统选项的添加,但一般来讲,凡是支持


framebuffer Linux 系统都可以使用“linux-generic-g++”平台。


 


编译过程出现错误:

   
错误一:

    error: ‘QWSInputMethod’ has not been declared

   
修正方法:

     cd $QTDIR/src/kernel //$DTDIR=/home/opiehome/qt-2.3.10

     gedit qwindowsystem_qws.h

    
在前面增加以下两行

     class QWSInputMethod;

     class QWSGestureMethod;


    
错误二:
     qvaluestack.h:57:
错误:不能从 ‘QValueListIterator<QString>’ 转换到 ‘const char*’       


为实参 ‘1’(属于 ‘int remove(const char*)’)

    
修正方法:

     gedit $QTDIR/include/qvaluestack.h &

    
remove( this->fromLast() );改为this->remove( this->fromLast() );


 


 


4. 查看是否成功


     export QTDIR=$QTEDIR


export PATH=$QTEDIR/bin:$PATH          //QtE的工具导入环境


export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH


//链接QTE的库到环境中


cd $QTEDIR/examples/launcher


qvfb -width 640 -height 480 –depth 16 &


./launcher –qws


 


注意:这里后面的-depth 16必须加上,因为我的vga设置的是16位,要匹配,默认是32位,可能会打印不能达到32位的深度!


成功则如下:


     c978f2aa-c6d2-49fe-8795-48ecc6224245.JPG<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


到此,QTEPC上的移植成功了!


二.             交叉编译QTE,到OMAP35xEVM


 


1.非常关键,导出自己的交叉编译工具链:


 PATH=/opt/omapevm/toolchain/arm-2007q3/bin:$PATH


    测试是否成功,直接在bash上输入工具,看看能不能Tab到。


 


 更重要的是,Tmake编译QTE的时候,默认查找的是当前环境下的arm-linux-g++,我的编译工具名字不是这个,那么我们要做的就是在/opt/omapevm/toolchain/arm-2007q3/bin下新建链接:


 


 ln –s arm-none-linux-gnueabi-gcc amr-linux-gcc


 ln –s arm-none-linux-gnueabi-g++ amr-linux-g++


 …………..                       //最好全部做个链接,保证不会出错


 


2)交叉编译 Qt/Embedded


 


    cd $QTEDIR


export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++  //这个变了


export QTDIR=$QTEDIR


export PATH=$QTDIR/bin:$PATH


export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH


./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32 //这个变了


Make


 


编译出错如果和前面一样,解决方法相同。


另外我遇到了新的错误如下:


error:


kernel/qpixmapcache.cpp:125:57: 错误:asm/page.h:没有那个文件或目录


In file included from kernel/qgfx_qws.h:39,


                 from kernel/qpixmapcache.cpp:112:


kernel/qimage.h: In member function ‘int QImageTextKeyLang::operator<(const QImageTextKeyLang&) const’:


kernel/qimage.h:58: 警告:建议在 || 的操作数中出现的 && 前后加上括号


kernel/qpixmapcache.cpp: In constructor ‘QSharedMemoryManager::QSharedMemoryManager()’:


kernel/qpixmapcache.cpp:539: 错误:‘PAGE_SIZE’在此作用域中尚未声明


kernel/qpixmapcache.cpp:539: 错误:‘PAGE_MASK’在此作用域中尚未声明


kernel/qpixmapcache.cpp: In member function ‘void QSharedMemoryManager::internal_free(QSMemPtr)’:


kernel/qpixmapcache.cpp:773: 错误:‘PAGE_SIZE’在此作用域中尚未声明


kernel/qpixmapcache.cpp:773: 错误:‘PAGE_MASK’在此作用域中尚未声明


make[2]: *** [kernel/qpixmapcache.o] 错误 1


make[2]: Leaving directory `/root/2410clQt/qt-2.3.10/src'


make[1]: *** [sub-src] 错误 2


make[1]: Leaving directory `/root/2410clQt/qt-2.3.10'


make: *** [init] 错误 2


 


 


解决方法是:


/usr/include/asm/下的 page.h中关于PAGE_SIZEPAGE_MASK的定义直接复制到kernel/qpixmapcache.cpp中。 我自己的方法,别人的方法是替换一个page.h


 


这个编译,还不能完全编译,编译到后面会出现不能编译类的的错误,这是因为$TMAKEDIR/lib/qws/linux-arm-g++/ 下有个tmake.conf里面有两个配置的是arm-linux-gcc


这里其实应该改为arm-linux-g++,不过编译不过去的是里面的example,我们需要的库文件已经编译好了。所以可以无视它了!


 


  我们会在$QTEDIR/lib/目录下面看到


libqte.so


libqte.so.2


libqte.so.2.3


libqte.so.2.3.10


  这些就是QTE的库文件。


 


2omapQtE的依赖建立


     如果相应的库你已经有了,就不必再搞了。


1.    libstdc++的支持


这个工具不需要我们去交叉编译,交叉编译工具里面已经自带了编译好的这个,我们在toolchain/arm-2007q3/下面的lib中找到这些文件复制出来就好。


libstdc++.so


libstdc++.so.6


libstdc++.so.6.0.1


 


 


2.    字体的支持


这个在qt2.3.10/lib/fonts下面,把整个文件夹复制出来。


fonts


 


3.    e2fsprogs-libs-1.37的支持


这个交叉编译很简单,这里不赘述。主要是完成对ext2的支持


libuuid.so


libuuid.so.1


libuuid.so.1.2


4.    jpeg-6b jpeg  的支持


同上


libjpeg.so


libjpeg.so.62


libjpeg.so.62.0.0


 


5.    tslib的支持


这个,我在另外一片博文章说过。它还有相关的配置文件和bin文件,另外参考


libts-0.0.so.0


libts-0.0.so.0.1.0


libts.la


libts.so


 


3)测试我们的成果


 


    1.新建一个文件夹。


我用的sd卡,在sd卡上新建:


#mkdir qte


#mkdir qte/lib


 


2.把上面蓝色的库文件和字体复制到qte/lib


注意:这里sd卡必须是linux的文件系统比如ext2/3fat的话链接文件会丢失!!


 


3.交叉编译example里面的hello工程


  首先修改tmakeconf,前面提到这里默认是gcc,我们应该用g++


 


vi $ TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf


将其中“TMAKE_LINK= arm-linux-gcc


TMAKE_LINK_SHLIB= arm-linux-gcc


修改为:“TMAKE_LINK= arm-linux-g++


TMAKE_LINK_SHLIB= arm-linux-g++


 


导出环境变量:


PATH = 交叉编译工具路径/bin:$PATH


export  $TMAKEDIR=../tmake1.3    //根据自己的


export TMAKEPATH="/tmake" 的安装路径(如$TMAKEDIR/lib/qws/linux-arm-g++


export QTDIR=……/qt-2.3.10


$TMAKEDIR/bin/tmake –o makefile progressbar.pro


Make


 


把编译好的文件夹hello复制到SD卡的 /qte 路径下。


 


4.板子的运行


SD卡插到板子上,并挂载:


Mount /dev/mmcblockp1 /mnt


Cd /mnt


 


导出QTE执行的环境


 


export QTDIR="/usr/qte"                              //qt的路径


export QTEDIR="/usr/qte"


export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH


///mnt/qte/lib挂到bash的环境中,这样可以自动找到QTE的共享库


export QWS_SIZE=480x640                          //fb的大小


export QWS_MOUSE_PROTO="TPanel:/dev/input/event1" //触摸屏驱动


 


cd /mnt/qte/hello


./hello –qws                                        //运行


 


成功则如下:



 d12eeb89-160b-41cf-899d-9babdbbcd2e4.JPG

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户555171 2009-11-9 15:48

很好的教程啊,好好学习学习!

akingqin_731290802 2009-10-27 14:18

不错,QQ178200205 提供davicom系列产品:DM9161AEP DM9000EP DM9000AEP...
相关推荐阅读
用户539229 2010-01-23 22:52
vmware下debian5的安装配置以及vmtools的安装使用
一.安装vmware6.5.21.下载vmware6.5.2http://4.scdx3.crsky.com/software/vmware_652.rar2.下载vmware6.5.2汉化包http...
用户539229 2009-12-29 12:57
最新诺基亚Qt4.6的上下位机移植手记,触摸屏支持
一.PC for Winxp下的开发环境的搭建诺基亚收购Qt以后,开发了自己的集成开发环境Qt Creater。这是一个非常强大的工具,上手也很快。登陆:http://qt.nokia.com/dow...
用户539229 2009-12-11 20:14
Omap3evm下android开发第一例hello下位机运行实践
1.       驱动的安装<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 1.1...
用户539229 2009-12-09 19:01
android的windows下开发环境的搭建与hello第一例
Android的SDK的官方网址如下官方网址:http://androidappdocs.appspot.com/sdk/index.html<?xml:namespace prefix = o...
用户539229 2009-11-28 13:21
Omap3下Goole的Android操作系统的实现 相当于山寨智能机啦
首先要有一个:OMAP3EVM平台的开发板 我用的是OMAP35x的TI的评估板还要有一个SD卡 TI花了很大的功夫打造了OMAP3智能手机开发平台,给用户提供了SDK包,GDK包,以及双核的Davi...
用户539229 2009-11-08 19:50
OMAP35x下OneNand的分析以及x-loader的介绍
OMAP35x下OneNand的分析以及x-loader的介绍<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:...
EE直播间
更多
我要评论
2
9
关闭 站长推荐上一条 /3 下一条