ubuntu上的arm-elf-tools -20040427.sh 下載及安裝問題的解決

要完成uclinux在ARM上的移植,必須有這個工具。

下載地址:
http://opensrc.sec.samsung.com/download.html 這個網站上還有許多其它資源可以下載。
我選擇 arm-elf-tools-20040427.sh 這個版本,大小是16.8M,電信2M帶寬,用FIREFOX自帶下載工具下載速度爲110K左右,速度還是挺快的。
安裝過程:
1、看這個文件的屬性
ls -l arm-elf-tools-*

2、修改屬性
chmod 755 arm-elf-tools*

3、執行解壓安裝
如在ubuntu下必須sudo ,其它版linux下,要用root。
sudo sh ./arm-elf-tools-20040427.sh

一般情況下,會提示以下錯誤:
#################################
#tail: cannot open `+43' for reading: No such file or directory

#gzip: stdin: not in gzip format
#tar: This does not look like a tar archive
#tar: Error exit delayed from previous errors
#################################

解決方法:
*tail問題:tail: cannot open `+43' for reading: No such file or directory
用VIM打開該文件,將第39行的代碼:
    tail +${SKIP} ${SCRIPT} | gunzip | tar xvf -
改成如下:
    tail -n +${SKIP} ${SCRIPT} | gunzip | tar xvf -
vim arm-elf-tools*
鍵入:I ,進入插入模式
在第39行加入 “-n

*gunzip問題:gunzip: stdin: unexpected end of file
要在arm-elf-tools-20030314.sh 最後一行加入一空行:完成上面第一個tail問題後,按'ESC',進入命令模式,鍵入‘G’,跳到文章最後,鍵入‘I’,在最後一行尾加回車。

重新執行sudo sh ./arm-elf*.sh命令後,可以發現已經裝好了。可以測試一下:
arm-elf-gcc -v
顯示:
Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.3/specs
gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)

4、測試下編譯器
先寫一個小程序:
/*test.c*/
#include 

int main()
{
        int i;
        for(i=0;i<6;i++)
        {
                printf("i=%d/n",i);
                printf("Hello,embedded linux!/n");
        }
        return 0;
}

終端下輸入命令:arm-elf-gcc -WI,elf2flt -o test test.c
提示:cc1: Invalid option `-WI,-elf2flt'
還沒有找到解決方法,慢慢來,後面寫。
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
一些編譯器相關知識學習。
GNU GCC簡介:
GNU GCC是一套面向嵌入式領域的交叉編譯工具,支持多種編程語言、多種優化選項並且能夠支持分步編譯、支持多種反彙編方式、支持多種調試信息格式,目前支持X86、ARM7、StrongARM、PPC4XX、MPC8XX、MIPS R3000等多種CPU。 
GNU GCC的基本功能包括:輸出預處理後的C/C++源程序(展開頭文件和替換宏)
輸出C/C++源程序的彙編代碼
輸出二進制目標文件
生成靜態庫
生成可執行程序
轉換文件格式
GCC 組成:
1. C/C++交叉編譯器arm-elf-gcc
  arm-elf-gcc是編譯的前端程序,它通過調用其他程序來實現將程序源文件編譯成目標文件的功能。
  編譯時,它首先調用預處理程序(cpp)對輸入的源程序進行處理,然後調用 cc1 將預處理後的程序編譯成彙編代碼,最後由arm-elf-as將彙編代碼編譯成目標代碼。
  arm-elf-gcc具有豐富的命令選項,可以控制編譯的各個階段,滿足用戶的各種編譯需求。
2. 彙編器 arm-elf-as
      arm-elf-as將彙編語言程序轉換爲ELF (Executable and Linking Format,執行時鏈接文件格式)格式的可重定位目標代碼,這些目標代碼同其它目標模塊或函數庫易於定位和鏈接。
      arm-elf-as產生一個交叉參考表和一個標準的符號表,產生的代碼和數據能夠放在多個區 (Section)中。
3. 連接器arm-elf-ld
       arm-elf-ld根據鏈接定位文件Linkcmds中的代碼區、數據區、BSS區和棧區等定位信息,將可重定位的目標模塊鏈接成一個單一的、絕對定位的目標程序。
該目標程序是ELF格式,並且可以包含調試信息。
       arm-elf-ld會產生一個內存映象文件Map.txt,該文件顯示所有目標模塊、區和符號的絕對定位地址。它也產生交叉參考列表,顯示參考每個全局符號的目標模塊。
       arm-elf-ld支持將多個目標模塊鏈接成一個單一的、絕對定位的目標程序,也能夠依此對目標模塊進行鏈接,這個特性稱爲增量鏈接(Incremental Linking)。
       假如輸入文件是一個函數庫,arm-elf-ld會自動從函數庫裝載被其它目標模塊參考的函數模塊。arm-elf-ld與其它鏈接程序相比,能提供更有 幫助的診斷信息。許多鏈接器遇到第一個錯誤即放棄鏈接,而arm-elf-ld只要有可能都繼續執行,幫助用戶識別其它錯誤,有時甚至能獲得輸出代碼。
4. 庫管理器arm-elf-ar
       arm-elf-ar將多個可重定位的目標模塊歸檔爲一個函數庫文件。採用函數庫文件,應用程序能夠從該文件中自動裝載要參考的函數模塊,同時將應用程序 中頻繁調用的函數放入函數庫文件中,易於應用程序的開發管理。arm-elf-ar支持ELF格式的函數庫文件.
