前言
近期一直在尝试搭建基于OpenCV的人脸识别系统,本以为手到擒来,毕竟在ARM开发板上也做过很多次了,但是基本功这东西,没法说!!!!尝试了多次,最先是想把ARM的那一套直接移植过来的,但是报错太多,重新编译了好多次也没办法解决;后面觉得先按照前人给的参考文章来做吧,但是貌似前人的模型编译跟编译工具版本、系统版本都有很大的关系,用新版本的工具编译的也是无法运行,最后个人觉得我还是按照当初搞ARM一样,自己搭建环境自己编译吧。
今天第一篇,主要分享下怎么搭建riscv编译环境环境,用无线网卡链接wifi也需要编译内核,磨刀不误砍柴工嘛。
下面主要介绍RISC-V架构下GNU工具链、Spike模拟器及PK代理内核的编译和安装,包括依赖包管理和配置过程,适合像我一样的RISC-V开发者入门参考,我是基于ARM经验做的,可能有的地方也会存在跟系统版本、编译工具版本强相关的问题。。
环境搭建-虚拟机准备
这是我用来编译ARM和现在用来编译riscv的虚拟机配置:

要想加快编译速度,尽可能的多分配处理器和内存,毕竟不管内核还是这些模型,动不动就得编译个把小时。
安装环境[Ubuntu 22.04.3 LTS
其他要求:需要科学上网!
riscv-gnu-toolchain工具链和模拟器安装
一、编译安装riscv-gnu-toolchain
riscv-gnu-toolchain是riscv的gcc交叉编译工具链 github下载地址为:https://github.com/riscv/riscv-gnu-toolchain/tree/master
首先按照常例,更新系统的包:
sudo apt update
sudo apt upgrade
创建一个专门用在下载和存放编译包的文件夹,自己能找到的地方:
#例如:
/home/'用户名'/RISCV/riscv
克隆包到本地文件夹 RISCV:
注意,有的地方推荐是从仓库下载riscv-toolchain,这个包非常大,下载耗时很大,尤其是针对外网下载,但是包内的很多东西是用不上的,所以建议分开下载,先下载主体仓
sudo git clone https://github.com/riscv-collab/riscv-gnu-toolchain.git
下载后可以看到多了个riscv-gun-toolchain的文件夹

进入并输入以下命令,查看子仓库链接:
cd riscv-gnu-toolchain
cat .gitmodules
如下
找到我们需要的spike \pk仓:

进入riscv-gun-toolchain中会发现包内已经有这spike、pk两个文件夹了,但因为刚才只下载了主仓库,实际上这两个文件夹都是空的,现在重下下载和替换:
spike下载
sudo git clone https://github.com/riscv-software-src/riscv-isa-sim.git
下载下来的文件夹是riscv-isa-sim,用来替换掉空的spike文件夹:
sudo rm -rf spike
sudo mv riscv-isa-sim spike

pk下载
sudo git clone https://github.com/riscv-software-src/riscv-pk.git
下载下来的是riscv-pk,同样替换空的pk文件夹:
sudo rm -rf pk
sudo mv riscv-pk pk

下载需要使用的工具包:
sudo apt-get install autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev
我这里是已经下载过一次了,所以都提示是否最新,第一次下载需要点时间

环境配置
用如下命令打开并配置运行环境:
vim ~/.bashrc
export RISCV="/home/long/RISCV/riscv"
export PATH=$RISCV/bin:$PATH
如图:

然后:
source ~/.bashrc
编译riscv-gnu-toolchain:
在riscv-gnu-toolchain文件夹内创建一个编译文件夹:
sudo mkdir build
cd build/
构建同时支持32位和64位的交叉编译器,执行
../configure --prefix=/home/long/RISCV/riscv --enable-multilib
#注意--prefix后面的路径匹配,非root账户加上sudo
配置好应该是这样的:

接下来进行riscv-gnu-toolchain的编译:
sudo make linux -j12

#此处的12指的是我的虚拟机系统有12个核心,可以改成你自己的核心数,大了没关系,他会默认按照最大的核心数进行编译,但是小了就只有12个核心在工作了
接下来就是漫长的编译过程了,预计需要1h,耐心等待吧,核心越多编译时间越短
编译过程中物理机占用也是很大的:

**补充:
构建64位的交叉编译器,执行
./configure --prefix=/opt/riscv
构建32位的交叉编译器,执行
./configure --prefix=/opt/riscv --with-arch=rv32gc --with-abi=ilp32d
编译完成后,用如下命令验证编译是否成功:
riscv64-unknown-linux-gnu-gcc
如下所示便是编译成功了

二、编译安装spike
前面已经同步克隆了spike,这里我们就可以直接编译了,进入到
riscv-gnu-toolchain/spike路径下,安装需要的工具包:
sudo apt-get install device-tree-compiler

创建编译的build文件夹:
sudo mkdir build cd build
配置编译环境:
../configure --prefix=/home/long/RISCV/riscv/spike
#注意--prefix后面的路径匹配,非root账户加上sudo

编译
sudo make -j12
这个编译相对较快,几分钟吧
编译成功后安装:
sudo make install


当你看到那个done时,带边安装成功了
配置spike命令:
vim ~/.bashrc
export SPIKE="/home/long/RISCV/riscv/spike"
export PATH=$SPIKE/bin:$PATH

# 退出保存后,重新引用修改共的 .bashrc
source ~/.bashrc
运行检查spike:
spike

至此,spike编译安装完成
三、编译安装pk
pk的编译安装和spike完全一样,只是路径问题需要注意,这里简略:
mkdir build
cd build
../configure --prefix=/home/long/RISCV/riscv/spike --host=riscv64-unknown-elf --with-arch=rv64gc_zifencei # 需要加上 zifencei 扩展
sudo make -j12
sudo make install
配置pk命令:
vim ~/.bashrc
export SPIKE="/home/long/RISCV/riscv/spike/pk"
export PATH=$SPIKE/riscv64-unknown-elf/bin:$PATH
退出保存后,重新引用修改共的 .bashrc
source ~/.bashrc
至此,riscv-gnu-toolchain工具链和模拟器安装就完成了,下一篇介绍怎么编译OpenCV 和MNN
参考文献:
VisionFive 2 机器视觉入门——温柔的接触器Moly # VisionFive 2 机器视觉入门 1: 环境准备-赛昉科技-芯查查