制作一个RISC-V的操作系统六-bootstrap program(risv 引导程序)

文章目录

硬件基本概念

hart:理解为处理器

platform:理解为芯片(包括处理器和一些外设)

DRAM:动态内存

ROM:只读内存,掉电后仍然存在

随着技术进步,芯片集成度越高,最终实现system on chip

qemu实现模拟platform

qemu-virt地址映射

qemu将platform的外设和内存都进行统一编址,将所有物理地址从零到最高地址都分配掉,下图显示的就是不同硬件对应的物理地址范围(qemu模拟出来物理地址)

系统引导

引导程序(Bootloader)加载:当电源通电后,处理器会从一个预定义的存储设备(如硬盘、固态硬盘、闪存等)中加载引导程序。引导程序位于启动设备的特定位置,并负责启动操作系统的过程。

引导程序初始化:引导程序初始化包括设置基本的硬件环境,如处理器模式,内存管理单元(MMU)等。

内核加载:引导程序会加载操作系统内核到内存中的特定位置。这个内核通常是一个独立的预编译的二进制文件,它包含操作系统的核心功能。

内核初始化和启动:一旦内核被加载到内存中,处理器切换到内核执行。内核会进行一系列的初始化操作,包括初始化硬件设备、启动设备驱动、建立必要的数据结构等。

编译时候 -Ttext类似选择0x80000000位置作为内核的起始位置

qemu -kernel指定加载的内核

八个核,各个核心同时在运行,各个核独立运转,一上电之后每个核都会同时运行这个过程。

CSR

machine模式下的csr

对应的csr指令

不同模式下有不同对应的寄存器,同样有不同对应的操作寄存器的指令

Atomic:原子操作,不能中断,一气呵成

csrrw

rd是x0时,不会将csr中的数据写入x0,只会执行第二步的动作那就相当于向csr写一个寄存器了。对应的伪指令就说csrw

csrrs

此时如果x6为0,那么相当于把csr的值复制到rd,同时csr不变。可以等价于读

mhartid

引导程序做的事情

通电时八个核心同时跑起来,但为了简化流程,我们设置特别的参数使得核能够判断自己是否该跑。从而达到八个核心通电时只有一个在跑

目前先记住引导程序要做的事情吧,等后面再解释

判断当前hart是不是第一个hart

空转其实cpu仍然在运行,依然耗电。但如果是WIFI的话就是休眠,此时cpu停止运行

初始化栈

就是选定一块区域设置相关栈指针就行了

跳转到c语言的执行环境

其实就是跳转到原先是c代码现在对应的汇编了(因为最终编译了)

相关代码

BIOS引导完成后,bootloader(引导程序)就接手初始化硬件设备、建立存储器空间的映射,以便为操作系统内核准备好正确的软硬件环境

https://github.com/FULLK/risllkos/tree/main/Fullkenerl

相关推荐
熊文豪2 分钟前
当系统在后台偷偷“记账“:KES 性能观测体系深度解析
linux·运维·服务器·数据库
向量引擎12 分钟前
AI Agent 安全元年:OpenClaw 投毒事件如何改变整个生态安全标准,
运维·人工智能·安全·自动化·aigc·api调用
哦豁灬14 分钟前
ThinkPad X220 安装 Arch Linux 完美指南
linux·服务器·thinkpad·arch linux
自动化智库34 分钟前
库卡机器人定义全局变量
linux·运维·机器人
Yiyi_Coding42 分钟前
BUG列表:如何定位线上 OOM ?
java·linux·bug
cxr8281 小时前
龙虾长程任务测试 —— 撰写零人公司自动化运营实践研究报告
运维·人工智能·自动化·openclaw
杨云龙UP1 小时前
MySQL慢查询日志暴涨导致磁盘告警:slow query log膨胀至397G的生产故障排查:清理、参数优化
linux·运维·服务器·数据库·mysql
chQHk57BN1 小时前
DeepFlow Agent 故障排查指南:注册失败、协议解析、资源识别与配置方式
linux·运维·服务器
@土豆1 小时前
基于Docker部署Squid正向代理文档
运维·docker·容器
数据知道2 小时前
claw-code 源码详细分析:Remote / SSH / Teleport / Deep Link——运行时分支爆炸怎样用「模拟模式」先收束状态机?
运维·ai·ssh·claude code