这是我在大学期间尝试去搭建的一个环境,因为大学期间看了《自己动手写CPU》这本书,照着上面写了一个MIPS架构的CPU,后来在老师的要求下又尝试去github上学习了解和并写了RISC-V架构的CPU,不过因为比较菜,当时因为CPU有问题而且想先尝试将准备好的代码在RISC-V指令集架构下跑起来,所以先搭建了这个环境用于代码的测试运行。现在将这个过程整理了一下写了出来。接下来所有的内容我都是在ubuntu上完成的,如有不同根据参考文献中的内容按需修改。
因为我们所有的操作都是在Linux系统下进行的,所以我们需要先准备一个Linux系统,(已经准备好Linux系统的小伙伴可以自行跳过)。这里我是用VMware虚拟机安装了Linux。
这里我就不做赘述了,不会安装的自己百度一下吧。或者可以看一下这个博主的文章:https://blog.csdn.net/hao5119266/article/details/89198275
首先我们需要先从Linux官网下载一个Linux系统,我之前选择的是ubuntu18.04.3的64位桌面版,接下来我们打开VMware选择“创建新的虚拟机”。
接下来选择典型即可,如果自身有其他的需求可选自定义配置。接下来注意选择自己之前已经下载好的Linux系统映像。
后面自行填写用户名、密码、虚拟机名称、位置,等设置信息。记住硬盘大小要多分配一点,我因为别的需求所以设置了60个G。最后完成并等待系统程序自行安装和运行。
最后安装完输入设置好的密码即可进入系统,记得更新你的Linux(update)。分别执行下面两行代码,记得更新之前先给ubuntu换源,18.04换源方法:https://blog.csdn.net/u012308586/article/details/102953882
sudo apt-get update
sudo apt-get upgrade
首先我们需要下载源代码,没有git的小伙伴先自行安装git(sudo apt install git),使用如下代码在你创建好的文件夹内下载代码。为了方便起见,我们将操作的文件夹都放在桌面上。
cd $HOME/Desktop
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
这是一个很漫长的过程,慢慢等吧,可以去干点别的。下载完之后安装依赖工具:
sudo 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-dev
依赖工具安装完毕,进入之前克隆完的文件夹“riscv-gnu-toolchain”然后设置config文件中的编译完成地址,并编译。我是设置将编译好的代码放在桌面上的riscv中。
cd $HOME/Desktop/riscv-gnu-toolchain
./configure --prefix=$HOME/Desktop/riscv
make -j $(nproc)
开始编译生成Newlib交叉编译。编译完之后,设置环境变量:
gedit $HOME/.profile
在文件的最后一行添加:
PATH="$HOME/Desktop/riscv/bin:$PATH"
保存文件后重载配置文件:
source $HOME/.profile
进入到刚才的文件夹再次设置config并编译生成linux交叉编译:
cd $HOME/Desktop/riscv-gnu-toolchain
./configure --prefix=$HOME/Desktop/riscv
make linux -j $(nproc)
编译之后我们会在桌面的riscv文件夹的bin中会看见如下文件:
输入如下代码安装所需依赖:
sudo apt install autoconf automake autotools-dev curl libglib2.0-dev libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev git pkg-config binutils-dev libboost-all-dev libssl-dev libpixman-1-dev libpython-dev python-pip python-capstone virtualenv libncurses5-dev libncursesw5-dev
我们先回到桌面并新建一个文件夹用来存放这些工具源码:
cd $HOME/Desktop
mkdir riscv64-linux
cd riscv64-linux
下载如下所需源码:
· QEMU · Linux · Busybox
git clone https://github.com/qemu/qemu
git clone https://github.com/torvalds/linux
git clone https://github.com/mirror/busybox.git
下载完代码后先进行QEMU部分的准备,依次输入一下代码:
cd $HOME/Desktop/riscv64-linux/qemu
git checkout v5.0.0
./configure --target-list=riscv64-softmmu
make -j $(nproc)
sudo make install
接下来完成linux部分的准备并编译kernel:
cd $HOME/Desktop/riscv64-linux/linux
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- defconfig
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- -j $(nproc)
编译成功后会看到最后一行的如下提示:
最后完成busybox部分:
cd $HOME/Desktop/riscv64-linux/busybox
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- defconfig
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- menuconfig
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- install
如果“make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- menuconfig”指令提示如下错误信息,说明你的终端太小了,把终端拉大或者最大化就可以了。
正确执行“make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- menuconfig”指令后会看到如下界面,先进入setting,再选择“Build static binary (no shared libs)”:
按照如下代码一步步来即可:
cd $HOME/Desktop/riscv64-linux
mkdir rootfs
cd rootfs
dd if=/dev/zero of=rootfs.img bs=1M count=50
mkfs.ext2 -L riscv-rootfs rootfs.img
sudo mkdir /mnt/rootfs
sudo mount rootfs.img /mnt/rootfs
sudo cp -ar …/busybox/_install/* /mnt/rootfs
sudo mkdir /mnt/rootfs/{dev,home,mnt,proc,sys,tmp,var}
sudo chown -R -h root:root /mnt/rootfs
输入如下代码检查状态,如图所示:
df /mnt/rootfs
mount | grep rootfs
sudo umount /mnt/rootfs
sudo rmdir /mnt/rootfs
进入主目录:
cd $HOME/Desktop/riscv64-linux
输入以下代码以启动qemu来运行linux(以下代码一次复制完全):
qemu-system-riscv64 -nographic -machine virt \
-kernel linux/arch/riscv/boot/Image \
-append “root=/dev/vda rw console=ttyS0” \
-drive file=rootfs/rootfs.img,format=raw,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-bios default
以上就是全部的内容,从VMware安装到虚拟机安装再到整个程序的下载、编译、运行。之前尝试过好多种方法,但因为各种软件的更新以及网上信息的不全或有误导致踩了无数的坑,去找了好多国外的网站,这似乎是一种比较好的解决方案。之后如果有时间会把busybear代替busybox的整个流程再写一遍,那个似乎弄出来最后的结果会更加完美。
《VM虚拟机下载及安装教程》
《ubuntu16.04和18.04更换国内源》
《从零开始配置risc-v交叉编译环境与工具链》
《RISC-V GNU Compiler Toolchain》
《Running 64- and 32-bit RISC-V Linux on QEMU》
《Failed to run Ubuntu/Debian on QEMU RISC-V》
《How to build Linux + OpenSBI for riscv-rust》
《busybear-linux》