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