GCC编译工具链——RISCV扩展指令集(一)

RISCV-GNU-toolchain是编译工具链,简单来说其能够将我们熟悉的高级程序语言“翻译”成机器语言,这个翻译的过程这里就不再赘述,因为涉及到编译器原理部分的知识,有兴趣的可以看一下《深入分析gcc》,王亚刚的。

由于现在最新的RISCV-GNU-toolchain已经把K指令分支并进了主要分支里面,从代码修改的角度不需要任何修改就能实现加解密指令测试。但这里介绍使用.insn指令模板进行修改的方法,明白如何增加或修改指令。

第一步需要获取Gcc编译链,

Git clone https://gitcode.net/mirrors/riscv/riscv-gnu-toolchain.git

内部有安装步骤,但是为了详细这里就冗余一下

Ubuntu:

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 ninja-build

Cenos/feroda:

sudo yum install autoconf automake python3 libmpc-devel mpfr-devel gmp-devel gawk bison flex texinfo patchutils gcc gcc-c++ zlib-devel expat-devel

安装依赖后,两种方式一种是命令

git submodule update --init –recursive

该命令会把所有的分支拉进来,但是不会生成编译工具链

第二种就是直接

./configure --prefix=/opt/riscv
make

这个官方的安装就是默认newlib的,其他的linux或者embbed这里不一样的就是依赖库的问题,工具链在编译程序语言的时候会调用不同的库进行。生成的编译工具链会放到/opt/riscv路径下。(–march=)和(–mabi=)表示编译选项,由于RISC-V的指令集是模块化的指令集,因此在为目标RISC-V平台进行交叉编译之时,需要通过选项指定目标RISC-V平台所支持的模块化指令集组合。-march=的选项有rv32i[m][a][f[d]][c], rv32g[c], rv64i[m][a][f[d]][c], rv64g[c],可以根据自己的需要选择,–mabi= 有ilp32, ilp32f, ilp32d,lp64, lp64f, lp64d,ilp32就是32位,lp64就是64位。–mcmodel=这个选项有兴趣的可以自己查查相关资料。这里强调一样,不要测试Make 之后会需要一比较长的时间。

编译工具链安装完成后可以进行测试,推荐在bashrc文件下添加export PATH=/opt/riscv/bin:$PATH后,进行测试,这样子可以减少代码量。

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

这里就是最简单的测试了helloworld程序,表示你的工具链已经安装成功,但是不一定能读出其他指令。

更全面的测试你的指令集是否安装成功。

./configure –prefix=/opt/riscv
make linux
make report-linux SIM=qemu

你可能感兴趣的:(linux,risc-v)