其他分享
首页 > 其他分享> > 2021-09-20

2021-09-20

作者:互联网

搭建RISC_V交叉编译环境

文章目录


前言

本人历经三天时间在中秋节假期前夕成功搭建了RISC_V的交叉编译环境,中间踩了很多坑,遇到了很多bug,看了网上好多相关的教程,结果在自己的电脑都失败了,在此记录一下,希望能帮助到未来和我一样零基础的小白,最后祝大家中秋节快乐~~


一、搭建riscv-tools

我的实验环境是vmware上的虚拟机,镜像是ubuntu-20.04.1-desktop-amd64.iso。这个大家可以自行去官网下载,这里就不一一介绍了。这里注意一个关键的点,你最好给你的虚拟机硬盘分配较大的容量,我认为最好在50G以上,当然如果你仅需要搭建编译环境20G+就够了,如果你的硬盘容量不够我在第四步搭建qemu的时候会讲解虚拟机扩展硬盘容量的方法,因为我当时也遇到了相同的问题!
首先我参考的是这个(https://blog.csdn.net/shensen0304/article/details/95504258),第一步是将github上的riscv-tools文件夹拷入到您的ubuntu上,然后再拷贝它的子文件夹,有两种方式,第一种是在命令行通过git clone的方式,第二种我给那些网速不好或者不能翻墙的老铁推荐https://gitee.com/yushulx,虽然我记得好像riscv-tools不需要这样,因为像我这种垃圾网速的都能拷贝下来,记得试了三次,但对于后面的risc-toolchain、spike、qemu很实用,你们去这个gitee上直接下载下来然后拉到你的虚拟机上就行。
git clone的相关代码如下:

cd /home/suiqian
sudo mkdir riscv
sudo git clone https://github.com/riscv/riscv-tools.git
cd riscv-tools
sudo git submodule update --init --recursive

注意的几点也是我犯的错误,搞了我很久:
1.千万不要直接去github上下载下来然后拉到你的虚拟机上,然后再去github上把子文件夹下下来再拷进去,然后自以为是的觉得我都手动搞定了,结果一编译,一大堆问题。。。。。。。
2.git clone的时候会失败很多次,我的是,因为我用的是翻墙软件垃圾,经常会挂断,失败之后,你要sudo rm -rf riscv-tools,之后再重复git命令,对于文件夹较小的,所试几次就成功了。。。。。。
3.对于网速实在很差的,你们去gitee上拷完之后,怎么弄到ubuntu上去呢,一种方式就是在ubuntu上下载,第二种是安装vmware tools,安完之后就可以手动拉进去了,第三种是vmware设置那里共享文件夹,找到你windows的共享目录,从共享目录中拉进去。。。。。。

二、搭建riscv-toolchain

第二步是搭建riscv-toolchain,还是那些问题,网速好的直接git,不好的去gitee上拷。
1.下载文件

git clone --recursive https://github.com/riscv/riscv-gnu-toolchain

我是将gitee上的riscv-gnu-toolchain文件夹拷贝下来,放到ubuntu里的riscv文件夹里去的。
2.安装依赖

cd riscv-gnu-toolchain
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
sudo apt-get install libnewlib-dev

注意第三个,由于第三个没安,我报错了N次 草。。。
3.安装

INSTALL_PATH='/opt/riscv'
NUM_CPU=8

export PATH=$PATH:$INSTALL_PATH/BIN
./configure --prefix=$INSTALL_PATH
sudo make -j$NUM_CPU

这一步需要很久,我大概make了一个半小时。。。
4.修改环境变量

sudo gedit ~/.bashrc

在其底部添加如下代码,这样你以后就不用手动在命令行去写了。

export PATH=/opt/riscv/bin:$PATH

在这里插入图片描述

5.编译测试
写一个hello world,然后进入代码文件夹里编译测试

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

在这里插入图片描述

注意:
后面我发现我要跑的代码是基于32位riscv工具链的,因此我又加安了riscv32的,也能编译成功,这个好像与64之间不影响,但是我的spike受影响。

三、搭建spike及pk

riscv-tools安装中已包含了Spike和pk的相关文件。首先安装Spike(顺序不影响)。
在riscv-isa-sim路径下打开终端:

apt-get install device-tree-compiler
 mkdir build
 cd build
 ../configure --prefix=$RISCV
 make
 sudo make install

这一步很顺利,后面我按照同样的方法cd riscv-pk文件见里去失败了。。。
我记得最后也编译成功了,但是报了个错:

gcc: error: unrecognized argument in option ‘-mcmodel=medany’
gcc: note: valid arguments to ‘-mcmodel=’ are: 32 kernel large medium small; did you mean ‘medium’?
Makefile:332: recipe for target 'file.o' failed
make: *** [file.o] Error 1

大家可以去参考一下(http://yolo.org.cn/iblog/details/16)的解决方法,但我最后还是不成功。。。

我最后是通过另一个博主(https://www.codeleading.com/article/44825286911/)解决的。

su    #切换到root
export RISCV=/opt/riscv 
./build-spike-pk.sh
Installing project riscv-pk
。。。。。。
RISC-V Toolchain installation completed!

在这里插入图片描述

四、搭建qemu

在搭建qemu的时候我突然发现我的硬盘容量仅剩1G多一点了,这对于qemu肯定是不够的,我选择扩充了硬盘容量。
首先你去下面这里扩展磁盘容量,我扩展到了80G。
在这里插入图片描述
扩展完成之后我又发现,我的硬盘容量那里没变,草,还是那个数。。。现在这个图变了,当时还是40G。。。
在这里插入图片描述
我的解决方法是下个Gparted工具:

sudo apt-get install Gparted*

之后再Show Applications那里打开该软件:
在这里插入图片描述
首先在unallocated那里new一个新的区域,然后将其挂载(format to)到/dev/sda目录下,然后再挂载到/dev/sda5目录下,可以通过左右拉顶上那个进度条来控制,具体你们去试试就知道了。。。
扩展完之后,我又直接进到qemu那个文件夹下安装编译依然出错,草。。。
我的解决方法是把原来那个qemu文件夹删除了,https://download.qemu.org/zheli
去这个网址下了个qemu-6.1.0,然后按照以下步骤安装编译:

sudo mv qemu-6.1.0.tar.xz /home/suiqian/riscv/riscv-tools/riscv-gnu-toolchain
sudo tar qemu-6.1.0.tar.xz
cd qemu-6.1.0
sudo mkdir build
cd build
./configure 
sudo make
sudo make install

大功告成:
在这里插入图片描述
注意可能遇到的问题:
你们在./configure那步可能会遇到好多问题,比如Cannot find Ninja,没有python了等等,一个个安装就好,系统都会有提示安装的命令。。。

五、编译、调试及运行

标签:09,20,riscv,tools,sudo,编译,2021,qemu,搭建
来源: https://blog.csdn.net/qq_40836704/article/details/120391584