為了能在windows下使用gcc的編譯器,一直想在cygwin先編譯arm-elf-gcc,但是搞了一個多月最後還是失敗了,不會linux啊。想去改編譯錯誤都不知道從那裡下手。為了主要的事情能夠快點開始,還是用GNU ARM現成的工具鏈吧。
介紹幾個網站:
www.gnuarm.com 下載GNU ARM的工具鏈,裡面有newlib,可以直接使用標準C庫
www.steve.org.uk 下載windows下面的make
unxutils.sourceforge.net 下載bash,以前的指令碼都是在cygwin下寫的,所以需要一個bash,否則cp,rm等等都用不了。其實steve也提供bash,但是他的cp的參數和cygwin下的不一樣,為了不改指令碼就找了這個。
1.download install tools link:
GNU ARM: http://www.gnuarm.com/bu-2.15_gcc-3.4.3-c-c++-java_nl-1.12.0_gi-6.1.exe
Make: http://www.steve.org.uk/Software/make/make.zip
Bash: http://unxutils.sourceforge.net/UnxUtils.zip
2.install tool
GNU ARM:直接安裝,我的安裝路徑為C:/GNUARM
Make:將make.zip中的make.exe解壓縮到C:\GNUARM\bin
Bash:將UnxUtils.zip\usr\local\wbin中的所有檔案解壓縮到C:\GNUARM\bin
3.note
為了防止以後編譯不出以外,安裝路徑最好不要有空格。
暫時不要使用GCC-4.1 toolchain,沒有cygwin的情況下會gcc提示缺少dll
暫時不要使用GCC-4.0 toolchain,測試的時候不認-mapcs-32,但又不知道預設的到底是多少
GNU ARM下面有用newlib編譯好的用於arm的libc可以直接使用,但是編譯時間候的用到裡面的一些和記憶體有關的函數,必須要在ld檔案中為其留出參考。
我在使用printf的時候直接就報錯c:/GNUARM/arm-elf/lib/libc.a(syscalls.o) (.text+0x69c): In `_sbrk':http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/newlib-1.12.0/newlib/libc/sys/arm/syscalls.c:508: undefined reference to `end'
在ld指令碼中做如下改動就ok了
.bss :
{
__bss_start = .;
*(.bss) *(COMMON);
PROVIDE (end = .);
__bss_end = .;
}
http://blog.21ic.com/user1/2983/archives/2008/53368.html
http://www.gnuarm.com/
http://sourceforge.net/projects/unxutils
http://unxutils.sourceforge.net/