今日头条
继《在RISC-V星光板上创建Debian系统镜像》之后,这一期来聊聊RISC-V星光板的启动流程。
如何更直观理解VisionFive的启动流程呢?小编用一张图摹拟整个过程。
通电开机加载BootROM后,有两种方法去启动Bootloader(在嵌入式系统中,通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务完全由Bootloader来完成)。
第一种是通过UART,即通过简单的输入一条命令,加载一个固定大小的二进制文件到芯片的内存中并执行它,这种模式主要用于固件更新;
第二种是通过QSPI(Quad SPI),即BootROM将32k大小的Bootloader从QSPI读取到SRAM区并开始执行。不难看出,QSPI更为方便,官方也推荐这个方式。
通过QSPI模式,BootROM把32k的bootloader从QSPI读取到主芯片内部的SRAM区并启动。大家可以看到上图浅蓝色区域,这个区域的文件都是在开发板出厂时,刷写好到QSPI闪存芯片里的内容,包括了secondboot,ddrinit,OpenSBI和U-Boot。
secondboot是一个只有9KB左右的bin文件,它去读取闪存中ddrinit,跳转过去后初始化内存并引导闪存上的fw_payload.bin.out文件,而这个fw_payload.bin.out包含了 OpenSBI和Uboot的头和文件信息,于是直接跳转到OpenSBI了。
什么是OpenSBI呢?
OpenSBI的全称是Open Supervisor Binary Interface ,即“开放的操作系统二进制接口”,大家可以将OpenSBI 理解成固件。其特点有二,第一,以 M 模式和启动器来定义的平台固件,可以作为一个管理程序或者是通用操作系统执行,并且进入S或者HS模式;第二,以HS模式和启动器的管理程序,或者一个通用的操作系统,可以执行并进入VS模式。
M模式即Machine-Mode,可以理解为固件特权级;S模式即Supervisor-Mode,可以理解为操作系统内核特权级。在启动流程中,OpenSBI作用就是让开发板从M运行模式引导操作系统内核,让操作系统内核运行进入 S 模式。
其他模式就不过多解释啦,感兴趣的朋友可自行搜索。
最后,从OpenSBI到U-Boot 的过程可以拆分来看,OpenSBI为Linux提供基本的系统响应,系统从M模式转换为S模式,跳转并启动位于内存对应位置的U-Boot。而随着U-Boot启动,Linux系统也开始启动了。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !