当前位置: 首页 > 工具软件 > GNU toolchain > 使用案例 >

riscv-gnu-toolchain工具链下载安装(unbentu)

杨乐
2023-12-01

一、安装依赖

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

二、下载riscv-gnu-toolchain

RISCV平台的C/C++交叉编译器
源代码地址:https://github.com/riscv/riscv-gnu-toolchain
riscv工具链整个工程太大,在github下载再递归下载子文件夹,以国内的网络很容易超时断开。一般去码云gitee上面找镜像文件
国内的镜像地址:

git clone https://gitee.com/mirrors/riscv-gnu-toolchain.git

几个riscv-*子模块的gitee镜像地址:

Submodule 'riscv-binutils' (https://gitee.com/mirrors/riscv-binutils-gdb.git) registered for path 'riscv-binutils'
Submodule 'riscv-dejagnu' (https://gitee.com/mirrors/riscv-dejagnu.git) registered for path 'riscv-dejagnu'
Submodule 'riscv-gcc' (https://gitee.com/mirrors/riscv-gcc.git) registered for path 'riscv-gcc'
Submodule 'riscv-gdb' (https://gitee.com/mirrors/riscv-binutils-gdb.git) registered for path 'riscv-gdb'
Submodule 'riscv-glibc' (https://gitee.com/mirrors/riscv-glibc.git) registered for path 'riscv-glibc'
Submodule 'riscv-newlib' (https://gitee.com/mirrors/riscv-newlib.git) registered for path 'riscv-newlib'

一共有7个submoule,先处理riscv-**开头的几个
比如:riscv-newlib,在/…/riscv-gnu-toolchain目录下

git clone --recursive https://gitee.com/mirrors/riscv-newlib.git 

其他几个riscv-*的模块参照此方法自行修改

PS:.riscv-binutils与riscv-gdb来自于同一个仓库,且与本地要求的文件夹名称不同,需用命令指定本地名,riscv-gdb同理。

git clone --recursive https://gitee.com/mirrors/riscv-binutils-gdb.git riscv-binutils

三、编译安装riscv-gnu-toolchain

进入到riscv-gnu-toolchain的文件目录下,执行

cd riscv-gnu-toolchian
./configure --prefix=/opt/riscv
//#--prefix后面是你想要安装的位置,opt文件夹下默认是应用程序
sudo make -jN //#考虑到opt文件夹创建文件和删除文件需要用root权限

编译大概一个小时。
扩展内容:
上述编译会默认生成riscv64-unknown-linux-gnu-gcc版本的交叉编译器,但我们需要riscv64-unknown-elf-gcc。
riscv gcc可以编译成以下几个版本:

#riscv32-unknown-elf-gcc
#这是Newlib交叉编译器,针对riscv32架构
./configure --prefix=/opt/riscv32 --with-arch=rv32imc --with-abi=xxx
make
#--mabi可以选择如下:
#ilp32
#ilp32f
#ilp32d

#riscv64-unknown-elf-gcc
#这是Newlib交叉编译器,针对riscv64架构,编译riscv-tools需要用到
#默认64位 因此可以不要后面的内容
./configure --prefix=/opt/riscv64
make


#riscv32-unknown-linux-gnu-gcc
#这是Linux交叉编译器,使用的C运行库为linux中的标准glibc
./configure --prefix=/opt/riscv --with-arch=rv32gc --with-abi=ilp32d
make linux

#riscv64-unknown-linux-gnu-gcc
#riscv64-multilib-elf-gcc
#riscv64-liunx-multilib-gcc

四、添加环境变量

最后添加环境变量,才能在任何路径下使用该应用/软件。

vim ~/.bashrc		//#然后添加语句
export PATH=/opt/riscv/bin:$PATH	//#保存并更新环境
:wq
source ~/.bashrc

五、测试安装是否成功

方法一:执行下面命令,出现gcc的版本号

riscv64-unknown-elf-gcc --version

方法二:去到一个不重要的路径新建c程序,使用交叉编译器编译。

echo -e '#include <stdio.h>\n int main(void) { printf("Helloworld!\\n"); return 0; }' > hello.c
riscv64-unknown-elf-gcc -o hello hello.c
#或者riscv64-unknown-linux-gnu-gcc -o hello hello.c

如果出现hello可执行文件即为成功。
参考文件:
https://blog.csdn.net/weixin_48156266/article/details/123663977
https://blog.csdn.net/qq_35990574/article/details/110006307
https://blog.csdn.net/shensen0304/article/details/95504258

 类似资料: