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
·riscv-tests, 一組assembly tests以及benchmarks
實際上,在這個列表中,我們只需要構建riscv-fesvr和riscv-isa-sim。這是在主機上模擬RISC-V二進位制檔案所需的兩個元件。但是我們還是會構建riscv64-unknown-linux-gnu-gcc和riscv64-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/pk。spike自動找到了這個。然後,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: