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

草木瓜

20060930

一、前言
    
    
    这是最后的内容,然而却有很大的遗憾,如果运行OPIE,但E680原有系统依然
会接受的键盘和触摸屏的事件,这种情况下几乎不能正常使用OPIE,必须telnet进
手机kill掉windowserver,这实在是无聊的很。
    这个问题早在去年已经被一位外国友人解决。不过相关源码贴子的链结皆已失效,
不能尽快的找出解决方法,但在网上可以搜索到完美编译后的OPIE下载。
    如有那位前辈知道解决方法,一定请赐教,不甚感激。
   
    我之所以还要把带有遗憾的方法写出来,那是因为这些内容覆盖面相当多了,
层次也很高了。
    以后找出解决方法,有了这些知识基础,就随心所欲了。

二、重要提示

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

三、编译OPIE

1.http://marcus.bluetroll.se/e680/opie-cvs.tar.gz 下载 opie-cvs.tar.gz
   
    注意:其实编译过程可以看opie-cvs.tar.gz里的README。我们这里同样使用了Leprechaun
的方法。

2.在ftp://ftp.trolltech.com/qt/source/qt-embedded-2.3.10-free.tar.gz
此OPIE版本指定需要使用qt 2.3.10版本。

3.同样为了便于管理,统一在 /home/gcc/toolchain 下解压缩OPIE和QT。
   
    4.设置环境变量
   
    export TOOLCHAIN_DIR=/home/gcc/toolchain
    export PATH=$PATH:$TOOLCHAIN_DIR/arm-linux/gcc-3.3.2-glibc-2.3.2/bin
    export QTDIR=$TOOLCHAIN_DIR/qt-2.3.10
    export OPIEDIR=$TOOLCHAIN_DIR/opie
    export LFLAGS_EXTRA=" -Wl,-rpath-link,$TOOLCHAIN_DIR/arm-linux/gcc-3.3.2-glibc-2.3.2/arm-linux/lib "
   
    5.执行如下脚本,这是编译QTE所做的准备工作,这里需要下载uic-qt2这个文
件,上篇文章已经说明
   
    mkdir -p $QTDIR/bin
    cp uic-qt2 $QTDIR/bin/uic       
    chmod u+x $QTDIR/bin/uic                 #root用户这个就没有必要了
    ln -s $OPIEDIR/qt/qconfig*.h $QTDIR/src/tools/  #README里已说明,使用OPIE选项进行编译
    cd $QTDIR
    patch -p1 < $OPIEDIR/qt/qt-2.3.10.patch/qte-2.3.10-all.patch  #qt的OPIE补丁
   
    6.编译QTE
   
    cd $QTDIR
    ./configure -qconfig qpe -depths 16,32 -xplatform linux-arm-g++
    -thread -no-qvfb -system-jpeg -gif -system-zlib -no-xft
    make
   
    7.编译OPIE
   
    cd $OPIEDIR
    make menuconfig
    cp opie-config $OPIEDIR/.config 
    make
   
    注意:这个opie-config是Leprechaun提供的config文件,用户也可以直接在
    menuconfig自行设置,其实包含需要编译的OPIE功能。本资源贴提供了下载。
   
    8.至此OPIE已经编译成功。如果要在手机上运行,我们这里需要对他进行一些
精简,去除一些无关紧要的东西。

