1. 程式人生 > >RISC-V Tools編譯安裝三部曲之一

RISC-V Tools編譯安裝三部曲之一

撰稿人:李浩

一、前言

本文包含RISC-VGCC/Newlib Toolchain、GNUtoolchain for RISC-V, ISA Simulator等編譯安裝。

筆者所用OS為:Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-31-generic x86_64)。

本文參照RISC-V的官方文件結合自己機器的實際情況實驗得出,文中難免有些紕漏,還請指正。如有更多需要,請參照RISC-V官方網站:https://www.riscv.org編譯器使用的gcc-4.8.4(此次編譯安裝需要c++ 11的支援,gcc版本大於4.8即可)。可能很多人會現在虛擬機器測試安裝,請務必找一個稍大些的硬碟來安裝,至少要準備40G。

或者檢視其gitHub:https://github.com/riscv

1.需要設定的三個環境變數

$ export  TOP=/home/lh/RISCV

這裡路徑可以自定義到自己的目錄下

$ export  RISCV=$TOP/riscv

$ export  PATH=$PATH:$RISCV/bin

這三個變數可以寫到~/.bashrc裡面,然後使用命令:source ~/.bashrc就可以使這三個變數永久有效,不然每次開啟終端都需要重新設定這三個變數。

2.一些必要的庫和環境

$ sudo apt-get install autoconf automake build-essential autotools-dev curl device-tree-compiler pkg-config libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev gawk bison flex gperf libtool patchutils bc zlib1g-dev texinfo device-tree-compiler 

二、RISC-V GCC/Newlib Toolchain的編譯安裝

1.RISC-V toolchain包含以下元件

·riscv-gnu-toolchain, RISC-V的交叉編譯器。

·riscv-fesvr, 一種“前端”伺服器,它在主機目標介面(HTIF)上為主機和目標處理器之間提供服務(它還提供了虛擬化控制檯和磁碟裝置)。

·riscv-isa-sim, ISA模擬器與執行的標準。

·riscv-pk, 一個代理核心,用於服務構建並連結到RISC-V Newlib埠的程式碼生成的系統呼叫(這不適用於Linux,因為它處理系統呼叫)。·riscv-opcodes

, 模擬器可執行的所有RISC-V操作碼

·riscv-tests, 一組assembly tests以及benchmarks

實際上,在這個列表中,我們只需要構建riscv-fesvrriscv-isa-sim。這是在主機上模擬RISC-V二進位制檔案所需的兩個元件。但是我們還是會構建riscv64-unknown-linux-gnu-gccriscv64-unknown-elf-gcc以用來做更多的事情。

2.獲取和編譯原始碼

1.在GitHub上獲取riscv-tools

$ git  clone  https://github.com/riscv/riscv-tools.git

2.使用git命令更新所需的程式碼庫

$ cd  $TOP/riscv-tools

$ git  submodule  update  --init  --recursive

這一步需要下載大量的檔案(大約3.7G),需要耐心等待.如果發生網路連線失敗或者是下載速度過於慢的話,可以檢視目錄下的.gitmodules檔案,其中包含更新的網址,可以手動下載或者在網上找其他的資源連結。

構建GCC還需要flex, bison, autotools, libmpc, libmpfr, libgmp這些包,如果你沒有的話可以執行

$ sudo apt-get install autoconf automake autotools-dev curl device-tree-compiler libmpc-devlibmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutilsbc zlib1g-dev

配置如下的環境變數:

$export TOP=$(pwd)

如:exportTOP=/home/lh/RISCV

$ export RISCV=$TOP/riscv

$ export PATH=$PATH:$RISCV/bin

設定完之後可以使用echo $TOP來檢視自己的設定是否正確。

為了構建完整的工具鏈,我們需要執行下面的指令碼,隨後開始構建riscv64-unknown-linux-gnu-gcc,在這之前

我們先來看一下目錄下的指令碼:

1. build.sh

(這個指令碼是安裝最為全面的一個,可以看到包括了RISC-V ISA simulator, proxy kernel,and GNU toolchain.之後我們使用的便是這一個。)

 2. build-spike-pk.sh

3. build-spike-only.sh

4. build-rv32ima.sh

5. regression.sh

$ ./build.sh這裡我們根據自己的需要執行不同的指令碼即可。這裡筆者選擇的build.sh

經過漫長的等待,執行結果如下圖,我們可以看到RISC-V Toolchaininstallation completed

三、Testing Your Toolchain

現在你已經有toolchain了,現在讓我們來測試一下,退出rsicv-tools的目錄,然後使用一個echo命令來生成一個hello word程式。

$ cd $TOP

$echo -e '#include <stdio.h>\n int main(void) { printf("Helloworld!\\n"); return 0; }' > hello.c

然後使用riscv64-unknown-elf-gcc來編譯這個.c檔案

$ riscv64-unknown-elf-gcc  -o  hello hello.c

然後你會發現並不能使用./hello來執行這個程式,你需要使用下面的命令,因為我們這個測試程式涉及一個系統呼叫,無法由我們的x86系統來處理。我們需要proxykernel來執行程式,它本身通過spike,即RISC-Varchitectural simulator來執行。使用下面的命令執行hello

$ spike pk hello

非常恭喜,此時你終於再次看到了熟悉的Hello world了,其實RISC-V體系結構模擬器spike以要執行的二進位制檔案的路徑作為它的引數。這個二進位制檔案是pk,位於$RISCV/riscv-elf/bin/pkspike自動找到了這個。然後,riscv-pk接收要執行的程式的名稱作為其引數。

如果你這裡出錯了,hello並不能執行的話,你可以檢視$RISCV/riscv/bin目錄下是否有riscv64-unknown-linux-gnu-gcc等,然後檢視日誌以尋找問題。

將在Linux核心的引導之間保持不變。這將在隨後的核心引導過程中造成一

到這裡為止,你幾乎已經可以體驗到RISC-V的各種工具了,此時你可以查閱資料,深入瞭解他們的使用,但僅僅是這樣還是不夠的下一步我們還需要下載Linux核心,使用我們裝好的riscv64-unknown-linux-gnu-gcc來交叉編譯核心,具體該如何操作呢,讓我們下期再分享。

參考文獻

[2]README of RISC-VGNU Compiler Toolchain: