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

Ubuntu RISC-V 编译环境搭建 芯来RISCV Nuclei GNU Tool chain

宇文飞翮
2023-12-01

一、操作步骤

下载地址

https://www.nucleisys.com/download.php

我的电脑是ubuntu20.04 下载Nuclei GNU Tool chain ubuntu x86-64版本

解压缩

tar jxvf nuclei_riscv_newlibc_prebuilt_linux64_2022.08.tar.bz2

然后要设置一下环境变量才能在任何路径下使用该应用/软件

这个下载的工具链压缩包 解压缩后的文件名是 gcc 找到gcc里面的bin文件夹可以看到所有的应用程序都在这个文件夹里,那么这个文件夹地址就是要设置的环境变量地址

可以在终端打开这个bin文件夹使用 pwd命令查看地址

sudo vim /etc/profile   

export PATH="/home/liwanwan/gcc/bin:$PATH"    //改成自己文件的地址,添加环境变量
:wq     //保存并退出

source /etc/profile  //使环境变量生效
echo $PATH          //查看有没有成功添加环境变量

二、测试安装是否成功

1. 编写c测试程序

随便写一个c程序测试一下是否能编译成功

mkdir test      
cd test    
vim mul.c   //建立一个名为mul.c的c文件

 这是一个名为dmul的函数,它有两个参数,均为double类型

#include<stdio.h>

double dmul(double a, double b)
{
        return b*a;
}

2. 编译执行

使用-march=rv64imafdc和-mabi=lp64d的组合进行编译

riscv-nuclei-elf-gcc mul.c -march=rv64imafdc -mabi=lp64d -o- -S -O3

生成的汇编代码如下:

dmul:
	fmul.d	fa0,fa1,fa0
	ret

从中可以看出,对于浮点数的乘法操作,直接使用RISC-V的fuml.d指令进行支持,且函数两个double类型的参数直接使用浮点数通用寄存器(fa0和fa1)进行传递,这是因为:

-march选项指明了目标平台支持的模块化指令子集为imafdc,其中包含了F和D指令子集,即支持单精度浮点数指令和双精度浮点数指令,因此可以使用RISCV的浮点数指令来支持对浮点数的操作;

-mapi选项后缀“d”,表示当浮点数作为函数的参数进行传递时,无论是单精度浮点数还是双精度浮点数,均可直接通过寄存器进行传递

-march和-mabi的选项值要根据目标平台的需求来定

 类似资料: