一、前言
   
    虽然是E680系列的开发环境,其实就是嵌入式方面的知识。在上文详细了解了
E680g系统结构,图形化发展历程,到这篇文章就要实实在在去做了。
    最早移植成功的是一位外国人,我也是通过阅读他的文章了解到OPIE的移植过
程,不过他写的文章比较简练,接受起来比较困难。下面是英文原文:
    http://marcus.bluetroll.se/e680/

二、重要提示

为了方便更好的理解本文,提供下面链结。
    E680应用开发全系列的文章地址:http://blog.csdn.net/liwei_cmg
    文章相关的重要资源的下载地址:http://play.younet.com/view.php?tid=18578

三、移植OPIE操作系统的思路
   
    我们前面提到OPIE基于标准的Qte/Qtopia,Motorola的E680系列也是基于Qte的,
但这两者会有所不同,具体什么不同我们也很难得知。Motorola目前仅开放了E680
系列的Linux内核代码,而Qte和上层的ezx图形框架却没有公开发布。这一点着实让
人非常之不爽。所以我们在移植OPIE时,需要编译一下标准Qte的Lib库,然后使用
这个Lib库,再交叉编译OPIE。
    移植OPIE操作系统本身可能意义并不大,但借此可以深入操作系统内部去完成
Linux Kernel + Qte + OPIE 的整体认识,要知道这些是全部开放源码的。
    在《深度剖析E680G开发一.所谓的交叉编译环境》中所介绍的开发图形化程序
的方法,是使用的A760系列的SDK,其实就是把A760的头文件复制过来,再加上E680
本身的Lib文件拼凑而成。(本文的资源文件中提供了这个SDK的英文文档)。这固然
也是目前为止比较好的另一种开发方法。

四、构造交叉编译环境

在前面已提供了很简便的交叉编译环境构造方法,为了更好的进一步理解交叉
编译环境的构造方法,我们结合标准的crosstool再次构建编译环境。

1.下载crosstool(搭建交叉编译环境的工具)。如下网址是两个不同版本,其实
用哪个都是差不多的,细节内容可以访问http://kegel.com/crosstool/。这篇使用
的是crosstool-0.28-rc37.tar.gz。root
    http://kegel.com/crosstool/crosstool-0.42.tar.gz
    http://kegel.com/crosstool/crosstool-0.28-rc37.tar.gz
  
    2.在Linux下或者虚拟机Linux下解压缩,为了方便目录管理,我们使用/home
/gcc/toolchain目录,解压缩crosstool-0.28-rc37.tar.gz。
    tar zxvf crosstool-0.28-rc37.tar.gz。
   
    3.在crosstool-0.28-rc37文件夹下主要有以下几类文件:
   
     arm.dat
     arm-iwmmxt.dat
     i686.dat
     ...
   
     arm.config
     i686.config
     ...
    
     打开一看,显然是指定运行环境的指令集和一些配置参数。对E680系列只需要
     使用ARM相关的,其他的无视。
    
    
     gcc-3.4.0-glibc-2.1.3.dat
     gcc-3.4.0-glibc-2.2.5.dat
     ...
    
     这一类自然是编译GCC的版本参数,查看内容可知,其限定了binutils,gcc,
     glibc和linux kernel的版本。这些内容含义在《E680G开发一》已做了说明。
    
     注意:我在使用ezx-cross工具进行交叉编译时,出现了一些错误,是关于glic
     的,不过并未影响使用。我在RedHat中gcc的版本是3.3.2,ezx交叉编译限定
     的是gcc-3.3.6,我怀疑与这个版本有关,具体原因还不能证实。后来用
     crosstool-0.28-rc37编译,使用了gcc-3.3.2,编译通过且没有发现任何问题。
    
     demo-arm.sh
     demo-arm-iwmmxt.sh
     demo-i686.sh
     ...
    
     这些则是编译交叉编译环境的脚本了。
    
    4.下载本文章相关的资源文件toolchain.rar,解压缩将对应内容复制到
    crosstool-0.28-rc37文件夹下。里面只有三个文件:
   
    gcc-3.3.2-glibc-2.3.2.dat
    arm.dat
    arm.sh
   
    gcc-3.3.2-glibc-2.3.2.dat文件把限定的Linux内核版本从原来的linux-2.6.8
    修改为linux-2.4.20,推测之所以进行这个修改是因为原来的版本组合存在兼
    容性问题,crosstool-0.42中这个文件gcc-3.3.2-glibc-2.3.2.dat,已经修正。
   
    arm.dat整合了编译ARM的相关参数。
    arm.sh是执行编译的脚本。
   
    5.下载本文章相关的资源文件gcc-3.3.2-arm-softfloat.patch.rar,这是一个
    浮点运算的补丁。将解压缩的gcc-3.3.2-arm-softfloat.patch复制到
    crosstool-0.28-rc37/patches/gcc-3.3.2下。再把crosstool-0.28-rc37/patches/gcc-3.3.2/
    下gcc-3.3.2-arm-bigendian.patch 移动到crosstool-0.28-rc37/patches/gcc-3.3.2/feature/下。
   
    6.根据gcc-3.3.2-glibc-2.3.2.dat相关内容下载,下载地址同《E680G开发一》
    所述。并在crosstool-0.28-rc37下创建目录downloads,将这些文件移过去。
 
    binutils-2.15.tar.bz2                                              
    gcc-3.3.2.tar.bz2                
    glibc-2.3.2.tar.bz2               
    glibc-linuxthreads-2.3.2.tar.bz2  
    linux-2.4.20.tar.bz2
   
    7.设置环境变量export TOOLCHAIN_DIR=/home/gcc/toolchain
    修改arm.sh中TARBALLS_DIR=$TOOLCHAIN_DIR/crosstool-0.28-rc37/downloads
    修改arm.sh中RESULT_TOP=$TOOLCHAIN_DIR
   
    这两个一是指定编译使用相关包的位置,另外则是指定编译后的路径。完成这些后,
    运行arm.sh即可以构造交叉编译环境了。
   
    8.完成加入PATH环境变量,即可测试编译环境了。
    export PATH=$PATH:$TOOLCHAIN_DIR/arm-linux/gcc-3.3.2-glibc-2.3.2/bin
   
   
五、编译QTE

1.在本文资源贴中下载e680-qt.rar,把解开的.h头文件和lib文件复制到
    $TOOLCHAIN_DIR/arm-linux/gcc-3.3.2-glibc-2.3.2下的对应目录。这头文件
    其实就是Linux PC机自带的头文件,而lib文件就是E680上的库文件。
   
    2.在ftp://ftp.trolltech.com/qt/source/qt-embedded-2.3.10-free.tar.gz
下载QTE。关于这些路径,不行可以在Google搜索一下,不过国内的网站提供下载的
不多。其实对于qt编译的相关配置,自带的英文文档还是比较详细的。

3.在/home/gcc/toolchain下解压缩并设置环境变量
    export QTDIR=$TOOLCHAIN_DIR/qt-2.3.10
   
   
    4.在qt-2.3.10/configs目录下修改linux-arm-g++-shared文件,我们会在下面
的配置中指定使用arm平台。在文件中查找如下内容:
    SYSCONF_LINK  = arm-linux-gcc
    SYSCONF_LINK_SHLIB = arm-linux-gcc
    均改为
    SYSCONF_LINK  = arm-linux-g++
    SYSCONF_LINK_SHLIB = arm-linux-g++
    否则在编译中会出现链接错误,QT程序都是基于C++的,arm-linux-gcc不可能
编译成功!

5.在$QTDIR下运行以下命令,配置编译参数,可以看出平台是arm。
    ./configure -qconfig all -depths 8,16 -xplatform linux-arm-g++ -thread -sm -qvfb -qt-libpng -system-jpeg -gif -qt-zlib -no-xft -keypad-mode
    对相关参数不明白的地方,可以通过./configure -help查看,实在不行,分析
configure本身这个文件,相信你一定受益菲浅。
    运行完这个命令后,相关Makefile文件都会建立好了。
       
    注意:在QTE编译过程中,先会编译moc可执行文件,并会放在$QTDIR/bin下。
    (moc(Meta Object Compiler)是QT工具的工具,该工具是一个C++预处理程序,
    它为高层次的事件处理自动生成所需要的附加代码。)此外还需要uic可执行程序
    用于将Designer设计的界面文件(*.ui)转换成为相应的C++文件(*.cpp和*.h),
    然后让gcc进行编译。这个工具不能却不能顺利编译,原因是QTE编译过程中,也把
    这个文件也用arm-linux-gcc编译了,不能在Linux PC机上运行了。解决方法有两个
    直接复制Linux的uic文件到$QTDIR/bin下,或者手工去$QTDIR/tools/designer/uic
    编译下uic,再复制过去。或者去http://www.vanille.de/tools/uic-qt2下载uic-qt2
    改名并复制到$QTDIR/bin下。
   
    6.在$QTDIR下输入make,执行编译。
   
    7.编译成功后,随便复制个example下的例子,注意别忘了连编译好的库文件一起
复制 $QTDIR/lib,设置好环境变量,即可在E680G上运行。

如:
    #!/bin/bash
    export QTDIR=/usr/lib/ezx
    export LD_LIBRARY_PATH=$QTDIR/lib:`pwd`
    export EZX_RES_FONT_PATH=$QTDIR/lib/fonts
    ./aclock -qws
   
    即可以看到效果。
   
六.写在最后

本文关于QTE编译的方法说得比较简单,要能轻松解决编译产生的问题,必须对Linux
下编译方法有一定的了解,加之一点点耐心去阅读自带文档,并不难。QT本身的教程也是
熟悉学习QT的最好捷径。
    从gcc到cross-tool再到Qte,其实整个过程都是完全开放的,可以任你去深入研究,
