- 博客(14)
- 收藏
- 关注
原创 RISC-V 64架构专题一(riscv的启动流程)
ROM一般是指CPU内部存储了厂商自己的zsbl程序(零级引导程序)的非易失性存储器;其用于将fsbl代码加载到CPU内部的类似于SRAM的内存中运行,并将板卡的DDR进行初始化;最后openSBI启动uboot,开始进入Linux操作系统的启动流程。在整个启动过程中,对于用户可见的第一段代码就是fsbl了,所以我们将从fsbl开始,到Linux结束,进行整个流程的分析。同时我们将以全志D1处理器(核心为玄铁C906)为例,来进行说明。架构中的一个重要组件,它实现了。
2024-07-24 23:56:54
791
原创 RISC-V 32架构实践专题十一(从零开始写操作系统-自旋锁的实现)
我们要实现自旋锁,首先就要弄清楚自旋锁是什么?由于在多处理器环境中某些资源的有限性(这些共享资源被称为临界区),有时需要互斥访问(mutual exclusion),这时候就需要引入锁的概念,只有获取了锁的线程才能够对资源进行访问,由于多线程的核心是CPU的时间分片,所以同一时刻只能有一个线程获取到锁。那么就面临一个问题,那么没有获取到锁的线程应该怎么办?
2024-03-17 21:51:31
624
1
原创 RISC-V 32架构实践专题十(从零开始写操作系统-抢占式多任务的实现)
在抢占式多任务的实现中,由操作系统来进行任务的调度,并且每个任务执行的时长通常被称为时间片。在抢占式多任务中,操作系统对队列中挂起的任务进行优先级排列;一般同一优先级的任务,会进行时间片的调度执行,也就是每个任务执行一段时间后,操作系统将调度下一个任务继续执行。所以对于要实现抢占式多任务的功能,需要依赖与划分时间片的定时器;而定时器完成定时后,又将以中断的形式来告诉CPU,因此我们要实现抢占式多任务,那么我们需要实现中断注册、定时器初始化以及基于时间片的任务调度。
2024-03-15 01:17:47
1134
1
原创 RISC-V 32架构实践专题九(从零开始写操作系统-trap机制)
在riscv体系架构中,异常和中断的过程被统称为trap。广义的来说,中断也属于异常的一部分;不管发生异常或是中断,微处理器的硬件行为是一致的,微处理器暂停当前程序,转向异常或中断处理程序,处理完成后返回之前暂停的程序。
2024-03-12 23:39:02
1628
1
原创 RISC-V 32架构实践专题八(从零开始写操作系统-协作式多任务的实现)
实现了内存分配器后,接下来开始实现任务调度器。首先实现一个简单的协作式多任务调度,后续再进行抢占式多任务调度的实现。其中协作式多任务是指任务会主动释放CPU资源,而不是完全通过操作系统来进行任务调度。只有当任务主动调用任务切换函数时,当前任务才会交出CPU使用权,让其他任务接管CPU资源开始运行。使用mscratch寄存器来暂存当前正在执行任务的context上下文内存空间的地址。当要进行任务调度时,将context进行切换即可实现调度功能。
2024-03-10 19:50:35
1365
1
原创 RISC-V 32架构实践专题七(从零开始写操作系统-内存管理)
完成串口初始化后,接下来将实现一个简单的内存分配器以页大小为单位来进行内存的分配管理。我们将此内存分配器命名为rv内存分配器。
2024-03-06 00:56:58
960
1
原创 RISC-V 32架构实践专题六(从零开始写操作系统-板级外设初始化)
完成时钟初始化后,接下来就可以对各总线下的外设进行配置,并实现其相关驱动接口功能。接下来我们以串口为例来进行外设初始化流程。
2024-03-05 00:52:35
835
1
原创 RISC-V 32架构实践专题五(从零开始写操作系统-板级时钟初始化)
完成整个代码框架搭建后,后续将对此代码框架进行填充。首先需要初始化MCU的时钟源以及分频系数,同时再初始化串口,完成输出打印。此时将不采用中断来实现上述功能,在后续的专题中再进行中断的初始化等操作。
2024-03-04 01:15:49
1290
1
原创 RISC-V 32架构实践专题四(从零开始写操作系统-使用Makefile进行代码管理)
在上一章的内容中,我们已经完成了一个非常小的boot程序,此时的代码量非常小,仅有2个文件。当我们对此系统进行扩展时,代码量将肉眼可见的增加,并且代码文件将增加许多。所以这个时候我们需要建立多个文件夹,对代码结构进行层次划分;同时将使用Makefile来对代码进行编译管理。
2024-03-01 01:27:11
762
1
原创 RISC-V 32架构实践专题三(从零开始写操作系统-boot)
从现在开始将正式进入到riscv从零开始写操作系统的实践。本次实践内容参考《循序渐进,学习开发一个RISC-V上的操作系统 - 汪辰》汪老师的课程,将本来在qemu上运行的rvos系统一步步移植到沁恒的CH32V307单片机上。
2024-02-29 01:32:35
776
原创 RISC-V 32架构实践专题二(青稞V4F启动代码分析)
以上基本完成了青稞V4F的启动代码分析,当执行完mret指令后,将进入到entry函数中;而entry函数为一个rtos的入口函数,下一部分则将进行在riscv架构下,运行的rtos系统 --- rt-thread操作系统的分析。
2024-02-20 23:55:28
3475
1
原创 RISC-V 32架构实践专题一(青稞V4F内核介绍)
RV32:32位架构,通用寄存器位宽为32bit;I指令模块:支持整形操作,具有32个整形寄存器(通用寄存器);M指令模块:支持整形乘法和除法指令;A指令模块:支持原子指令;C指令模块:支持16位压缩指令;F指令模块:支持单精度浮点操作,具有32个浮点寄存器(用于浮点运算);XW指令模块:自扩展字节和半字操作的16位压缩指令。机器模式,该模式具备最高权限,可以访问所有的CSR以及除物理内存保护单元锁定之外的所有物理内存;
2024-02-18 22:09:55
4547
1
原创 RISC-V汇编指令
本文仅作为riscv汇编指令集的学习记录。其中可能对指令集的记录并不完善,也可能出现错误疏漏之处,所以仅作为个人学习记录。对于RISC-V的指令集来说,其使用模块化的方式进行组织,每一个模块用一个英文字母表示,包括基本指令集I、整数乘除法指令集M、原子操作指令集A、单精度浮点型指令集F、双精度浮点型指令集D和压缩指令集C,其中特定的组合“IMAFD”被称为“通用”组合,用英文字母G表示。而指令集格式如下图所示:上图基本概括了riscv指令集的机器码格式。其中rs与rd表示通用寄存器(x0~x31);
2024-02-14 16:37:07
3694
3
原创 RISC-V架构简介
riscv的特权级别一共有3种,每个riscv架构的芯片,至少包含其1种特权等级。其3种特权级别如下图所示:其中机器模式具备最高级别的特权等级,运行在此模式下的代码被认为是天然可信的;而用户模式则仅具备部分的特权等级,一般在此模式下运行的代码是操作系统中的应用代码。所有的riscv架构的芯片,必须实现机器模式,在此模式下,它可以直接访问到计算器底层的硬件。
2024-02-12 15:17:51
1200
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人