山东大学RISC-V公共开放平台开发记录
山东大学RISC-V公共开放平台开发记录
3.10-3.18
对RISC-V的初步了解,学习使用RIsc-V的编译和模拟,并尝试用risc -tool -chain做一些简单的编译和模拟
RISC-V的主要技术特性:
- 将ISA分离为一个小的基本ISA以及可选的扩展。
- 支持32位和64位地址空间。
- 使ISA扩展更为容易,包括紧密耦合以及松弛耦合的协处理器。
- 支持可变长的指令扩展。
- 提供有效率的现代标准的硬件支持,包括IEEE-754 2008浮点数标准以及C11和C++11语言标准。
- 用户ISA以及特权架构相互分离。
RISC-V包括三种基本的ISA:RV32I,RV32E以及RV64I。RV64I是64位地址空间标准的ISA,RV32I是32位地址空间标准的ISA,RV32E是RV32I的变种,寄存器的数量更少,面向一些深度定制的简单嵌入式系统。
RISC-V GCC工具链种类
RISC-V GCC工具链与普通的GCC工具链基本相同,用户可以遵照开源的riscv-gnu-toolchain项目(请在Github中搜索riscv-gnu-toolchain)中的说明自行生成全套的GCC工具链。
由于GCC工具链支持各种不同的处理器架构,因此不同处理器架构的GCC工具链会有不同的命名。遵循GCC工具链的命名规则,当前RISC-V GCC工具链有如下几个版本:
l 以“riscv64-unknown-linux-gnu-”为前缀的版本,譬如riscv64-unknown-linux-gnu-gcc、riscv64-unknown-linux-gnu-gdb、riscv64-unknown-linux-gnu-ar等。“riscv64-unknown-linux-gnu-”前缀表示该版本的工具链是64位架构的Linux版本工具链。注意:此Linux不是指当前版本工具链一定要运行在Linux操作系统的电脑上,此Linux是指该GCC工具链会使用Linux的Glibc作为C运行库。同理,“riscv32-unknown-linux-gnu-”前缀的版本则是32位架构。注意:此处的前缀riscv64(还有riscv32的版本)与运行在64位或者32位电脑上毫无关系,此处的64和32是指如果没有通过-march和-mabi选项指定RISC-V架构的位宽,默认将会按照64位还是32位的RISC-V架构来编译程序。有关-march和-mabi选项的含义,请参见第3节。
l 以“riscv64-unknown-elf-”为前缀的版本,则表示该版本为非Linux(Non-linux)版本的工具链。注意:此Non-Linux不是指当前版本工具链一定不能运行在Linux操作系统的电脑上,此Non-Linux是指该GCC工具链会使用newlib作为C运行库。同上理,此处的前缀riscv64(还有riscv32的版本)与运行在64位或者32位电脑上毫无关系,此处的64和32是指如果没有通过-march和-mabi选项指定RISC-V架构的位宽,默认将会按照64位还是32位的RISC-V架构来编译程序。有关-march和-mabi选项的含义,请参见第3节。
l 以“riscv-none-embed-”为前缀的版本,则表示是最新为裸机(bare-metal)嵌入式系统而生成的交叉编译工具链,所谓裸机(bare-metal)是嵌入式领域的一个常见形态,表示不运行操作系统的系统。该版本使用新版本的newlib作为C运行库,并且支持newlib-nano,能够为嵌入式系统生成更加优化的代码体积(Code Size)。开源的蜂鸟E203 MCU系统是典型的嵌入式系统,因此将使用“riscv-none-embed-”为前缀的版本作为RISC-V GCC交叉工具链。注意:
此版本编译器由于使用newlib和newlib-nano作为C运行库,所以必须对 newlib底层的桩函数进行移植,否则无法正常使用调用底层桩函数的C函数( 譬如printf会调用write桩函数)
调用底层桩函数的C函数( 譬如printf会调用write桩函数)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sZveaKX6-1654330819963)(C:\Users\Jeremiah\AppData\Roaming\Typora\typora-user-images\image-20220603213232059.png)]
更多推荐


所有评论(0)