M5-mips交叉編譯環境搭建 原

    M5模擬器對MIPS指令集的支持限制爲32位、小字節序,因此在製作交叉編譯工具
鏈時需要注意正確的字節序。文中的工具鏈基於linux-2.6.32、binutils-2.22、glibc-2.13、
glibc-ports-2.13、gcc-4.4.6、gmp-5.0.0、mpfr-3.0.1構建。

1.創建宿主機編譯環境

    執行su命令,切換至root權限。執行以下命令,將相關配置信息寫入到環境變量。
# export CROSSROOT=/opt/mips-cross
# export TARGET=mipsel-unknown-linux-gnu
# export PREFIX=${CROSSROOT}/tools
# export TARGET_PREFIX=${PREFIX}/${TARGET}
# export PATH=${PREFIX}/bin:${PATH}
    接下來在用戶根目錄爲軟件的編譯建立相關的文件夾,build-binutils、
build-boot-gcc、build-glibc和build-gcc

2.安裝內核頭文件

    內核頭文件安裝是建立工具鏈的第一步。從網站http://www.linux.org上下載內核
源代碼包linux-2.6.32.tar.bz2並解壓。進入解壓出的內核文件夾linux-2.6.32,使用
安裝內核頭文件

# make INSTALL_HDR_PATH=${PREFIX} ARCH=mips headers_install

變量INSTALL_HDR_PATH指定了安裝的目標目錄,變量ARCH指定了目標架構爲MIPS。

3.安裝binutils

    binutils包中的工具常用來操作二進制目標文件,GNU彙編器as和鏈接器ld是該包
中最重要的兩個工具。從網站http://ftp.gnu.org上下載源代碼文件binutils-2.22.tar.gz
並解壓。進入build-binutils目錄,進行binutils的配置。

# ../binutils-2.22/configure –target=${TARGET} –prefix=${PREFIX} \
–disable-nls

--target指出了編譯的目標系統是mipsel-unknown-linux-gnu,--prefix指出了binutils
的安裝目錄。完成配置後進行編譯、安裝。

4.安裝gcc引導編譯器

    本階段將建立引導編譯器。因爲這時還沒有MIPS的glibc庫可以使用,只能編
譯一個最簡單的gcc,用這個gcc編譯出glibc後再重新編譯完整在安裝前從
http://ftp.gnu.org和http://www.mpfr.org網站下載源代碼文件gcc-4.4.6.tar.gz、
gmp-5.0.0.tar.gz和gmp並移動到文件夾gcc-4.4.6內,同樣將mpfr-3.0.1文件夾重命名爲
build-boot-gcc目錄完成對gcc引導編譯器的配置。

# ../gcc-4.4.6/configure –target=${TARGET} –prefix=${PREFIX} \
–disable-nls –disable-shared –without-headers –enable-languages=c \
–disable-multilib –disable-libmudflap –disable-libstdcxx-pch \
–disable-decimal-float –disable-threads –disable-libssp –disable-libgomp \
–disable-libffi –disable-libquadmath –disable-libitm

    此配置信息禁用了自舉編譯器不需要的特性支持,指定生成一個最小化的gcc編譯器。
在編譯時,會發生以下錯誤:

error: header files gmp-impl.h and longlong.h not found

    這是由於在build-boot-gcc/gmp目錄下找不到這兩個頭文件,解決方法是將
gcc-4.4.6/gmp文件夾內的頭文件目錄下。然後繼續編譯,完成引導編譯器的安裝。

5.安裝glibc

    glibc是gnu發佈的libc庫,即C運行庫,是linux系統中最底層的api。glibc
除了封裝linux操作系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的
實現。
    安裝glibc還需要相應glibc-ports的支持,下載相應源代碼glibc-2.13.tar.gz
和glibc-ports-2.13.tar.gz並解壓,將解壓出的glibc-ports-2.13文件夾重命名爲ports
並移動到文件夾glibc-2.13內。進入build-glibc目錄完成對glibc的配置。

# ../glibc-2.13/configure –host=${TARGET} –prefix=${PREFIX} \
–enable-kernel=2.4.3 –with-headers=${PREFIX}/include –disable-profile \
–disable-multi-arch libc_cv_forced_unwind=yes libc_cv_ctors_header=yes \
libc_cv_c_cleanup=yes

在編譯時會出現“cannot find -lgcc_eh”錯誤,解決方法如下:

# ln -s ${PREFIX}/lib/gcc/${TARGET}/4.4.6/libgcc.a \
${PREFIX}/lib/gcc/${TARGET}/4.4.6/libgcc_eh.a

繼續編譯並完成安裝。

6.安裝gcc編譯器

    安裝glibc後,就可以安裝支持C、C++的完整編譯器。在安裝引導編譯器時已獲得gcc
的源代碼,同樣,複製gmp的頭文件gmp-impl.h和longlong.h到build-gcc/gmp目錄下避免
錯誤的發生。
    進入到build-gcc文件夾,執行以下配置命令:

# ../gcc-4.4.6/configure –target=${TARGET} –prefix=${PREFIX} \
–disable-multilib –disable-nls –disable-libstdcxx-pch –disable-shared \
–with-headers=${PREFIX}/include –enable-symvers=gnu –enable-c99 \
–enable-threads=posix –enable-languages=c,c++ –enable-long-long \
–enable-__cxa_atexit

    在完成gcc的配置後,開始編譯,最後完成完整編譯器的安裝。
    至此,整個跨平臺開發工具鏈都已設置好,可以直接在PC平臺上編寫、編譯和鏈接基於
MIPS指令集的程序了。

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。

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