mips linux 编译,Linux环境下mips-gcc编译
背景
在之后的學(xué)習(xí)中,需要在自己的mips架構(gòu)cpu上編寫一系列工具。不想使用mips匯編代碼編寫這些工具,希望使用c語言編寫,并編譯為mips機器語言。所以這次編譯沒有編譯c庫(不能使用自帶的頭文件),僅僅編譯了gcc編譯器。
搭建環(huán)境
系統(tǒng):Ubuntu 16.04 LTS版本
前期準(zhǔn)備
在主目錄~下進行編譯。
編譯好的文件放在(安裝在)~/gcc-mips文件夾下
1、從鏡像源上下載binutils
sudo wget http://mirrors.ustc.edu.cn/gnu/binutils/binutils-2.29.tar.xz
(一開始以為2.9版本是最高的,因為它排列在鏡像源文件列表的最后,后來發(fā)現(xiàn)是98年的......,編譯時會出錯)
binutils包括as, ld, objdump,objcopy等有用的工具,as是Assembler,ld是linker,由于我們想要將c語言編譯為mips機器碼,我們需要as和ld支持mips架構(gòu),而系統(tǒng)自帶的僅支持x86
2、從鏡像源上下載gcc源代碼
sudo wget http://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.xz
3、從鏡像源上下載gmp,mpc,mpfr
編譯gcc時需要這些源代碼(否則編譯gcc時在configure會出錯),可以在編譯完binutils后做
sudo wget http://mirrors.ustc.edu.cn/gnu/gmp/gmp-6.1.2.tar.xz
sudo wget http://mirrors.ustc.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz
sudo wget http://mirrors.ustc.edu.cn/gnu/mpfr/mpfr-3.1.6.tar.xz
4、解壓
tar -xvf gcc-7.2.0.tar.xz
tar -xvf binutils-2.29.tar.xz
tar -xvf gmp-6.1.2.tar.xz
tar -xvf mpc-1.0.3.tar.gz
tar -xvf mpfr-3.1.6.tar.xz
編譯binutils
1、進入binutils文件夾,并進行配置
cd binutils-2.29
./configure --target=mips --prefix=主目錄/mips-gcc (主目錄替換為具體的主目錄/home/xxx)
--target指定了目標(biāo)的架構(gòu),--prefix指定了make install安裝的地址。最后可執(zhí)行程序會放在prefix/target/目錄下,在這里是主目錄/mips-gcc/mips目錄下
如果configure階段顯示出錯,可能是缺少某些程序,可以嘗試根據(jù)錯誤信息用apt-get獲取相應(yīng)的程序
2、編譯與安裝
make -jN (N替換為CPU核數(shù)*2)
make install
make所花時間大概在10分鐘以內(nèi)
完成后可以在/gcc-mips/mips中看到as,ar等程序
編譯gcc
1、準(zhǔn)備工作
我們先進入解壓出來的gcc目錄
cd gcc-7.2.0
gcc編譯的過程中,會在gcc-7.2.0這個文件夾下尋找一系列程序的源代碼進行編譯,比如我們之前下載的gmp,mpc,mpfr等。接下來我們把之前解壓出來的文件夾放到gcc-7.2.0目錄下
mv -v ../gmp-6.1.2 gmp
mv -v ../mpfr-3.1.6 mpfr
mv -v ../mpc-1.0.3 mpc
2、配置
./configure --target=mips --prefix=主目錄/mips-gcc
注意之前編譯binutils生成的as,ar等執(zhí)行文件需要放在prefix/target/bin目錄下,在這里為主目錄/mips-gcc/mips/bin目錄下
3、編譯
make的過程分為4部分
Build host tools necessary to build the compiler.
Build target tools for use by the compiler such as binutils (bfd, binutils, gas, gprof, ld, and opcodes) if they have been individually linked or moved into the top level GCC source tree before configuring.
Build the compiler (single stage only).
Build runtime libraries using the compiler from the previous step.
我們?nèi)绻恍枰狢語言庫文件的話只需要進行前3步
第一步ubuntu系統(tǒng)已經(jīng)幫我們準(zhǔn)備好了編譯gcc需要的一系列程序
第二步在編譯binutils時已經(jīng)完成
我們僅需要編譯compiler
make all-gcc -jN (N為CPU核數(shù)*2)
make install-gcc
make所花時間很長大概要一個小時多
之后在主目錄/mips-gcc/bin下可以看見mips-gcc等工具
測試
測試用程序:
//a.c
void _start()
{
}
cd 主目錄/mips-gcc/bin
mips-gcc a.c -S a.s
//將C語言轉(zhuǎn)為at&t格式的匯編程序
mips-gcc a.c -o a.out
//將C語言轉(zhuǎn)為elf格式的可執(zhí)行文件
mips-objcopy -O binary -j.text a.out a.bin
//將可執(zhí)行文件中程序段提取出來以2進制形式放入a.bin文件中
可以使用軟件查看a.s,a.bin中的內(nèi)容
遺留問題
繼續(xù)編譯c語言運行庫時出現(xiàn)了問題,懷疑是沒有下載glibc。
參考資料:
總結(jié)
以上是生活随笔為你收集整理的mips linux 编译,Linux环境下mips-gcc编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 插入篇 |程序员进阶之推荐书目
- 下一篇: 官方 AppStore 下载的 OS X