首页 > 其他分享 >RISC-V启动引导流程 spec

RISC-V启动引导流程 spec

时间:2022-11-11 16:04:09浏览次数:35  
标签:BBL 流程 FESVR RISC CPU 内核 Linux spec 加载

一、RISCV规范定义的三种主要操作模式:(用户模式、管理模式和机器模式 (图1 - a))

1.用户模式:运行用户程序的模式,权限级别最低。不能直接访问I/O或特权指令或内核内存或其他进程。

2.管理模式:大多数Linux内核或其他O/S运行的模式。通过I/O remap函数访问最特权的指令和I/O控制。内存管理单元可能打开或关闭。

3.机器模式:裸机程序/第一阶段引导加载程序和BBL在此模式下运行。BBL以固件的形式存在(图1 - b)

图1-a 图1-b 图2
二、Boot 流程(图2)

1. Zero Stage Bootloader (ZSBL) : 从ROM获取核心代码。

2. Reset Code : 清除寄存器和片上存储器, 为FSBL准备RAM空间。

3. First Stage Bootloader (BBL) :设置trap表,将SELF复制到RAM中, 从 SD 卡载入Linux内核 。

4. Linux: 安装页表, 驱动载入 ,运行环境准备 。

5. init (Busybox) :启动 shell。

三、Boot Loader引导

1.Boot Room

BootROM地址空间从0x10000开始(由配置文件中的BootROM Params值决定),并从地址0x10040开始执行(由BootROM Params中的链接器脚本和重置向量给出),该地址由BootROM程序集中的_hang标签标记。

将汇编好的指令编码到BootROM硬件中,想更改BootROM代码,则需要在BootROM目录中运行make,然后重新生成Verilog。或者也可以进行覆盖

图3

2.ZSBL

Reset Code , 裸机驱动: UART: Early console ,SD Card/SPI , Device Tree (Open Firmware), 安装外围设备,从SD到内存复制FSBL镜像,只有一个Core执行设置例程。

3.FSBL

改良的BBL, 移除外设上的原子操作,数据段清零; 安装: UART: Early console , PLIC(平台级中断控制器), CLIC(内核局部中断控制器),FDT (Filter Device Tree), 激活二级Core,启动Linux内核引导程序。

其中BBL的作用如下:

①任何RISCV处理器不能在硬件中直接处理的非法指令。

②启动和响应计时器中断。

③在Linux引导时进行链加载,初始化控制台访问。

四、Ariane引导过程

1.ZSBL(Zero Stage Bootloader)

①前端服务器(FESVR)是一个运行在主机CPU上的程序,可以使用栓系串行接口(TSI)读写目标系统内存的任意部分。

②当RISC-V CPU的FESVR加载实际的程序时,默认的引导加载程序只是在等待中断(wait-for-interrupt, WFI)指令上循环。

③FESVR使用TSI将裸机可执行程序或第二阶段引导加载程序加载到SoC的内存中。如果在软件模拟器(Spike)中,就是传递给模拟器的二进制文件。

④一旦它完成了程序的加载,FESVR将写入CPU 0的软件中断寄存器,这将使CPU 0退出它的WFI循环。

⑤一旦CPU 0接收到中断,它将写入系统中其他CPU的软件中断寄存器,然后跳转到DRAM的开头,执行加载的可执行文件的第一条指令。其他CPU将被第一个CPU唤醒,也跳到DRAM的开头。

注:

①加载的可执行文件将在机器模式下运行,直到它通过主机寄存器发送命令告诉FESVR关闭SoC。

②FESVR加载的可执行文件应该有指定为tohost和fromhost的寄存器FESVR在可执行文件运行时使用这些寄存器与可执行文件进行。可执行文件使用tohost向FESVR发送命令,比如打印到控制台、代理系统调用和关闭SoC。fromhost用于发回tohost命令的响应和发送控制台输入。

2.FSBL(First Stage Bootloader)

裸机程序的运行,有ZSBL就已经足够了,如果需要启动RISCV Linux或者其他可执行文件(载入可执行文件的案例较少,以Linux为例)则需要借用第二阶段引导程序BBL。

①BBL读取BOOTROM中编码的设备树,并将其转换为与Linux内核兼容的格式。

②设置虚拟内存和中断控制器,加载内核(内核作为有效负载嵌入在引导加载程序二进制文件中),并以管理器模式开始执行内核。

③机器模式的Trap也是由BBL程序负责维护,并通过FESVR进行代理。

④一旦BBL进入管理模式,Linux内核就会接管并开始它的进程。它最终加载init程序并以用户模式运行。

注:构建引导Linux的BBL映像的最简单方法是使用FireMarshal工具,可以将自定义内核配置和用户空间软件添加到工作负载中。

标签:BBL,流程,FESVR,RISC,CPU,内核,Linux,spec,加载
From: https://www.cnblogs.com/cfas/p/16880724.html

相关文章

  • 【BIM】BIMFACE基础开发流程
    1.相关概念accesstoken:bimface后端接口访问凭证,通过appkey和appsecret获取,其有效期为一周viewtoken:bimface模型临时访问凭证,其有效期为12小时fileId:单个revit或其他模......
  • .net erp(办公oa)开发平台架构之流程服务概要介绍
    .neterp(办公oa)开发平台架构之流程服务(流程引擎)概要介绍背景搭建一个适合公司erp业务的开发平台。架构概要图: 流程引擎开发平台: 包含流程引擎......
  • iOS上架流程详细版本
     苹果上架审核周期长一直是困扰用户的一大问题,这次把我自己上架的经历分享给大家,避免大家入坑。上架总流程:创建开发者账号借助辅助工具appuploader创建证书,......
  • git push 报错:error:src refspec dev_1 does not match any.
    最近项目开发中在本地新建了个分支,想着把本地分支推到远程库托管,但是gitpush的时候git出现报错error:srcrefspecdev_1doesnotmatchany.查找了下原因发现是本地分支......
  • 前端项目开发流程
    项目完整流程需求分析1、了解背景为什么做这个事情2、质疑需求是否合理这个需求为什么要做,是否符合我们的产品,开发也是用户3、需求是否闭环需求是否考虑全面,分析功......
  • 通信协议:Modbus协议原理和通信流程演示
    1、Modbus简介Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。ModBus网络是一个工业通信系统,由带智能终端的......
  • Spring MVC工作 执行流程详解
    SpringMVC执行流程用户点击某个请求路径,发起一个HTTPrequest请求,该请求会被提交到DispatcherServlet(前端控制器)由DispatcherServlet请求一个或多个HandlerMapping(......
  • Day07.2:Java流程控制详解
    Java流程控制用户交互Scanner我们可以通过Scanner类来获取用户的输入,电脑通过我们的输入,执行输入语,实现程序的输入输出基本语法Scannername=newScanner(System.in)......
  • webpack的构建流程是什么?从读取配置到输出文件这个过程尽量说全
    webpack的运行流程是一个串行的流程,从启动到结束会依次执行以下步骤;1.初始化参数:在配置文件,读取并合并参数,得到最终的参数;2.开始编译:拿着上一步的参数初始......
  • MindStudio模型训练场景精度比对全流程和结果分析
    摘要:MindStudio是一套基于华为昇腾AI处理器开发的AI全栈开发平台本文分享自华为云社区《​​MindStudio模型训练场景精度比对全流程和结果分析​​》,作者:yd_247302088。一......