RISCV基础开发

2021年7月30日 19篇RISCV基础开发已关闭评论 1,860
SylixOS

RISCV基础开发(十九)

QEMU OpenSBI 裸机开发之定时器中断 1. 中断处理准备 在s模式下的中断设置和处理逻辑和原来的基本一致,首先在entry.S中添加中断处理汇编入口,如下所示: # # supervisor...
阅读全文
SylixOS

RISCV基础开发(十八)

QEMU OpenSBI 裸机开发之格式化打印 格式化打印代码也跟之前的基本一样,就是将字符输出函数从原来的直接操作16550寄存器改为通过SBI接口进行字符输出,其他的都一样,将printf函数定义...
阅读全文
SylixOS

RISCV基础开发(十七)

QEMU OpenSBI 裸机开发之字符打印 1. 编译OpenSBI镜像 前面的章节我们是直接从m模式开发的裸机程序,从本章节开始我们来学习在已经有OpenSBI的基础下进行裸机开发。首先需要下载O...
阅读全文
SylixOS

RISCV基础开发(十六)

QEMU裸机开发之S模式定时器中断 在本章节中我们来学习如何在s模式下使用定时器中断,我们首先将上一章节中的ecall调用定义为更新定时器比较寄存器的调用,因为在s模式我们是不能访问定时器比较寄存器的...
阅读全文
SylixOS

RISCV基础开发(十五)

QEMU裸机开发之S模式ecall调用 我们知道有些寄存器只能在m模式下设置和访问,如果s模式想要使用某个功能,只能先回到m模式然后再进行相应的设置。OpenSBI定义了s模式和m模式之间功能调用的接...
阅读全文
SylixOS

RISCV基础开发(十四)

QEMU裸机开发之S模式软中断 S模式下的软中断我们借助m模式下的定时器中断进行触发,在m模式下设置sip中的soft位域就可以触发S模式下的软中断,如下所示。 void machine_trap(v...
阅读全文
SylixOS

RISCV基础开发(十三)

QEMU裸机开发之S模式中断设置 1. 中断初始化 S模式下的中断初始化和M模式基本类似,只不过操作的是S模式下的CSR寄存器,如下所示。 static void supervisor_trap_in...
阅读全文
SylixOS

RISCV基础开发(十二)

QEMU裸机开发之M模式切换到S模式 从m模式切换到s模式下的代码其实也不是很多,主要是设置"mstatus"和“mepc”寄存器。其实从高特权级别切换到低特权级的思路在各个架构下都差不多,从低级别到...
阅读全文
SylixOS

RISCV基础开发(十一)

QEMU裸机开发之M模式定时器中断 定时器相关的寄存器也是定义在clint中的,再来看下寄存器映射,如下所示。 同样的我们只关心第一个核的寄存器,和定时器相关的总共就两个寄存器,“mtime”寄存器相...
阅读全文
SylixOS

RISCV基础开发(十)

QEMU裸机开发之完善M模式中断处理 前面的章节只对m模式下的中断和异常做了最简单的处理,也就是打印表明确实产生了中断,本章节我们来继续完善“machine_trap”处理函数,如下所示。 #incl...
阅读全文
SylixOS

RISCV基础开发(九)

QEMU裸机开发之M模式核间中断 QEMU的virt平台基本是参考SIFIVE的U540平台设计的,所以其寄存器大部分都和U540中的一样,我们再来看下CLINT中定义的核间中断设置寄存器,如下所示。...
阅读全文
SylixOS

RISCV基础开发(八)

QEMU裸机开发之M模式中断设置 1. CSR寄存器操作 从本章节开始我们需要对CSR相关寄存器设置,所以将这些寄存器的读写访问封装成一些接口定义在“csr.h”中,这些接口基本都参考自xv6,如下所...
阅读全文