MIPS-GNU工具鏈的安裝

MIPS-GNU工具鏈的安裝

交叉編譯:是A機器上編譯生成,運行在B機器上。兩個機子有不同的機器指令。

工具鏈:一般由編譯器、連接器、解釋器和調試器組成。

衆所周知,現在大家電腦上的CPU上都爲x86架構,找一個MIPS架構的CPU是很難的。於是便出現了交叉編譯,我們需要在我們的x86電腦上編譯出能運行在MIPS架構的CPU上的二進制代碼。

一、構建方法

​ 通常構建交叉工具鏈有如下三種方法:

​ 方法一: 分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。該方法相對比較困難,適合想深入學習構建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用下列的方法二構建交叉工具鏈。

​ 方法二: 通過Crosstool腳本工具來實現一次編譯,生成交叉編譯工具鏈,該方法相對於方法一要簡單許多,並且出錯的機會也非常少,建議大多數情況下使用該方法構建交叉編譯工具鏈。

​ 方法三 :直接通過網上下載已經製作好的交叉編譯工具鏈。該方法的優點不用多說,當然是簡單省事,但該方法有一定的弊端就是侷限性太大,因爲畢竟是別人構建好的,也就是固定的,沒有靈活性,所以構建所用的庫以及編譯器的版本也許並不適合你要編譯的程序,同時也許會在使用時出現許多莫名其妙的錯誤,建議讀者慎用此方法。

​ 類似教程有:https://www.cnblogs.com/evisie/archive/2012/12/05/2802363.html

二、具體步驟

​ 採用人人稱讚的buildroot。

Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation.

​ 實驗環境:Linux 4.4.0-93-generic

1580907948040

1.用git clone將buildroot工程源碼進行下載

# 安裝依賴庫
$ sudo apt-get update
$ sudo apt-get install libncurses5-dev patch
 
# 下載源碼
$ git clone https://github.com/buildroot/buildroot.git
 
# 進行編譯的配置
$ cd buildroot
$ make clean
$ make menuconfig

2.配置相關機器信息

執行make menuconfig指令會出現以下界面

1580908111388

  • 點擊Target options —>Target Architecture —> MIPS(big endian) ,此時Target Architecture 會自動配置爲(Generic MIPS 32)

  • 點擊Toolchain—>Kernel headers–>改成機器環境的kernel版本(我用的是Linux 4.4.x lernel headers,點擊uname -r即可查看)

    1580908375912

  • 選擇一開始進入界面的save—>ok進行保存,然後退出

    1580908463192

3. 下載一些工具

$sudo apt-get install bison
$sudo apt-get install flex
$sudo apt-get install texinfo

4.輸入make,然後等待😂

$make

5. 大功告成,但爲了方便需要一些配置

​ 經過一段時間的編譯完成以後,在Buildroot的根目錄下會增加一個output文件,其中包含已經編譯好的文件。可以在 buildroot/output/host/usr/bin目錄下找到生成的交叉編譯工具,mips的編譯器就是該目錄下的mips-linux-gcc

1580908740621

​ 此時爲了能在任何文件夾使用命令mips-linux-gcc,我們還需要把當前文件夾添加到PATH環境變量中。

$export PATH="$PATH:/root/github/project/buildroot/output/host/usr/bin"

​ 這樣我們在任何地方都可以使用mips-linux-gcc命令了,如果想要查看mips-linux-gcc的用法,可以輸入下面命令進行查看。

$mips-linux-gcc --help

1580908993898

​ 當然,除了mips-linux-gcc,我們還有其餘的工具,輸入mips-linux-,按tab鍵出現的都是可以利用的工具。

  • as:GNU彙編器,通常也稱爲GAS,as對彙編源程序進行編譯產生目標文件。
  • ld:GNU鏈接器,as產生的目標文件由ld進行鏈接、重定位數據產生可執行文件。
  • objcopy:用於將一種格式的目標文件複製成另外一種格式。
  • objdump:用於列出關於二進制文件的各種信息
  • readelf:類似於objdump,但是它只能處理ELF格式的文件。

1580909513541

三、 參考教程

https://blog.csdn.net/wxh0000mm/article/details/85691111

https://blog.csdn.net/xiaoguaihai/article/details/8766394

希望大家看我的博客

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