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

首頁 > 學院 > 手機知識 > 正文

深度剖析E680G開發一.所謂的交叉編譯環境

2024-06-10 11:27:54
字體:
來源:轉載
供稿:網友

一、前言

    前面文章涵蓋的內容對普通人來說應該都比較容易理解和運用,然而這僅僅只能說明你會剛會用罷了,從本文開始,我們需要更深入一步,去探討E680G的操作系統的開發環境,自然內容也變專業了。

    很遺憾目前網上有關的資料都不盡如人意,也許是水平太高了吧,反而寫出來的文章讓人看了一頭霧水。為了能讓更多人能跨過這個門檻,我會用較多的篇幅來介紹相關專業知識。另外最好有真實的linux環境,文中操作皆使用虛擬機RedHatLinux9。

    希望看完這篇文章得出的結論是:搭建E680交叉編譯開發環境并不難!

    相關部分附件下載http://play.younet.com/view.php?tid=18578   

二、交叉編譯理論準備

    我們經常會說平臺,平臺出現的根源要從處理器(CPU)說起,不同的CPU采用不同的指令集。所謂指令集,則是CPU中用來計算和控制計算機系統的一套指令的集合,而每一種新型的CPU在設計時就規定了一系列與其他硬件電路相配合的指令系統。

    E680手機系列采用的是Inter XScale處理器,基于ARM v5TE體系結構,擴展了ARM指令集的核心,本質還是ARM處理器。這和我們平時經常接觸PC機的CPU是不同的,PC機大多采用Inter X86的指令集。

    ARM處理器最大的特點就是:功耗低,應用方案靈活,可以方便為多媒體信號添加指令集等。目前來說幾乎所有的手持操作系統包括智能手機都采用了ARM架構進行設計。

    我們如果要在E680系列所采用的操作系統----MontaVista Linux下開發,就需要一個編譯器能把C程序代碼轉換為兼容ARM指令集的機器語言。這種編譯就稱為交叉編譯。
   
    要深刻理解這個概念,我們再對比一下C,java這兩種語言。

    Java號稱Compile once,run everywhere。即編譯一次到處運行。事實也確實如此,Java編譯生成的是字節代碼,然后由各個平臺的Java虛擬機解釋執行。實際上在E680G上,J2ME的JAR包是由/usr/SYSjava/kvm解釋執行的。

    Java是通過提供各類平臺的虛擬機程序來實現平臺無關性。這樣也很大的犧牲了執行效率。

    C語言則不一樣,主要特點就是接近低層,可根據不同處理器生成高效的機器代碼。適合做復雜的運算和實時的控制。所以針對C語言,會有很多不同平臺的編譯器負責將代碼直接編譯成高效的機器指令。

    說到這里,我們顯然明白了:普通Linux PC機上的GCC編譯器編譯的可執行程序復制到E680上是不能夠被執行的。要在E680平臺上進行開發,需要構造一個能兼容ARM的GCC了,這就是所謂的交叉編譯環境。


三、構造E680交叉編譯環境

    這里我們使用很簡單的一個構造方法。在http://lsb.blogdns.net/ezx-crosstool
下載ezx-crosstool-0.5.tar.bz2文件,這個工具是由個人整理的,去掉了與ARM無關的很多腳本,并且限定了需要編譯的文件版本,使用起來比較簡單。

    本機新建了一個用戶gcc,準備用于編譯,root用戶會提示禁止操作的。
    這里使用的是在/home/gcc目錄下用gcc用戶解壓:
    bunzip2 ezx-crosstool-0.5.tar.bz2
    tar xvf ezx-crosstool-0.5.tar
    系統會自動生成/home/gcc/ezx-crosstool-0.5這個目錄。
  

    在ftp://ftp.gnu.org/pub/gnu下載如下四個文件,且必須是如下版本:
   
    binutils-2.15.tar.bz2              一組開發工具,包括連接器、匯編器
                                       和其他用于目標文件和檔案的工具
    gcc-3.3.6.tar.bz2                  GCC編譯器的源代碼
    glibc-2.3.2.tar.bz2                提供系統調用和基本函數庫
    glibc-linuxthreads-2.3.2.tar.bz2   用于支持POSIX線程的函數庫 
   
    在http://www.kernel.org/pub/linux/kernel/v2.4/下載如下一個文件:
   
    linux-2.4.26.tar.bz2               Linux核心源代碼
   
    全部下載后,放在/home/gcc/ezx-crosstool-0.5/downloads下,打開
/home/gcc/ezx-crosstool-0.5/build.sh文件,內容如下:
   
    #!/bin/sh
    set -ex
    CROSSTOOL_DIR=`pwd`
    TARBALLS_DIR=$CROSSTOOL_DIR/downloads
    RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
    export TARBALLS_DIR RESULT_TOP
    GCC_LANGUAGES="c,c++"
    export GCC_LANGUAGES
    ...
   
    詳細內容以后會解釋,這里只注意RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
這句,這是說明編譯后的路徑,可以自定義修改。
    如:
    RESULT_TOP=/home/gcc/arm
   
    到這里,準備工作就結束了。
    cd /home/gcc/ezx-crosstool-0.5
    ./build.sh
   
    我使用的筆記本(512M+PM1.7G)+虛擬機,大概不到兩個小時。完成后在系統環境
PATH添加新路徑內容。
    export PATH=$PATH:/home/gcc/arm/gcc-3.3.6-glibc-2.3.2/arm-linux/bin

       
四、測試環境

    hello.c
   
  #include <stdio.h>
  int main()
  {
  float myValueA=1.9;
  float myValueB=2.8;
  PRintf("Hello!My E680!/n");
  printf("TestValue:%f/n",myValueA+myValueB);
  return 0;
  } 

    輸入:arm-linux-gcc -o moto hello.c,生成可執行文件,這里在Linux下顯
然是不能執行的,復制到你的手機上,設置好環境變量,或者使用以下Shell腳本,

  #!/bin/bash
  export QTDIR=/usr/lib/ezx
  export LD_LIBRARY_PATH=$QTDIR/lib
  export EZX_RES_F >

 

補充說明

草木瓜

20060917

一、說明

    大概是編輯的緣故,上篇文章提交上去后,審批完居然文章未尾少了很多行。
令人詫異。現只好重發一遍未尾被遺漏的內容。
    再者文章本身難免有疏漏,提交又不能隨意更改,如有問題可查看:
    完全系列文章地址:http://blog.csdn.net/liwei_cmg
    文章相關的重要資源下載地址:http://play.younet.com/view.php?tid=18578
    以上的網址倒能夠及時更新。
   
二、末尾內容

    hello.c
   
  #include <stdio.h>
  int main()
  {
  float myValueA=1.9;
  float myValueB=2.8;
  printf("Hello!My E680!/n");
  printf("TestValue:%f/n",myValueA+myValueB);
  return 0;
  } 

    輸入:arm-linux-gcc -o moto hello.c,生成可執行文件,這里在Linux下顯
然是不能執行的,復制到你的手機上,在telnet下進入可執行文件所在目錄,輸入
命令:./moto,顯示:

    Hello!My E680!
    TestValue:4.700000
  
  可以看到正常顯示,而且也沒有所謂的浮點型Bug。這樣沒有使用圖形化內容,所以也不需要設置環境變量,在后面的文章會有更具體的體現,現在交叉編譯環境已成功搭建,終于邁開第一步了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 唐河县| 九江市| 叙永县| 龙江县| 开阳县| 日照市| 高要市| 英吉沙县| 宁明县| 巧家县| 通山县| 怀来县| 勐海县| 垣曲县| 泸州市| 彭水| 应用必备| 抚松县| 明水县| 疏勒县| 永昌县| 静乐县| 资兴市| 巍山| 贺兰县| 建始县| 屯门区| 合肥市| 叙永县| 富川| 绥化市| 合水县| 江华| 汝州市| 安丘市| 沂水县| 彭阳县| 元氏县| 崇明县| 大邑县| 旅游|