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,如下所...
阅读全文
SylixOS

RISCV基础开发(七)

QEMU裸机开发之格式化打印 在前面的程序中我们实现了简单的字符串输出函数,在实际使用时,我们还需要进行格式化打印,比如打印某个变量的值,按十进制或者十六进制打印等等,本章节我们在“uart.c”中实...
阅读全文
SylixOS

RISCV基础开发(六)

QEMU裸机开发之打印字符 1.文件结构总览 先整体看下本章节裸机程序的工程文件组成,如下图所示。 address.h:主要定义了一些外设寄存器的基址还有内存基址等。 entry.S:入口文件,主要设...
阅读全文
SylixOS

RISCV基础开发(五)

QEMU裸机开发之环境搭建 1.概述 前面我们介绍了RISCV架构的一些基础知识,从本章节开始我们通过在QEMU下编写裸机程序来进一步的学习RISCV架构,旨在通过实操来掌握相关知识点。 运行环境我是...
阅读全文
SylixOS

RISCV基础开发(四)

SBI规范 1. 简介 SBI的全称为Supervisor Binary Interface,是m模式下的服务对上提供的统一接口。比如设置timer、发送核间中断等,这些服务通过SBI接口进行封装,这...
阅读全文
SylixOS

RISCV基础开发(三)

中断和异常处理 在RISCV架构设计中,有一系列的控制和状态寄存器( Control and Status Registers)简称CSR,在三种特权级别下都有其对应的CSR,比如m模式下的命名都为m...
阅读全文
SylixOS

RISCV基础开发(二)

特权架构 处理器在架构上一般都会有几种特权模式,比如x86架构有“ring0~ring3”4种级别,一般操作系统内核和驱动运行在ring0级别,也就是最高级别,而普通的应用程序运行在ring3级别,也...
阅读全文
SylixOS

RISCV基础开发(一)

指令集和寄存器 1. 写在前面的话 本系列文章旨在通过十几个裸机程序开发逐渐熟悉RISCV架构,包括其重要的系统寄存器使用方式、中断和异常处理机制等等。本系列不是RISCV汇编语言教程,不会专门的讲解...
阅读全文