#!/bin/bash
    export REALOPIE=/home/gcc/moto
    mkdir -p $REALOPIE/i18n
    cp -a $OPIEDIR/bin $OPIEDIR/apps $OPIEDIR/lib $OPIEDIR/pics $OPIEDIR/sounds $OPIEDIR/plugins $OPIEDIR/pics-hires $REALOPIE
    cp -a $OPIEDIR/i18n/en $REALOPIE/i18n/
    cp -a $QTDIR/lib/* $REALOPIE/lib/
    find $REALOPIE -type d -name CVS | xargs rm -rf
   
    我们把精简的路径设为/home/gcc/moto,复制完全后,这个就是我们需要放
在手机上的文件夹。

四、手机上运行OPIE

这里有三种方法。我们将做一一介绍。
   
    ★方法一★:将/home/gcc/moto这个文件,直接复制到E680上。
   
    这里需要注意的严重问题。文件夹的lib文件有很多是采用Linux的ln,即软连接,
如:libso -> libso.1.1 libso.1 -> libso.1.1,libso与libso.1皆是软连接。只有
libso.1.1是真实的库文件。这在Linux下是十分普遍的。在我们SD卡上是不能够建立
的。因为我们SD卡默认是采用FAT格式分区。
    我们进行冗余法,即有一个软连接,我就复制一个真实的lib文件。
   
    这里自已写了个脚本完成这个操作。
   
  #!/bin/bash
  vFileInput=liwei
  
  rm -f $vFileInput
  echo "Begin Find Links..."
  sleep 0.5s
  find /home/gcc/moto -type l | xargs ls -l | tee  $vFileInput
  echo "End Find Links."
  
  echo "Begin Copy Libs..."
  sleep 0.5s
  
  rm -f copyso.log
  
  i=0
  vFileLen=`wc -l < $vFileInput`
  vFileLen=`expr $vFileLen + 1`
  
  while test $i -lt $vFileLen
  do
   vFileLine=`tail +$i $vFileInput | head -1`
  
   vDir=${vFileLine%>*}
   vDir=${vDir%-*}
   vDir=${vDir%/*}
   vDir=${vDir##* }
  
   vBase=${vFileLine##* }
  
   vLink=${vFileLine%>*}
   vLink=${vLink%-*}
   vLink=${vLink% *}
   vLink=${vLink##* }
  
   echo rm -f $vLink
   rm -f $vLink
   echo cp $vDir/$vBase $vLink  
   eval 'cp $vDir/$vBase $vLink'
   echo $i " Files Dealed."
  
   i=`expr $i + 1`
  done
  
  echo "End Copy Libs."
  echo "Done."
   
    注意:find /home/gcc/moto -type l | xargs ls -l | tee  $vFileInput
    显然是指定这里的/home/gcc/moto路径,可按自已需要更改。此外这个脚本
    还有个bug,就是如果/home/moto/gcc下不存在软连接,则会出错。有兴趣的
    可以去完善一下。
   
    复制完所有软连接,将这个文件夹复制到手机SD上。如:/mmc/mmca1/moto
   
    #!/bin/bash
    export QTDIR=/mmc/mmca1/moto
    export LD_LIBRARY_PATH=/lib:/usr/lib:/mmc/mmca1/moto/lib
    export EZX_RES_FONT_PATH=/mmc/mmca1/moto/lib/fonts
    export PATH=$PATH:/mmc/mmca1/moto/bin
    export HOME=/mmc/mmca1/moto
    /mmc/mmca1/moto/bin/qpe -qws
   
    即可运行OPIE系统,这里OPIE和系统会在触摸屏上会有冲突,国外早已有人
解决了这个问题,遗憾的相关链结全部失效,到现在也没有解决这个问题。这里
暂时只能ps -ef ,把windowserv的进程杀掉才可以完美的运行OPIE。

★方法二★:将OPIE制作成cramfs文件格式包,并把SD卡分出一个分区,用
于装载cramfs文件包,并在E680上mount上去。这就成功避开了软连接的问题。

这个方法单就运行OPIE,意思不大,且十分复杂,但涉及内容很多,不冲方
法冲知识,所以这里详细说明一下。
   
    1.首先需要对SD卡进行分区。当然SD卡内容会全部丢失,及时做好备份。
   
    将SD卡弹出,用USB读卡器连到Linux机器上。我这里使用的是虚拟机VMware5.0,
需要在菜单vm->Removeable Devices->USB Devices->Micro USB Device。这
时虚拟机会自动加载USB设备到Linux下。

此时在Linux fdisk -l 可以查看的两段信息,一是硬盘分区信息,另一个就
是USB设备了。

Disk /dev/sda: 8053 MB, 8053063680 bytes
  255 heads, 63 sectors/track, 979 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  
     Device Boot    Start       End    Blocks   Id  System
  /dev/sda1   *         1       892   7164958+  83  Linux
  /dev/sda2           893       974    658665   82  Linux swap
  
  Disk /dev/sdb: 1015 MB, 1015808000 bytes
  32 heads, 61 sectors/track, 1016 cylinders
  Units = cylinders of 1952 * 512 = 999424 bytes
  
     Device Boot    Start       End    Blocks   Id  System
  /dev/sdb1             1       950    927169+   6  FAT16
  /dev/sdb2           951      1016     64416   83  Linux

[注意:]

如果此时看不到类似以上内容,可执行以下语句:
   
    # /sbin/lsmod
   
    查看内容是否包括 usbcore、usb-ohci(或usb-uhci)、scsi_mod等。如找
    不着,可按下面shell语句,循环安装驱动。当然,你也可以用/sbin/insmod
    一一安装。
   
    cd /lib/modules/2.4.20-8/kernel/drivers/usb
    for v in *.o storage/*.o ; do /sbin/insmod $v ; done
   
    驱动安装完毕后,# /sbin/lsmod 查看内容是否安装成功,重新插拔USB设备
    直到fdisk -l 发现设备。

上面查看到USB设备,已经是分好区的。分了两个主分区 /dev/sdb1,/dev/sdb2
这样,/dev/sdb1会自动被Windows和E680识别,/dev/sdb2在E680上可以手工挂载上
去。
    具体如何使用fdisk分区,可以查看相关帮助,或网上搜索一下。
    fdisk /dev/sdb 对SD卡进行分区,最后强调一下,必须都是主分区,第一个分
区是FAT格式,第二个是Linux格式。分完w保存信息,mkfs.msdos /dev/sdb1进行格
式化。/dev/sdb2用作cramfs文件,比OPIE总体大小大一点就可以了,一般40M左右。

2.分好区后,就需要制作cramfs文件了。
   
    我们输入 mkcramfs /home/gcc/moto /home/gcc/moto.cramfs
    会发生错误,如下:
    Exceeded MAXENTRIES. Raise this value in mkcramfs.c and recompile. Exiting.
   
    麻烦又来了,系统自带的mkcramfs命令支持的文件数量是有限的。我们必须去
找mkcramfs的源代码,更改下参数,然后重新编译一下。本资源贴提供了此源代码的下载。

编译后使用可执行文件:/home/gcc/moto/mkcramfs /home/gcc/moto /home/gcc/moto.cramfs
   
    生成cramfs包。成功显示如下:
   
    Directory data: 89156 bytes
    Everything: 21572 kilobytes
    Super block: 76 bytes
    CRC: eb6895a4

3.将cramfs包装载到SD卡的第二个分区。
   
    dd if=moto.cramfs of=/dev/sdb2
   
    这个过程比较慢,且不需要mount /dev/sdb2,只要fdisk -l能查看的/dev/sdb2的
信息即可。成功会显示如下:

43144+0 records in
    43144+0 records out
   
    4.再点下菜单vm->Removeable Devices->USB Devices->Micro USB Device 把勾去掉
    USB设备又回到了Windows下。移除USB读卡器,把SD卡,插入E680。
   
    在telnet下,输入mount命令:
   
    rootfs on / type rootfs (rw)
  /dev/root on / type cramfs (rw)
  none on /ram type ramfs (rw)
  proc on /ram/proc type proc (rw)
  /dev/tffsa on /usr/language type cramfs (rw)
  /dev/roflash2 on /usr/setup type cramfs (rw)
  none on /dev/pts type devpts (rw)
  /dev/mtdblock2 on /ezxlocal type vfm (rw,noatime)
  /dev/tffsb1 on /diska type vfat (rw,noatime)
  /dev/mmca1 on /mmc/mmca1 type vfat (rw,noatime)
   
    可以看出E680系统自动mount了我们第一个主分区,第二个主分区需要我们手工
mount。

输入以下命令:
    # ls -l /dev/mmca1
    brw-rw----    1 root     root     243,   1 Oct  2 07:09 /dev/mmca1

我们需要在E680上再建立个块文件。只有/ezxlocal下才允许我们建立。
    在/ezxlocal下创建block文件。因为mmca1是243 1,所以我们使用如下参数:
    mknod /ezxlocal/mmca2 b 243 2
   
    在/ezxlocal下创建目录。如opie。 mkdir /ezxlocal/opie。这个目录用于我们
挂载建立的block文件。输入命令:
    mount -t cramfs /ezxlocal/mmca2 /ezxlocal/opie
   
    就会发现opie里的就是我们在Linux下那个/home/gcc/moto的文件内容了。至此
我们就成功的把cramfs文件做为一个分区挂载到E680上。

5.运行OPIE
   
    export QTDIR=/ezxlocal/opie
    export OPIEDIR=$QTDIR
    export LD_LIBRARY_PATH=/lib:/usr/lib:$QTDIR/lib
    ./clock -qws
   
    即可看到个全屏时钟,./qpe -qws即可运行OPIE操作系统,不过这个依然会存在
与WindowsServer的触摸屏冲突,解决方法同上。

★方法三★:通过loop,挂载moto.cramfs。下载本资源贴loop.o文件,将
    moto.cramfs和loop.o复制到SD卡上,如/mmc/mmca1下。
   
    # mkdir liwei
    # insmod loop.o
    # mount moto.cramfs liwei -t cramfs -o loop
   
    /mmc/mmca1/liwei下就可以看到moto.cramfs里的内容了,十分简单。再运行OPIE
就跟方法二一样了。

五、写在最后

这三种方法都有个通病:不能解决OPIE与E680的触摸屏,按键的冲突问题。大家
可以去网上搜索相关完美解决方法。也有提供完美的OPIE安装文件。我目前手机上
就是用的一位外国人编译的,运行时可以屏蔽按键,触摸屏,可以自由与手机系统进行
切换。
    如果找到了解决方法,一定详细公布与众。

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

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

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

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

    一.前言         虽然是E680系列的开发环境,其实就是嵌入式方面的知识.在上文详细了解了 E680g系统结构,图形化发展历程,到这篇文章就要实实在在去做了.     最早移植成功的是一位外国 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. python知道答案_Python程序设计基础知道章节测试答案
  2. 计算机键盘是编码键盘还是非编码键盘,矩阵按键原理图_矩阵按键扫描实例
  3. 教你从0到1搭建秒杀系统-防超卖
  4. iextensionunit类_Java ICompilationUnit.reconcile方法代码示例
  5. Seafile - 最好的 Dropbox 开源替代,面向团队而设计
  6. ubuntu16.04下编译安装OpenCV
  7. 【渝粤题库】国家开放大学2021春1439临床药理学题目
  8. 通用职责分配软件原则之6-多态原则
  9. Java实训项目3:GUI学生信息管理系统 - 涉及知识点
  10. 【180929】仿微信飞机大战游戏源码
  11. 社区分享|Arm 中国生态技术市场经理教你玩转 TFLite Micro 端云一体解决方案
  12. mysql 查询部门中男女人数,工资最高,等
  13. 微信小程序实践——实验2天气查询小程序
  14. python操作word生成目录_Python操作Word批量生成文章
  15. 三种网线的RJ-45接头制作法图解(转)
  16. IO流原理及流的分类
  17. 我的世界租赁服务器重置,《我的世界》租赁服自动砍树命令教程 命令方块介绍...
  18. 【网络协议】转载:关于TCP与UDP的接收recv和recvfrom
  19. JDK1.8之前造成HashMap死链问题
  20. MATLAB下载html页面

热门文章

  1. cisco3560交换机cpu过高怎么处理
  2. 如何录制大黄蜂课堂播放的教学视频
  3. COMTRADE录波数据导入MATLAB分析的方法
  4. dpvs中fdir与sa_pool介绍
  5. C语言typedef与结构体
  6. C6000 EDMA 使用心得总结
  7. 2022-2027年中国大件运输行业发展前景及投资战略咨询报告
  8. HTML标签重点总结+案例
  9. python的fopen函数_C语言fopen函数的用法,C语言打开文件详解
  10. “ISO9001国际质量管理体系”介绍