一步一步教你怎麼編譯GNU ARM GCC 交叉編譯器 arm-none-eabi-gcc
首先,對於編譯器這東西,我一向認為很高深,當然現在還是這麼認為,呵,所以呢,一般都是用別人編譯好的現成的編譯好版本。可是最近因為要在windows下面編譯u-boot的原因,因為找不到合適的arm編譯器,故只能自己編譯一個了。下面就是整個的編譯過程,一步步來吧。
在開始之前,還要說明一點,這裡所編譯的gnu arm gcc
1.
(1)型別:arm-none-eabi-gcc
(2)版本:Binutils-2.22,Newlib-1.20.0,GCC-4.7.1,GDB-7.4.1,insight-6.8.1
嘿嘿,這個版本的問題,我參考了yagarto
(3)下載所要的原始檔:
Binutils-2.22
Newlib-1.20.0:
也可以通過CVS來獲得:
GCC-4.7.1:
GDB-7.4.1:
insight-6.8.1:
也可以通過CVS來獲得:
cvs -z9 -d :pserver:
[enter "anoncvs" as the password]
cvs -z9 -d :pserver:[email protected]:/cvs/src co -r gdb_6_8-branch insight
官網不變,下載地址這裡只是給出參考,感覺隨時會變,那時候就google或百度。
2.
編譯之前還要做幾件事:
(1)
Cygwin下載請到
(2)
首先,建一個用來存入編譯好的編譯器的目錄,建義在cygwin安裝目錄下建一下opt目錄,裡面建一個arm-gnu-tools目錄,比如我的cygwin是裝在:d:\cygwin,那麼我就建d:\cygwin\opt\arm-gnu-tools,這樣你就可以在cygwin下通過
其次,再建一個目錄build-arm-tools,然後在建立build-binutils,
build-gcc, build-gdb, build-newlib,
E:\build-arm-tools
│
│
│
│
│
│
│
├─build-binutils
├─build-gcc
├─build-gdb
├─build-insight
├─build-newlib
├─binutils-2.22
├─gcc-4.7.1
├─gdb-7.4.1
├─insight-6.8-1
└─newlib-1.20.0
其中build_arm_tools.bat是我們要進行編譯要用到的指令碼,主要作用是設定一些環境變數,啟動cygwin環境,具體內容如下:
@echo off
set TARGET=arm-none-eabi
set PREFIX=/opt/arm-gnu-tools
set BIN_PATH=/opt/arm-gnu-tools/bin
set LANG=C.UTF-8
set CYGWIN_DIR=d:\cygwin
set PATH=%CYGWIN_DIR%\bin;%PATH%
set HOME=e:\build-arm-tools\
bash --login –i
雙擊啟動後顯示:
(3)
這部分內容的話,我是參考了yagarto, GNUARM, WinARM, devkitARM, SysGcc_ARM等,CodeSourcery和Linaro是基於linux庫的,所以無可比性,最後覺得yagarto的引數最好的,然後又在它的基礎上加了幾個,具體的如下:
--target=arm-none-eabi
--prefix=/opt/arm-gnu-tools
--disable-nls
--disable-threads
--enable-languages=c,c++
--enable-interwork
--with-gcc
--with-gnu-ld
--with-gnu-as
--with-dwarf2
--with-float=soft
--disable-shared
--with-newlib
--enable-multilib
--disable-libssp
--disable-libstdcxx-pch
--disable-libmudflap
--disable-libgomp –v
--with-headers=../newlib-1.20.0/newlib/libc/include
--with-pkgversion='semilog_ARM release 01'
--enable-target-optspace
--with-cpu=cpu
--with-arch=armv7
下面就分別對(我知道的)引數說明一下吧:
--target=arm-none-eabi
--prefix=/opt/arm-gnu-tools
編譯好生成的編譯器存放的地方,比如,編好了,就會在arm-gnu-tools目錄下生成所要編譯器。
--disable-nls
這個引數真他媽坑爹,網上找到的說法是“這個引數禁止了國際化”,我怎麼看也不明白,結果在gcc reference book
--disable-threads
這個引數等價於--enable-threads=single,而可以看到linux下的gcc的引數中寫差—enable-threads=posix,具體的我也不知道什麼意思,多半是支援多執行緒。
--enable-languages=c,c++