RISC-V 环境搭建考虑到目前国内网络上RISC-V环境搭建的成体系资料太少。于是记录将我自己的环境搭建经验分享出来，同时也为我自己下次重新配置环境做个备份。什么是RISC-VRISC-V，是一代RISC指令级架构，与Intel的x86以及AMD指令集处于同一层级，不同的是RISC架构是简单指令集，x86与amd是复杂指令集。RISC-V指令集的设计与实现都遵从所谓“大道至简”的思想，指令条数较少，性能也相对较高。但是目前使用RISC-V架构的计算机很少，貌似只有PicoRio。所以目前博主这种普通老百姓只能通过搭建RISC-V的模拟环境进行RISC-V（下称RV）的相关开发。环境搭建环境宿主机要求博主使用的得阿里云学生机，1核2G，40G硬盘。服务器上还部署着博客以及jenkins，jupyter等，因此有些不够用。大致要求：2~4G内存，因为如果要运行虚拟机，需要给虚拟机分配部分内存。30G硬盘空间，在环境配置过程后，大概会有30GB左右的代码、中间文件，二进制文件等。以上两项就是博主在搭建环境时发现的主要痛点。搭建RV环境的清单riscv-gnu-toolchain 交叉编译工具链，后续很多东西的基础Simulator 仿真器，仿真运行RV指令集的程序pkspikeEmulator 虚拟机，运行RV指令集操作系统，再运行程序QEMUkerneldriveRISC-V GNU Toolchain获取源码：GitHub上RV官方的仓库：RISC-V GNU ToolchainGitee上每天同步的镜像仓库：Mirrors RISC-V GNU Toolchain以上两个仓库都可，但是由于国内，GitHub仓库拉取速度实在拉胯，博主多次尝试，最终选用了Gitee镜像。首先克隆仓库代码：git clone https://gitee.com/mirrors/riscv-gnu-toolchain.git cd riscv-gnu-toolchain安装依赖工具Ubuntusudo apt-get 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-devFedora/CentOS/RHEL OSsudo yum install autoconf automake python3 libmpc-devel mpfr-devel gmp-devel gawk bison flex texinfo patchutils gcc gcc-c++ zlib-devel expat-develArch Linuxpacman -Syyu autoconf automake curl python3 mpc mpfr gmp gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib expatOS Xbrew install python3 gawk gnu-sed gmp mpfr libmpc isl zlib expat编译RV GCC这里有两种编译选项，生成的目标文件分别是riscv64-unknown-elf-gcc和riscv64-unknown-linux-gnu-gcc，个人建议选择前者（或者都编译），因为后面编译Simulator需要用到，用另一个有报错的可能。编译riscv64-unknown-elf-gcc：./configure --prefix=/opt/riscv sudo make编译riscv64-unknown-linux-gnu-gcc:./configure --prefix=/opt/riscv sudo make linux同时编译riscv64-unknown-elf-gcc和riscv64-unknown-linux-gnu-gcc:./configure --prefix=/opt/riscv --enable-multilib make # or make linux这两个gcc的区别在于，elf-gcc是静态链接，linux-gnu-gcc是动态链接。添加环境变量：将以下代码追加入/etc/profile文件中RISCV=/opt/riscv export RISCV export PATH=$PATH:${RISCV}/bin保存后输入source /etc/profile更新环境变量输入riscv64-unknown-elf-gcc -v检验环境变量出现以上内容说明环境变量生效RISC-V运行环境Simulator编译安装pk:pk是一个RISC-V代理内核和引导加载程序项目代码：riscv-pk克隆代码 略编译mkdir build cd build ../configure --prefix=$RISCV --host=riscv64-unknown-elf #or #../configure --prefix=$RISCV --host=riscv64-unknown-linux-gnu make [sudo] make install编译安装spike：克隆代码 略编译# Ubuntu apt-get install device-tree-compiler # centOS yum install dtc mkdir build cd build ../configure --prefix=$RISCV make [sudo] make install此处和官方仓库下的编译方法有些许不同，因为博主使用centOS，但是官方仓库下没有提到yum包管理器中device-tree-compiler的软件包名。注意，如果用riscv64-unknown-linux-gnu-gcc编译，运行会报错：bbl loader not a statically linked ELF program运行一个简单的C程序riscv64-unknown-elf-gcc -o hello hello.c spike pk hellodebug操作因为该文只是描述环境搭建，所以使用部分请看之后的文章Emulator下载安装QEMU注意要点：qemu-system-riscv64 和 qemu-riscv64 的区别qemu-system-riscv64是系统模拟器，通过它来模拟整个操作系统，相当于运行一个虚拟机，就我目前的需求，用不到qemu-riscv64是系统调用模拟器，他不需要开一个新的虚拟机，仅能运行二进制文件，但是简单高效通过git拉取代码:可以是可以，但是巨慢，多次尝试失败，遂放弃git clone https://git.qemu.org/git/qemu.git cd qemu git submodule init git submodule update --recursive直接下载源码wget https://download.qemu.org/qemu-5.2.0.tar.xz tar xvJf qemu-5.2.0.tar.xz cd qemu-5.2.0编译./configure --target-list=riscv64-linux-user --prefix=/opt/qemu make -j4 sudo make installriscv64-linux-user为用户模式，可以运行基于riscv指令集编译的程序文件,softmmu为镜像模拟器，可以运行基于riscv指令集编译的linux镜像导出 qemu 的安装目录和为添加环境变量一样QEMU=/opt/qemu export PATH=$PATH:${QEMU}/bin验证安装是否正确qemu-system-riscv64 --version出现类似如下输出表示 qemu 工作正常QEMU emulator version 5.1.0 Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers为qemu-system-riscv64下载虚拟机系统Fedora镜像获取：fedoraproject下载的时候注意两个文件的版本匹配解压镜像：unxz Fedora-Minimal-Rawhide-*-sda.raw.xz制作启动模拟器脚本（不做也行，博主就是觉得太长了，懒得打，调参也不好调）#! /bin/bash qemu-system-riscv64 \ -nographic \ -machine virt \ -smp 4 \ # -m 内存大小 -m 512M \ # 改成下载的文件名 -kernel Fedora-Developer-Rawhide-20200108.n.0-fw_payload-uboot-qemu-virt-smode.elf \ -bios none \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-rng-device,rng=rng0 \ -device virtio-blk-device,drive=hd0 \ # 改成下载的文件名 -drive file=Fedora-Developer-Rawhide-20200108.n.0-sda.raw,format=raw,id=hd0 \ -device virtio-net-device,netdev=usernet \ -netdev user,id=usernet,hostfwd=tcp::10000-:22参考链接：Mirrors RISC-V GNU ToolchainQEMURISC-V GNU Toolchainriscv-pk知乎-搭建RISC-V编译环境与运行环境在 QEMU 上运行 RISC-V 64 位版本的 Linuxrisc-v gcc 工具链编译 与 qemu 虚拟机快速搭建具备一个RISCV开发环境及其qemu仿真（全）