RISC-V 軟體環境

GoCoding發表於2023-02-06

RISC-V 想玩起來,第一步,可以先準備軟體環境。

官方倉庫的 GNU 工具鏈 riscv-gnu-toolchain 裡,有 Spike pkQEMU 的模擬環境,可以一次性把編譯和模擬環境都準備好。

準備工具鏈

前提

如果是 Windows / WSL2 環境,在獲取程式碼前,請確認工作目錄屬性是區分大小寫的。因為 glibc 只能在區分大小寫的檔案系統上編譯。不然,編譯時會遇到連結錯誤,如 undefined reference to 'rtld_errno'

# 以管理員許可權開啟 Windows 終端
#  https://github.com/microsoft/terminal

# 查詢工作目錄區分大小寫屬性
fsutil.exe file queryCaseSensitiveInfo D:\wslcodes
已禁用目錄 D:\wslcodes 的區分大小寫屬性。

# 啟用工作目錄區分大小寫屬性
fsutil.exe file setCaseSensitiveInfo D:\wslcodes enable
已啟用目錄 D:\wslcodes 的區分大小寫屬性。

如果是 Linux / Ubuntu 環境,那已經是區分大小寫的了。

獲取程式碼

git clone --depth 1 -b master https://github.com/riscv-collab/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
git submodule update --init --recursive

如果不用 QEMU 模擬,可以刪除該子模組,加快下載:

git rm --cached qemu
git submodule update --init --recursive

編譯安裝

Ubuntu 20 上的編譯過程。其他作業系統,請見工具鏈的 README。

# 依賴
sudo apt update -y
sudo apt install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build -y
#  for spike
sudo apt install device-tree-compiler -y

# 配置
#  --enable-multilib 支援 32-bit 與 64-bit,預設 64-bit
#  --with-sim=spike 帶上 Spike 模擬器 (only support rv64* bare-metal/elf toolchain)
./configure --prefix=/opt/riscv --enable-multilib --with-sim=spike

# 編譯
sudo make linux build-sim

# 環境
#  可以進 ~/.bashrc,但影響系統 gcc 環境
export RISCV_HOME=/opt/riscv
export PATH=$RISCV_HOME/bin:$RISCV_HOME/riscv64-unknown-elf/bin:$PATH

# 測試
riscv64-unknown-elf-gcc --version
spike -h

編譯程式並執行

編寫檔案 hello.c:

#include <stdio.h>

int main(int argc, char const *argv[]) {
  printf("hello riscv\n");
  return 0;
}

編譯程式:

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

Spike 執行:

# 預設 64-bit,故用 pk64,另有 pk32
$ spike $(which pk64) hello
bbl loader
hello riscv

# spike debug 執行
$ spike -d $(which pk64) hello
: h

更多資料

GoCoding 個人實踐的經驗分享,可關注公眾號!

相關文章