参考:
[1]https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html
[2]https://github.com/riscv/riscv-gnu-toolchain
[3]https://zhuanlan.zhihu.com/p/258394849
STEP 1 虚拟机与需要预先安装的库
准备材料:window10宿主机+virtualbox+ubuntu18.04LTS
从官网或镜像站得到ubuntu18.04LTS的iso,双击打开,这样盘片就在虚拟光驱中了。
例行公事安装虚拟机即可。安装完成后要求重启,进入开始界面后屏幕下方下面有一行小字,提醒要按回车才能开始重启。
重启后,virtualbox上方设备一栏里,有“安装增强功能”的选项。在点击之前,最好先按Ctrl+Alt+T打开终端,并输入:
sudo apt install build-essential
这一步是因为增强功能需要编译内核模块,所以得预先安装必要的工具。然后点击设备一栏里的“共享粘贴板”,选择“双向”,这样就可以在宿主机和虚拟机之间复制粘贴文本了。注意,Linux终端中的复制/粘贴不是Ctrl+C/V,而是Ctrl/Shift+insert。
在正式开始配置工具链和qemu等之前,需要先安装以下一些库:
sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev libglib2.0-dev libfdt-dev libpixman-1-dev libncurses5-dev libncursesw5-dev
至此虚拟机的准备完成。
STEP 2 riscv-gnu-toolchain
首先需要准备git工具。
sudo apt install git
接下来设置git的最大缓存。
sudo git config --global http.postBuffer 5242880000
这一步很重要,否则会遇到RPC failed的问题,换言之下载的内容太大,缓存区装不下了。
在~目录下建立一个工作目录riscv64-linux,之后下载的toolchain,linux源码,qemu源码和busybox都放在这里。
mkdir riscv64-linux cd riscv64-linux
之后就可以git clone所需要的工具链了。这里采用国内的源。
git clone https://gitee.com/mirrors/riscv-gnu-toolchain
下载是采用递归下载的方式。toolchain中的qemu子模块没有国内镜像(默认从官网的源下载有可能失败且速度极慢)且不影响后续编译,所以把它删掉。
cd riscv-gnu-toolchain git rm qemu
正常来说,这一步之后就可以直接git submodule update了。但截至本文写作的前一天,update时会遇到这样的问题:riscv-gcc的update失败,报错显示server does not allow request for unadvertised object.经过观察,发现后面匹配的commit号是gitee上整个riscv-gnu-toolchain项目的最后一次提交,怀疑是服务端的问题。因此尝试使用其他方法来解决,通过更改.gitmodules的方法来改变获取riscv-gcc的源。这一步换到github上的源,经过尝试没有问题。
vi .gitmodules
找到[submodule]riscv-gcc,将url改为https://github.com/riscv/riscv-gcc.git。按esc退出编辑模式,输入:wq保存退出。
之后就可以正常update了。
git submodule update --init --recursive
子模块下载完成之后,就可以开始安装toolchain了。指定安装目录为/opt/riscv64。
./configure --prefix=/opt/riscv64 sudo make linux -j $(nproc)
编译完成后,修改~目录下的.bashrc,以便将编译器路径加入环境变量中。
cd ~
vi .bashrc
在文件末尾插入一行:
export PATH="$PATH:/opt/riscv64/bin"
至此关于toolchain的工作完成。输入以下命令来查看所需的编译器是否可用:
riscv64-unknown-linux-gnu-gcc --version
如果显示出了一些关于该gcc的描述行,最后一行是版本号的话,那么表明安装成功。
后续如果要使用qemu+busybox运行一个riscv64版本的极小Linux内核,请参考https://zhuanlan.zhihu.com/p/258394849中的操作。截至本文发布当日,参考[3]中qemu,Linux和busybox的安装及后续操作经验证都是可用的。
将qemu添加到.bashrc中的操作同上。确保在家目录下输入vi .bashrc,并在文件末尾插入一行:
export PATH="$PATH:/opt/riscv64/bin:/opt/qemu/bin"
保存退出即可。