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

news2024/12/24 9:31:30

文章目录

  • 硬件基本概念
  • qemu-virt地址映射
  • 系统引导
  • CSR![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/86461c434e7f4b1b982afba7fad0256c.png)
  • machine模式下的csr
  • 对应的csr指令
    • csrrw
    • csrrs
  • mhartid
  • 引导程序做的事情
    • 判断当前hart是不是第一个hart
    • 初始化栈
    • 跳转到c语言的执行环境
  • 相关代码

硬件基本概念

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1536009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ETCD跨城容灾与异地多活网络故障的相关表现分析

ETCD跨城容灾与异地多活网络故障的相关表现分析 1. 网络架构2. 单个网络中断-跟leader区中断2.1. 网络中断2.2. 网络恢复 3. 单个网络中断-跟非leader区中断4. 两个网络中断-leader区中断5. 两个网络中断-非leader区中断6. 两个网络中断-非leader区中断7. 总结8. 参考文档 etcd…

国内ip切换是否合规?

在网络使用中,IP地址切换是一种常见的行为,可以用于实现隐私保护、访问地域限制内容等目的。然而,对于国内用户来说,IP地址切换是否合规一直是一个备受关注的话题。在中国,网络管理严格,一些IP切换行为可能…

ArtDD 一键下载 掘金、CSDN、开源中国、博客园文章 文章的Chrome 插件

有想一键下载博客园、掘金、CSDN、开源中国等博客自己的文章到本地的可以使用这个插件 插件会根据当前页面链接自动分辨出文章所属平台,可能有些文章详情链接是不支持的,例如博客园存在很多个版本的文章详情页链接格式,想要支持所有的链接是…

MySQL Workbench连接云服务器内网数据库

在项目上遇到一个问题,生产环境是Centos,分配了两台云服务器,一台应用服务,一台数据库服务,应用服务与数据库服务采用内网连接。我作为开发和运维方,有权限直接访问应用服务,但是数据库服务器需…

vivado 增量实施

增量实施 增量实现是指增量编译的实现阶段设计流程: •通过重用参考设计中的先前布局和布线,保持QoR的可预测性。 •加快地点和路线的编制时间或尝试最后一英里的计时关闭。 下图提供了增量实现设计流程图。该图还说明了增量合成流程。有关增量的更多…

基于springboot+vue的毕业论文管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

文献速递:深度学习乳腺癌诊断---使用深度学习改善乳腺癌诊断的MRI技术

Title 题目 Improving breast cancer diagnostics with deep learning for MRI 使用深度学习改善乳腺癌诊断的MRI技术 01 文献速递介绍 乳腺磁共振成像(MRI)是一种高度敏感的检测乳腺癌的方式,报道的敏感性超过80%。传统上,其…

CorelDRAW2024中文最新版本新增功能及更新日志

作为一名软件工程师,对于各种软件,尤其是图形设计软件,如CorelDRAW的最新版本信息通常会有所了解。CorelDRAW作为一款功能强大的图形设计软件,其2024中文版的发布无疑为设计师们带来了全新的体验。以下是我为你整理的关于CorelDRA…

20240309web前端_第二周作业_完成游戏导航栏

作业&#xff1a;游戏导航栏 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0…

Docker构建多平台(x86,arm64)构架镜像

这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…

策略路由PBR

PBR策略路由_路由环路policy-based-routeing 1、路由策略&#xff1a; 首先要了解什么是路由策略&#xff1a;首先需要在路由器上运行路由协议&#xff0c;然后在路由协议进程中通过某些工具&#xff0c;对路由进行策略修改&#xff0c; 比如通过filter-policy import-route…

【规范】小程序发布,『小程序隐私保护指引』填写指南

前言 &#x1f34a;缘由 『小程序隐私保护指引』小程序发布&#xff0c;每次都躲不开&#xff01; &#x1f3c0;事情起因&#xff1a; 最近在帮朋友弄一个小项目&#xff0c;uniappunicloud壁纸小程序。虽然之前做过不少小程序&#xff0c;但是每次发布正式版本时都有一步『…

kafka面试篇

消息队列的作用&#xff1a;异步、削峰填谷、解耦 高可用&#xff0c;几乎所有相关的开源软件都支持&#xff0c;满足大多数的应用场景&#xff0c;尤其是大数据和流计算领域&#xff0c; kafka高效&#xff0c;可伸缩&#xff0c;消息持久化。支持分区、副本和容错。 对批处理…

python四川火锅文化网站的设计与实现flask-django-php-nodejs

四川火锅文化网站的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&#xff0c;…

Android ViewPager不支持wrap_content的原因

文章目录 Android ViewPager不支持wrap_content的原因问题源码分析解决 Android ViewPager不支持wrap_content的原因 问题 <androidx.viewpager.widget.ViewPagerandroid:id"id/wrap_view_pager"android:layout_width"match_parent"android:layout_he…

QT6 android下配置文件打包到APK

一.遇到问题 用QT做android开发&#xff0c;生成的apk文件默认不包含程序配置文件和png文件&#xff0c;导致程序在android上无法读取必要的参数和logo&#xff0c;本文主要解决这个问题&#xff0c;并详细讲述QT android 的apk程序打包流程。 二.APK打包流程 1.如何生成APK 当…

STM32关于使用定时器触发ADC转换的理解

以STM32 ADC的常规通道为例&#xff08;注入通道类似&#xff09;&#xff1a; 如上图&#xff0c;STM32 ADC的常规通道可以由以上6个信号触发任何一个&#xff0c;我们以使用TIM2_CH2触发ADC1&#xff0c;独立模式&#xff0c;每次仅测一条通道&#xff0c;则ADC的配置如下&am…

2023年最受欢迎的编程语言排行榜 —— Python位居榜首,但对你来说未必是最佳选择

本文的编程语言热度统计数据来自《IEEE Spectrum》&#xff0c;《IEEE Spectrum》杂志是IEEE&#xff08;美国电气电子工程师学会&#xff09;的旗舰出版物&#xff0c;探讨了新技术的发展、应用和影响。它预测工程、科学和技术的趋势&#xff0c;并为理解、讨论和领导这些领域…

扩容分区和文件系统(Linux)

在ECS控制台上扩容云盘容量后&#xff0c;对应分区和文件系统并未扩容&#xff0c;您还需要进入ECS实例内部继续扩容云盘的分区和文件系统&#xff0c;将扩容部分的容量划分至已有分区及文件系统内&#xff0c;使云盘扩容生效。本文为您介绍如何通过两个步骤完成Linux实例云盘的…

牛客NC403 编辑距离为一【中等 模拟法 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/0b4b22ae020247ba8ac086674f1bd2bc 思路 注意&#xff1a;必须要新增一个&#xff0c;或者删除一个&#xff0c;或者替换一个&#xff0c;所以不能相等1.如果s和t相等&#xff0c;返回false,如果s和t长度差大于1…