当前位置: 首页 > news >正文

Opensbi初始化分析:设备初始化-warmboot

Opensbi初始化分析:设备初始化-warmboot

    • 设备初始化
      • sbi_init函数
        • init_warmboot函数
        • coolboot & warmboot
        • wait_for_coldboot函数
        • domain && scratch(coldboot所特有)
        • console初始化及print相关工作(coldboot所特有)
        • 系统调用的相关初始化(coldboot所特有)
        • 综上

设备初始化

紧接_start_warm,接下来将正式进入C阶段,随机选择满足条件的hart执行clodboot,其余的hart执行warmboot,上篇博文已经详细分析了coolboot的详细过程了,下面就着重对比coolboot分析下warmboot的具体行为

sbi_init函数

这个函数传入的参数为sbi_scratch结构体,也就是在前面的汇编阶段初始化的scratch空间,CSR_MSCRATCH存储着起始地址。

  • 首先需要判断启动模式
  • 随机选择满足条件的hart执行clodboot,其余的hart执行warmboot
    注意:Opensbi中的coolboot和warmboot不是传统意义上的冷启动和热启动,而是完全初始化和部分初始化的意思
/*** Initialize OpenSBI library for current HART and jump to next* booting stage.** The function expects following:* 1. The 'mscratch' CSR is pointing to sbi_scratch of current HART* 2. Stack pointer (SP) is setup for current HART* 3. Interrupts are disabled in MSTATUS CSR* 4. All interrupts are disabled in MIE CSR** @param scratch pointer to sbi_scratch of current HART*/
void __noreturn sbi_init(struct sbi_scratch *scratch)
{bool next_mode_supported	= FALSE;bool coldboot			= FALSE;u32 hartid			= current_hartid();const struct sbi_platform *plat = sbi_platform_ptr(scratch);if ((SBI_HARTMASK_MAX_BITS <= hartid) ||sbi_platform_hart_invalid(plat, hartid))sbi_hart_hang();switch (scratch->next_mode) {case PRV_M:next_mode_supported = TRUE;break;case PRV_S:if (misa_extension('S'))next_mode_supported = TRUE;break;case PRV_U:
http://www.lryc.cn/news/344069.html

相关文章:

  • 软考 系统架构设计师系列知识点之软件可靠性基础知识(13)
  • 将ESP工作为AP路由模式并当成服务器
  • Python深度学习基于Tensorflow(6)神经网络基础
  • 力扣HOT100 - 35. 搜索插入位置
  • MinimogWP WordPress 主题下载——优雅至上,功能无限
  • kube-prometheus部署到 k8s 集群
  • 从0开始学习python(六)
  • OpenGL 入门(三)—— OpenGL 与 OpenCV 共同打造大眼滤镜
  • Linux服务器安全基础 - 查看入侵痕迹
  • Java反射机制的实战应用:探索其魅力与局限
  • vue3项目 文件组成
  • C语言关键字 typedef 的功能是什么?
  • 【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台-源码下载与项目配置
  • 如何在 Ubuntu 12.04 VPS 上使用 MongoDB 创建分片集群
  • 阿里云VOD视频点播流程(1)
  • Python爬虫获取豆瓣电影Top100
  • 动态规划专训8——背包问题
  • 软件杯 深度学习花卉识别 - python 机器视觉 opencv
  • 学习笔记:【QC】Android Q - IMS 模块
  • NodeMCU ESP8266 操作 SSD1306 OLED显示屏详解(图文并茂)
  • 不抽象:Increase API 设计原则
  • mybatis调用数据库存储过程
  • 【git】发生冲突后回滚提交
  • ISO14229 -1 UDS诊断服务记录-001:0x34\0x36\0x37\0x31\0x19\0x14服务报文格式介绍
  • 使用 MediaMTX 和 FFmpeg 推拉 RTSP 流媒体
  • Mac 电脑安装 Raptor 流程图软件的方法
  • W801学习笔记二十:宋词学习应用
  • EPAI手绘建模APP转换模型和坐标系
  • STM32快速入门(串口传输之USART)
  • 什么是网络安全和网络隐私?