基于Ubuntu的RISC-V工具链编译步骤

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


背景

最近在ubuntu的虚拟机里编译RiscV的项目,需要使用RiscV的交叉编译工具,所以去网上搜索了一些具体的使用方法,编译的具体步骤是很简单的,但是由于github上的源都在国外,所以在更新submodule的时候往往会卡死,或者超时错误等等,在这里耗费了几个小时,还是更新不了submodule。所以在gitee上找了一些可替换的代码源,总体来说也还是能编译生成工具链的。


1、先下载源码

 git clone https://github.com/riscv/riscv-gnu-toolchain
 cd 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

先下载源码并切换到该项目的根目录下,执行install指令,安装编译环境所需要的库。

2、更新submodule

在执行配置选项前需更改submodule的源,这样不必在此等待过长的时间,由于工具编译选项中集成了自动更新submodule的指令,无需用户再执行该指令了,但是这样也引入了新的问题,当用户手动去更新submodule后,执行make指令后,会提示操作错误,文件not empty错误,所以,这个本来方便用户使用的功能,在国内这种情况下,反而造成了更大的麻烦,下着下着就超时了。f**k。
所以在执行make前要将submodule的源更新为国内的替换源,请将以下内容替换掉原来的跟目录下的“.gitmodules”文件。

[submodule "riscv-binutils"]
	path = riscv-binutils
	url = https://gitee.com/mirrors/riscv-binutils-gdb.git
	branch = riscv-binutils-2.35
[submodule "riscv-gcc"]
	path = riscv-gcc
	url = https://gitee.com/mirrors/riscv-gcc.git
	branch = riscv-gcc-10.2.0
[submodule "glibc"]
	path = glibc
	url = https://gitee.com/mirrors/riscv-glibc.git
	branch = riscv-glibc-2.29
[submodule "riscv-dejagnu"]
	path = riscv-dejagnu
	url = https://gitee.com/mirrors/riscv-dejagnu.git
	branch = master
[submodule "newlib"]
	path = newlib
	url = https://gitee.com/mirrors/riscv-newlib.git
	branch = master
[submodule "riscv-gdb"]
	path = riscv-gdb
	url = https://gitee.com/mirrors/riscv-binutils-gdb.git
	branch = fsf-gdb-10.1-with-sim
[submodule "qemu"]
	path = qemu
	url = https://git.qemu.org/git/qemu.git
[submodule "musl"]
	path = musl
	url = git://git.musl-libc.org/musl
	branch = master
[submodule "spike"]
	path = spike
	url = https://github.com/riscv-software-src/riscv-isa-sim.git
	branch = master
[submodule "pk"]
	path = pk
	url = https://github.com/riscv-software-src/riscv-pk.git
	branch = master

3. 执行编译选项

./configure --prefix=${toolchain-output-path}
make
make linux
./configure 是配置toolchain的输出路径,这个可以根据自己的喜好更改路径。
make指令执行后是生成类似于riscv64-unknown-elf-gcc的bin文件,这个编译环境是裸编的,不引用linux内的库。
make linux执行后生成类似于riscv64-unknown-linux-gnu-gcc的bin文件,这个是编译linux内核用的,会调用linux内的库。
具体的使用方法,我后面会一点点更新,暂时先写个简单的流程吧。

总结

简短的做个总结,希望对一些像我这样的新手来说有帮助,不必在电脑前苦等多时,也希望感兴趣的同学一起讨论研究。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值