主观的能动性是最重要的,文章的作用只是稍微点一下有这么一回事~
    在下文,我们会做最后一步工作,编译OPIE。

深度剖析E680G开发四.移植OPIE操作系统(中)-交叉编译Qte相关推荐

  1. 深度剖析E680G开发三.移植OPIE操作系统(上)

    深度剖析E680G开发三.移植OPIE操作系统(上) 草木瓜 20060918 一.前言         凡事我图写的文章,往往比较内容纵深,范围却很窄,注重实际操作.原因 很简单,水平有限,还达不到 ...

  2. 深度剖析E680G开发五.移植OPIE操作系统(下)-编译和运行OPIE

    深度剖析E680G开发五.移植OPIE操作系统(下)-编译和运行OPIE 草木瓜 20060930 一.前言               这是最后的内容,然而却有很大的遗憾,如果运行OPIE,但E68 ...

  3. 深度剖析E680G开发一.所谓的交叉编译环境

    深度剖析E680G开发一.所谓的交叉编译环境 草木瓜 相关资源下载 http://play.younet.com/view.php?tid=18578 20060906 一.前言 前面文章涵盖的内容对 ...

  4. 深度剖析E680G开发二.交叉编译BusyBox与图形化程序

    深度剖析E680G开发二.交叉编译BusyBox,图形化程序 草木瓜 20060917 一.前言         很多人看到这个剖析系列,觉得难了,其中不乏热衷于刷机的人.刚刚接触 E680g的普通人 ...

  5. 深度剖析E680G应用四.彻底解决LM带来的麻烦

    深度剖析E680G应用四.彻底解决LM带来的麻烦 草木瓜 20060826 相关资源下载 http://play.younet.com/view.php?tid=18578 一.前言 如果你看过以前的 ...

  6. 深度剖析E680G开发二.交叉编译BusyBox,图形化程序

    一.前言         很多人看到这个剖析系列,觉得难了,其中不乏热衷于刷机的人.刚刚接触 E680g的普通人理解起来固然有些困难,然对于一个经常刷来刷去的"高手",就 说不过去 ...

  7. 深度剖析E680G应用三.目录结构

    深度剖析E680G应用三.目录结构 草木瓜 相关资源下载 http://play.younet.com/view.php?tid=18578 一.前言 本文主要介绍E680g系统应用相关的重要文件和目 ...

  8. 深度剖析E680G应用五.Telnet与主题

    一.前言 这两方面的内容比较少,而且网上资料也很多,毕竟E680上市都两三年了, 再怎么写恐怕少不了拾人牙慧.所以这才做一些总结,本来这应该在介绍Loader 之后就详细介绍.相关下载文件,可以访问友 ...

  9. 深度剖析E680G应用一.所谓的Loader

    深度剖析E680G应用一.所谓的Loader 草木瓜 20060818 相关资源下载 http://play.younet.com/view.php?tid=18578 一.写在前面的话 E680G, ...

最新文章

  1. 职责链模式(chain of responsibility)
  2. 3dmax全局材质灯光细分插件_3Dmax渲染Vray渲染提速优化技巧
  3. HDU1272_并查集
  4. 青年歌手大奖赛_评委会打分
  5. 最近有粉丝向我请教Java泛型,于是重温了一下,希望学弟面试顺利
  6. 装修月记第一弹,硬装篇
  7. android 7.1 apk的systemuid [2]
  8. vi 不保存退出_vi / vim编辑器介绍
  9. Spring :事务使用的注意事项
  10. keyshot9怎么导入材质_你知道硬质合金刀片是怎么来的吗?讲解直观!
  11. 开发LED屏幕页面遇到的问题
  12. XP系统下如何把FAT32转换成NTFS格式的?
  13. Sofia-SIP辅助文档六 - Sofia-SIP中的SIP和SDP特性
  14. NFine极速WEB + ORM框架源码
  15. 制作粉色少女系列❤生日快乐祝福网页❤(HTML+CSS+JS)
  16. SSL2812 2017年10月30日提高组T2 凤凰院凶真(dp,LCIS)
  17. Win32反汇编(一) 初步探索Win32反汇编 与 Ollydbg的简单使用
  18. 1's Complement和2's Complement的区别
  19. mac升级编译器gcc方法
  20. VsCode同步配置到另一台设备

热门文章

  1. 笔记:DB2常见状态码
  2. Log4j修复——Vmware Horizon
  3. 考研复试——概率论(2)
  4. [Python-9]GUI编程
  5. opencv两视频合并
  6. 32位全彩色与24位全彩色有啥区别
  7. 2.1.4奈式准则和香农定理
  8. EDMA - DMA QDMA 完美总结
  9. Mysql 安装 000007b_w7电脑蓝屏0x0000007b的解决方法
  10. 冰屏炫酷无比,已成为LED透明显示屏厂家抢占市场的利器。