国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 手機(jī)知識(shí) > 正文

深度剖析E680G開發(fā)五.移植OPIE操作系統(tǒng)(下)-編譯和運(yùn)行OPIE

2024-06-10 11:28:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、前言
    
    
    這是最后的內(nèi)容,然而卻有很大的遺憾,如果運(yùn)行OPIE,但E680原有系統(tǒng)依然
會(huì)接受的鍵盤和觸摸屏的事件,這種情況下幾乎不能正常使用OPIE,必須telnet進(jìn)
手機(jī)kill掉windowserver,這實(shí)在是無(wú)聊的很。
    這個(gè)問(wèn)題早在去年已經(jīng)被一位外國(guó)友人解決。不過(guò)相關(guān)源碼貼子的鏈結(jié)皆已失效,
不能盡快的找出解決方法,但在網(wǎng)上可以搜索到完美編譯后的OPIE下載。
    如有那位前輩知道解決方法,一定請(qǐng)賜教,不甚感激。
   
    我之所以還要把帶有遺憾的方法寫出來(lái),那是因?yàn)檫@些內(nèi)容覆蓋面相當(dāng)多了,
層次也很高了。
    以后找出解決方法,有了這些知識(shí)基礎(chǔ),就隨心所欲了。

二、重要提示

    為了方便更好的理解本文,提供下面鏈結(jié)。
    E680應(yīng)用開發(fā)全系列的文章地址:http://blog.csdn.net/liwei_cmg
    文章相關(guān)的重要資源的下載地址:http://play.younet.com/view.php?tid=18578

三、編譯OPIE

    1.http://marcus.bluetroll.se/e680/opie-cvs.tar.gz 下載 opie-cvs.tar.gz
   
    注意:其實(shí)編譯過(guò)程可以看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.同樣為了便于管理,統(tǒng)一在 /home/gcc/toolchain 下解壓縮OPIE和QT。
   
    4.設(shè)置環(huán)境變量
   
    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.執(zhí)行如下腳本,這是編譯QTE所做的準(zhǔn)備工作,這里需要下載uic-qt2這個(gè)文
件,上篇文章已經(jīng)說(shuō)明
   
    mkdir -p $QTDIR/bin
    cp uic-qt2 $QTDIR/bin/uic       
    chmod u+x $QTDIR/bin/uic                 #root用戶這個(gè)就沒(méi)有必要了
    ln -s $OPIEDIR/qt/qconfig*.h $QTDIR/src/tools/  #README里已說(shuō)明,使用OPIE選項(xiàng)進(jìn)行編譯
    cd $QTDIR
    patch -p1 < $OPIEDIR/qt/qt-2.3.10.patch/qte-2.3.10-all.patch  #qt的OPIE補(bǔ)丁
   
    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
   
    注意:這個(gè)opie-config是Leprechaun提供的config文件,用戶也可以直接在
    menuconfig自行設(shè)置,其實(shí)包含需要編譯的OPIE功能。本資源貼提供了下載。
   
    8.至此OPIE已經(jīng)編譯成功。如果要在手機(jī)上運(yùn)行,我們這里需要對(duì)他進(jìn)行一些
精簡(jiǎn),去除一些無(wú)關(guān)緊要的東西。

    #!/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
   
    我們把精簡(jiǎn)的路徑設(shè)為/home/gcc/moto,復(fù)制完全后,這個(gè)就是我們需要放
在手機(jī)上的文件夾。

四、手機(jī)上運(yùn)行OPIE

    這里有三種方法。我們將做一一介紹。
   
    ★方法一★:將/home/gcc/moto這個(gè)文件,直接復(fù)制到E680上。
   
    這里需要注意的嚴(yán)重問(wèn)題。文件夾的lib文件有很多是采用Linux的ln,即軟連接,
如:libso -> libso.1.1 libso.1 -> libso.1.1,libso與libso.1皆是軟連接。只有
libso.1.1是真實(shí)的庫(kù)文件。這在Linux下是十分普遍的。在我們SD卡上是不能夠建立
的。因?yàn)槲覀僑D卡默認(rèn)是采用FAT格式分區(qū)。
    我們進(jìn)行冗余法,即有一個(gè)軟連接,我就復(fù)制一個(gè)真實(shí)的lib文件。
   
    這里自已寫了個(gè)腳本完成這個(gè)操作。
   
  #!/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路徑,可按自已需要更改。此外這個(gè)腳本
    還有個(gè)bug,就是如果/home/moto/gcc下不存在軟連接,則會(huì)出錯(cuò)。有興趣的
    可以去完善一下。
   
    復(fù)制完所有軟連接,將這個(gè)文件夾復(fù)制到手機(jī)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_F export PATH=$PATH:/mmc/mmca1/moto/bin
    export HOME=/mmc/mmca1/moto
    /mmc/mmca1/moto/bin/qpe -qws
   
    即可運(yùn)行OPIE系統(tǒng),這里OPIE和系統(tǒng)會(huì)在觸摸屏上會(huì)有沖突,國(guó)外早已有人
解決了這個(gè)問(wèn)題,遺憾的相關(guān)鏈結(jié)全部失效,到現(xiàn)在也沒(méi)有解決這個(gè)問(wèn)題。這里
暫時(shí)只能ps -ef ,把windowserv的進(jìn)程殺掉才可以完美的運(yùn)行OPIE。


    ★方法二★:將OPIE制作成cramfs文件格式包,并把SD卡分出一個(gè)分區(qū),用
于裝載cramfs文件包,并在E680上mount上去。這就成功避開了軟連接的問(wèn)題。

    這個(gè)方法單就運(yùn)行OPIE,意思不大,且十分復(fù)雜,但涉及內(nèi)容很多,不沖方
法沖知識(shí),所以這里詳細(xì)說(shuō)明一下。
   
    1.首先需要對(duì)SD卡進(jìn)行分區(qū)。當(dāng)然SD卡內(nèi)容會(huì)全部丟失,及時(shí)做好備份。
   
    將SD卡彈出,用USB讀卡器連到Linux機(jī)器上。我這里使用的是虛擬機(jī)VMware5.0,
需要在菜單vm->Removeable Devices->USB Devices->Micro USB Device。這
時(shí)虛擬機(jī)會(huì)自動(dòng)加載USB設(shè)備到Linux下。

    此時(shí)在Linux fdisk -l 可以查看的兩段信息,一是硬盤分區(qū)信息,另一個(gè)就
