由於eCos需要mips-elf-gcc來編譯核心,所以,今天編譯了gcc4.4.1最新版本的gcc編譯器,步驟如下:
首先,在編譯之前必須先匯出以下變數:
export TARGET=mips-elf
export PREFIX=/usr/local/$TARGET
export PATH=$PATH:$PREFIX/bin
echo $TARGET
echo $PREFIX
echo $PATH
===================
編譯環境:FC9
GCC版本如下:
使用內建 specs。
目標:i386-redhat-linux
配置為:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-cpu=generic --build=i386-redhat-linux
執行緒模式:posix
gcc 版本 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC)
======================
安裝binutils-2.19.1,
#tar xjfv binutils-2.19.1.tar.bz2
#mkdir build-binutils
#cd build-binutils
#../binutils-2.19.1/configure --target=$TARGET --prefix=$PREFIX
#make all
#make install
================================
安裝libgmp:
說明:
該庫用於進行高精度的運算。
如果你的系統上的gmp庫4.1以上,就不用安裝了。
用於計算的庫:
gmp-4.3.1,
#mkdir build-gmp
#cd build-gmp
#../gmp-4.3.1/configure --prefix=/usr --enable-shared
===========================================
安裝libmpfr,
說明:
該庫用於進行高精度的運算。
如果你的系統的mpfr庫是2.3.2以上,就不用安裝了。
#mkdir build-mpfr
#cd build-mpfr
#../mpfr-2.4.1/configure --prefix=/usr --enable-shared --disable-static
===========================================
安裝gcc:
#tar jxvf gcc-4.4.1.tar.bz2
#mkdir build-gcc
#cd build-gcc
#../gcc-4.4.1/configure --target=$TARGET --prefix=$PREFIX --without-headers --with-newlib --with-gnu-as --with-gnu-ld
#make all-gcc(注意,這裡是make all-gcc)
#make install-gcc(注意,這裡是make install-gcc)
說明:
如果使用make install命令安裝可能會提示以下錯誤(用make install-gcc就不會了):
make[2]: Entering directory `/home/gcc-4.4.1/build-gcc/mips-elf/libstdc++-v3'
make[2]: *** 沒有規則可以建立目標“install”。 停止。
make[2]: Leaving directory `/home/gcc-4.4.1/build-gcc/mips-elf/libstdc++-v3'
make[1]: *** [install-target-libstdc++-v3] 錯誤 2
make[1]: Leaving directory `/home/gcc-4.4.1/build-gcc'
make: *** [install] 錯誤 2
則暫時不要理會之。
======================================
編譯newlib-1.17.0,
#tar jxvf newlib-1.17.0.tar.bz2
#mkdir build-newlib
#cd build-newlib
#../newlib-1.17.0/configure --target=$TARGET --prefix=$PREFIX
#make all
#make install
=======================================
重新編譯gcc,
gcc-4.4.1
#cd build-gcc
#../gcc-4.4.1/configure --target=$TARGET --prefix=$PREFIX --with-newlib --with-gnu-as --with-gnu-ld --disable-shared --disable-libssp
#make all(和前面一次的編譯不同,這裡是make all)
#make install
這次由於有了剛才編譯的newlib的支援,就不會再有錯誤了。
===================================
安裝gdb-6.8
#tar zxvf gdb-6.8.tar.gz
#mkdir build-gdb
#cd build-gdb
#../gdb-6.8/configure --target=$TARGET --prefix=$PREFIX --enable-sim-stdio
#make all
#make install
完成!
*********************************************
mips-elf-gcc是用來開發mips硬體程式的,它不能使用動態庫,另外有一個有趣的工具叫作:mips-elf-run
它是PC下的一個MIPS的simulator(模擬器),可以類比運行mips elf程式。
測試如下:
mips-elf-gcc -Tidt.ld -mips4 -EL hello.c -o hello
mips-elf-run hello
就可以看到列印資訊了。
其中編譯選項-T是給程式指定一個預設的入口,否則會警告。
-EL是為了產生LSB程式,即小端模式。
關鍵字:交叉編譯器,mips-elf-gcc