1. 中断控制器 1.1 基础接口 中断控制器PLIC需要封装出标准接口使用: void os_int_init(void); void os_int_en(unsigned int vector, ...
SimpleOS开发(8)改进进程调度
1. 系统接口名称修改 为了方便使用系统接口以及辨识系统接口,需要将系统接口的命名进行规范。这里的系统接口是指通用功能接口,比如开关中断、申请释放内存等等,simpleos采用简单的"os_"前缀来命...
SimpleOS开发(7)添加进程支持
1. 进程相关数据结构定义 首先定义进程的状态,这里参考xv6将进程定义为6个状态: PROC_UNUSED:进程控制块未使用处于空闲状态。 PROC_USED:进程控制块已经被使用状态。 PROC_...
SimpleOS开发(6)添加VMM支持
0. 启动代码修复 之前在entry.S处理时遗漏了两个功能:BSS段清零和进入Trap时原有栈地址保存。BSS段清零工作比较简单,就是将kernel.ld链接脚本中定义的BSS段起始和结尾地址之间循...
SimpleOS开发(5)添加内核物理页管理器
1. 实现互斥锁雏形 内核的各个功能组件后续都有申请释放内存的需求,所以需要实现内存管理。在实现内存管理之前我们需要先实现互斥锁,因为通过下面我们看出内存管理时通过链表实现的,操作链表时需要加锁,所以...
SimpleOS开发(4)切换到S模式
1. 设置trap入口 1.1 设置M模式trap入口 RISCV架构发生中断和异常时不会像arm那样自动切换栈指针,所以在trap入口需要先设置好栈地址,我们将__stack_start加上第九个页...
SimpleOS开发(3)添加Cache操作接口
1. 实现Cache操作接口 在系统启动过程中需要使能icache和dcache来提高系统整体性能,并且后续别的系统模块也需要操作cache比如回写cache、失效cache等等,所以需要封装出cac...
SimpleOS开发(2)简单打印
1. 设计思路 全志D1芯片fel模式下会初始化好串口为115200波特率,所以我们的思路是封装好串口发送数据接口来使用即可,而无需再去设置串口的波特率等寄存器,从而简化代码。 1.1 启动文件 启动...
SimpleOS开发(1)环境准备
1. 项目简介 基于全志D1开发板开发一个类UNIX系统来学习操作系统开发相关知识,设计上会参考xv6和SylixOS,并且是从最底层开发,也即不使用uboot或者opensbi之类的引导程序,而是直...
全志D1开发(十五)网络驱动之网络测试
1. 完善BSP设置 1.1 网卡驱动完善 将上一章节封装出来的三个接口分别填入网络驱动操作集函数中调用: static int netifInit(struct netdev *pnetdev) {...
全志D1开发(十四)网络驱动之网络数据传输
1. 发送数据 发送和接收数据的流程基本参考了uboot,只是为接收添加了中断支持。我们先来看看发送数据的实现: int emacTransmit(struct netdev *pnetdev, st...
全志D1开发(十三)网络驱动之网络硬件MAC初始化
网络MAC控制器的初始化流程和SD控制器其实类似,大致分为以下几步: 引脚复用:老生常谈的东西,在使用MAC功能之前需要将引脚复用设置正确,由于本次我们采用的uboot自带网络功能,已经将引脚复用初始...