RISC V GNU編譯環境搭建與執行實踐

2021-10-14 07:17:25 字數 4002 閱讀 7492

risc-v執行環境

riscv-gnu-toolchain是riscv的gcc交叉編譯工具鏈

github位址為:

riscv-gnu-toolchain工具鏈由以下幾個子模組組成:

這些子模組包括:

git clone  [email protected]:riscv/riscv-gnu-toolchain.git

cd riscv-gnu-toolchain

git submodule update --init --recursive

sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
再設定環境變數路徑

比如在/etc/profile檔案裡,增加

export riscv=".your.path./riscv-gnu-toolchain"

export path=$path:$riscv/bin

使環境變數生效:

(注意使用此方法環境變數的生效期只為當前終端,關閉當前終端或另開乙個終端都需要重新source一遍。但是機器重啟後該環境變數則不需要每次使其設定生效。)

source /etc/profile
最後編譯riscv-gnu-toolchain

riscv-gnu-toolchain 工具鏈分elf-gcc,linux-gnu-gcc兩個版本,以及他們對應的32位和64位版本。兩個的主要區別在於:

個人認為從名字上便可以區分兩者的使用場景,如果是編譯簡單,較小的elf程式,使用elf-gcc版本即可,如果編譯比較大的程式或者需要動態庫(比如編譯linux,或opencv庫等),推薦使用linux-gnu-gcc版本。

# 需要進入root許可權:

sudo su

# 最後在source一下,使$riscv環境變數生效

source /etc/profile

# 建立乙個build資料夾安裝,更乾淨一些

mkdir build

cd build

# 預設生成64位的編譯工具:riscv64-unknown-elf-***

../configure --prefix=$riscv

make -j4

# 安裝至設定的$riscv路徑

make install

# 生成32位的編譯工具:riscv32-unknown-elf-***

../configure --prefix=$riscv --with-arch=rv32gc --with-abi=ilp32d

make -j4

make install

# 編譯linux-gnu-gcc版本(預設64位):riscv64-unknown-linux-gnu-***

../configure --prefix=$riscv

make linux -j4

make install

編譯成功後可以使用對應的gcc工具驗證

riscv64-unknown-elf-gcc helloworld.c -o helloworld
如果你成功編譯安裝,但是系統提示找不到riscv64-unknown-elf-gcc,可能是因為重新開了新的終端。可以使用前source一下環境變數,使得$riscv環境變數生效。或者重啟之後,一勞永逸。

source /etc/profile

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

但是生成的二進位制檔案不能直接執行,因為主機架構是x86。

得到了risc-v的二進位制elf檔案後,需要依賴指令模擬器才能在x86架構的主機上執行risc-v的elf檔案,比如spike, qemu, gem5等。下面介紹兩種常用的執行環境(spike+pk 和 qemu),可自行選擇。

spike是專門的risc-v指令模擬器,支援risc-v各種模組的指令(如a,f,d,v等),而且也有debug模式。

risc-v proxy kernel(riscv-pk)是risc-v的乙個輕量級應用程式執行環境,可以託管靜態鏈結的risc-v elf二進位制檔案。

可以把spike理解為模擬硬體,pk理解為作業系統,兩個配合來載入執行risc-v elf二進位制檔案。

spike

apt-get install device-tree-compiler

git clone [email protected]:riscv/riscv-isa-sim.git

cd riscv-isa-sim

mkdir build

cd build

../configure --prefix=$riscv

make

[sudo] make install

pk

git clone [email protected]:riscv/riscv-pk.git

cd riscv-pk

mkdir build

cd build

../configure --prefix=$riscv --host=riscv64-unknown-elf

make

make install

測試:

spike pk helloworld
需要注意的是,pk是不能夠載入動態鏈結的riscv elf檔案的(正好對應elf-gcc版本只支援靜態鏈結編譯)。而linux-gnu-gcc版本的riscv工具鏈預設是動態鏈結,直接使用spike + pk無法正常執行。

調整方式只需要手動指定靜態鏈結即可(加上-static引數):

qemu是乙個通用的、開源的機器**器和虛擬機器。qemu支援各種架構的指令模擬,如arm,aarch64,以及risc-v。具體的架構選擇需要在編譯的時候通過config檔案指定。

qemu官網:

git clone 

cd qemu

git submodule init

git submodule update --recursive

wget 

tar xvjf qemu-5.2.0.tar.xz

riscv的qemu有兩種:

這裡執行簡單elf程式我們直接用使用者模式:

cd qemu

./configure --target-list=riscv64-linux-user

make -j4

測試:

./riscv64-linux-user/qemu-riscv64 helloworld
與spike+pk只支援靜態鏈結程式不同,qemu-riscv是支援靜態鏈結和動態鏈結的程式的。

SNMP linux環境搭建與編譯

最近在看snmp 相關的文件,在網上找到得相關資訊都零零散散。經過摸索後,將我實現的步驟與大家一起分享下,希望能幫助初學者少走歪路。2 解壓 tar zxvf libdes l 4.01a.tar.gz tar zxvf snmp v3.2.25.tar.gz 獲得資料夾libdes和snmp 3 ...

SNMP linux環境搭建與編譯

最近在看snmp 相關的文件,在網上找到得相關資訊都零零散散。經過摸索後,將我實現的步驟與大家一起分享下,希望能幫助初學者少走歪路。2 解壓 tar zxvf libdes l 4.01a.tar.gz tar zxvf snmp v3.2.25.tar.gz 獲得資料夾libdes和snmp 3 ...

搭建 編譯環境

編譯器 mingw 是gcc編譯器的乙個windows移植版本,也是類unix作業系統下編寫c c 程式的首選。對於標準化方面一直做的不錯.編輯器 vim 乙個在類unix系統下發展起來的全屏編輯器,它的前生就是大名鼎鼎的vi,當然現在也有windows版本。1,安裝mingw編譯器 官方 www....