5. 工程管理器MAKE
       Make是用於自動編譯、鏈接程序的實用工具,使用make後就不需要手工的編譯每個程序文件。要使用make,首先要編寫makefile。
       Makefile描述程序文件之間的依賴關係,並提供更新文件的命令。在一個程序中,可執行文件依賴於目標文件,而目標文件依賴於源文件。如果 makefile文件存在,每次修改完源程序後,用戶通常所需要做的事情就是在命令行敲入“make”,然後所有的事情都由make來完成。
6. 其他實用程序
       目標文件格式轉換工具arm-elf-objcopy支持的文件格式有H-record、S-record、ABS、BIN、COFF、ELF。例如,它 能夠將ELF格式文件轉換爲其它格式的文件,如intel H-record格式、Motorola S-record等。arm-elf-nm程序用於顯示文件中的符號信息。 

GCC編譯程序的基本過程:
arm-elf-gcc根據輸入文件的後綴來確定文件的類型,然後根據用戶的編譯選項(包括優化選項、調試信息選項等)將其編譯成相應的彙編臨時文件(後綴爲.s);
arm-elf-as將該彙編文件編譯成目標文件(後綴爲.o);
arm-elf-ld 根據用戶的鏈接選項(包括指定鏈接命令文件等)將目標文件和各種庫鏈接起來生成可執行文件。
C/C++交叉編譯器arm-elf-gcc
arm-elf-gcc是編譯的前端程序,它通過調用其他程序來實現將程序源文件編譯成目標文件。
編譯時它首先調用預處理程序(cpp)對輸入的源程序進行處理;然後調用cc1將預處理後的程序編譯成彙編代碼;最後由arm-elf-as將彙編代碼編譯成目標代碼。

1.命令格式
arm-elf-gcc [options] file…
在命令arm-elf-gcc後面跟一個或多個選項,選項間用空格隔開,然後跟一個或多個目標文件。
例如,將test.c 編譯成目標文件test.o 並且生成調試信息:
arm-elf-gcc –g –c –o test.o test.c 
2.命令選項列表
輸出控制選項:
-c       將輸入的源文件編譯成目標文件
-S       將C/C++文件生成彙編文件
-o file   將輸出內容存於文件file
-pipe    在編譯的不同階段之間採用管道通訊方式
-v      打印出編譯過程中執行的命令
-x language  說明文件的輸入類型爲language
C語言選項:
-ansi          支持所有ANSI C程序
警告選項:
-w              關閉所有警告
-Wall          打開所有警告
-Wimplicit  如果有隱含申明,顯示警告信息
-Wno-implicit  不顯示對隱含申明的警告
調試選項:
-g    在文件中產生調試信息(調試信息的文件格式有stabs、COFF、XCOFF、DWARF)
優化選項:
-O0            不優化
-O1            一級優化
-O2            二級優化
-O3            三級優化

預處理選項:
-E       運行C的預處理器
-C       在運用-E進行預處理時不去掉註釋
-D macro       定義宏macro爲1
-D macro=defn  定義宏macro爲defn
彙編選項:
-Wa,option    將選項option傳遞          給彙編器

搜索路徑選項:
-I dir         設置搜索路徑爲dir
-I-       指定只對 #include  "file",有效的頭文件搜索目錄 

3. 源文件類型的識別
arm-elf-gcc能夠自動根據文件名後綴識別文件類型.
文件名後綴和文件類型的對應關係如下:
*.c   ——C源文件
*.i   ——經過預處理後的C源文件
*.h   ——C頭文件
*.ii   ——經過預處理後的C++源文件
*.cc   ——C++源文件
*.cxx   ——C++源文件
*.cpp   ——C++源文件
*.C  ——C++源文件
*.s   ——不需要預處理的彙編文件
*.S  ——需要預處理的彙編文件
此外,用戶可通過-x language說明文件的輸入類型,此時可以不用以上的後綴規則。
-x language
其中的language可爲:
c       ——C源文件
c++        ——C++源文件
c-header      ——C頭文件
cpp-output   ——經過預處理後的C源文件
c++-cpp-output   ——經過預處理後的C++源文件
assembler   ——不需要預處理的彙編文件
assembler-with-cpp  ——需要預處理的彙編文件
例如,編譯一個不需要預處理的C程序:
arm-elf-gcc –c –g –x  cpp-output test.c

1. 下載源文件、補丁和建立編譯的目錄

2. 建立內核頭文件

3. 建立二進制工具(binutils)

4. 建立初始編譯器(bootstrap gcc)

5. 建立c庫(glibc)

6. 建立全套編譯器(full gcc)

 

 

 

 

 

 

 

 

 

ELDK;支持GDB的BDIGDB Firmware FOR Linux;基於windows的嵌入式Linux交叉開發工具軟件INSIGHT GNUPROXTOOLS ;支持GDB的BDIGDB  FIRMWARE FOR WINDOWS

 

 

bootloader

 

German DENK U-boot GNU

 

fuction:

 

       network support;(tftp/Bootp);;;FlashRAM ;串口deng多種方式下載內核

 

      surport serial port download software by   Kermit binary ; S-Records

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章