是USB設(shè)備了。

  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

    [注意:]

    如果此時(shí)看不到類似以上內(nèi)容,可執(zhí)行以下語(yǔ)句:
   
    # /sbin/lsmod
   
    查看內(nèi)容是否包括 usbcore、usb-ohci(或usb-uhci)、scsi_mod等。如找
    不著,可按下面shell語(yǔ)句,循環(huán)安裝驅(qū)動(dòng)。當(dāng)然,你也可以用/sbin/insmod
    一一安裝。
   
    cd /lib/modules/2.4.20-8/kernel/drivers/usb
    for v in *.o storage/*.o ; do /sbin/insmod $v ; done
   
    驅(qū)動(dòng)安裝完畢后,# /sbin/lsmod 查看內(nèi)容是否安裝成功,重新插拔USB設(shè)備
    直到fdisk -l 發(fā)現(xiàn)設(shè)備。


    上面查看到USB設(shè)備,已經(jīng)是分好區(qū)的。分了兩個(gè)主分區(qū) /dev/sdb1,/dev/sdb2
這樣,/dev/sdb1會(huì)自動(dòng)被Windows和E680識(shí)別,/dev/sdb2在E680上可以手工掛載上
去。
    具體如何使用fdisk分區(qū),可以查看相關(guān)幫助,或網(wǎng)上搜索一下。
    fdisk /dev/sdb 對(duì)SD卡進(jìn)行分區(qū),最后強(qiáng)調(diào)一下,必須都是主分區(qū),第一個(gè)分
區(qū)是FAT格式,第二個(gè)是Linux格式。分完w保存信息,mkfs.msdos /dev/sdb1進(jìn)行格
式化。/dev/sdb2用作cramfs文件,比OPIE總體大小大一點(diǎn)就可以了,一般40M左右。

    2.分好區(qū)后,就需要制作cramfs文件了。
   
    我們輸入 mkcramfs /home/gcc/moto /home/gcc/moto.cramfs
    會(huì)發(fā)生錯(cuò)誤,如下:
    Exceeded MAXENTRIES. Raise this value in mkcramfs.c and recompile. Exiting.
   
    麻煩又來(lái)了,系統(tǒng)自帶的mkcramfs命令支持的文件數(shù)量是有限的。我們必須去
找mkcramfs的源代碼,更改下參數(shù),然后重新編譯一下。本資源貼提供了此源代碼的下載。

    編譯后使用可執(zhí)行文件:/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卡的第二個(gè)分區(qū)。
   
    dd if=moto.cramfs of=/dev/sdb2
   
    這個(gè)過(guò)程比較慢,且不需要mount /dev/sdb2,只要fdisk -l能查看的/dev/sdb2的
信息即可。成功會(huì)顯示如下:

    43144+0 records in
    43144+0 records out
   
    4.再點(diǎn)下菜單vm->Removeable Devices->USB Devices->Micro USB Device 把勾去掉
    USB設(shè)備又回到了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系統(tǒng)自動(dòng)mount了我們第一個(gè)主分區(qū),第二個(gè)主分區(qū)需要我們手工
mount。

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

    我們需要在E680上再建立個(gè)塊文件。只有/ezxlocal下才允許我們建立。
    在/ezxlocal下創(chuàng)建block文件。因?yàn)閙mca1是243 1,所以我們使用如下參數(shù):
    mknod /ezxlocal/mmca2 b 243 2
   
    在/ezxlocal下創(chuàng)建目錄。如opie。 mkdir /ezxlocal/opie。這個(gè)目錄用于我們
掛載建立的block文件。輸入命令:
    mount -t cramfs /ezxlocal/mmca2 /ezxlocal/opie
   
    就會(huì)發(fā)現(xiàn)opie里的就是我們?cè)贚inux下那個(gè)/home/gcc/moto的文件內(nèi)容了。至此
我們就成功的把cramfs文件做為一個(gè)分區(qū)掛載到E680上。

    5.運(yùn)行OPIE
   
    export QTDIR=/ezxlocal/opie
    export OPIEDIR=$QTDIR
    export LD_LIBRARY_PATH=/lib:/usr/lib:$QTDIR/lib
    ./clock -qws
   
    即可看到個(gè)全屏?xí)r鐘,./qpe -qws即可運(yùn)行OPIE操作系統(tǒng),不過(guò)這個(gè)依然會(huì)存在
與WindowsServer的觸摸屏沖突,解決方法同上。


    ★方法三★:通過(guò)loop,掛載moto.cramfs。下載本資源貼loop.o文件,將
    moto.cramfs和loop.o復(fù)制到SD卡上,如/mmc/mmca1下。
   
    # mkdir liwei
    # insmod loop.o
    # mount moto.cramfs liwei -t cramfs -o loop
   
    /mmc/mmca1/liwei下就可以看到moto.cramfs里的內(nèi)容了,十分簡(jiǎn)單。再運(yùn)行OPIE
就跟方法二一樣了。


五、寫在最后

    這三種方法都有個(gè)通病:不能解決OPIE與E680的觸摸屏,按鍵的沖突問(wèn)題。大家
可以去網(wǎng)上搜索相關(guān)完美解決方法。也有提供完美的OPIE安裝文件。我目前手機(jī)上
就是用的一位外國(guó)人編譯的,運(yùn)行時(shí)可以屏蔽按鍵,觸摸屏,可以自由與手機(jī)系統(tǒng)進(jìn)行
切換。
    如果找到了解決方法,一定詳細(xì)公布與眾。
   


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 崇州市| 五台县| 建宁县| 当涂县| 泗阳县| 博野县| 宁晋县| 镇平县| 富民县| 汪清县| 垫江县| 宣化县| 白山市| 宁德市| 寿宁县| 修武县| 金川县| 西安市| 贵德县| 齐河县| 阜城县| 宜兰县| 浏阳市| 酉阳| 遂溪县| 梨树县| 平泉县| 武隆县| 汉源县| 丹寨县| 波密县| 华亭县| 凤山市| 垫江县| 洪泽县| 荃湾区| 西平县| 习水县| 常熟市| 方正县| 方正县|