在介绍OpenSBI固件类型前,我们需要知道一点RISC-V Linux的启动过程:
启动流程:ZSBL-->FSBL-->OpenSBI-->u-boot-->Linux
ZSBL和FSBL通常固化在芯片内部,不在本文讨论范围,本文关注OpenSBI。
可以看到,在启动uboot之前,需要先启动OpenSBI,然后再执行uboot/linux。而OpenSBI提供了不同的固件类型来处理不同平台早期启动阶段的差异。
OpenSBI为特定平台提供固件构建,支持不同类型的固件来处理不同平台早期启动阶段之间的差异。所有固件将根据平台特定代码以及OpenSBI通用库代码执行平台硬件的相同初始化过程。支持的固件类型在如何处理平台早期启动阶段传递的参数以及如何处理和执行固件之后的启动阶段方面会有所不同。
上一个引导阶段将通过RISC-V CPU的以下寄存器传递信息:
hart id
通过a0
寄存器传递a1
寄存器在内存中存储设备树 blob 地址。地址必须与 8 个字节对齐。OpenSBI 目前支持三种不同类型的固件 :
fw_dynamic
固件:带有动态信息的固件fw_jump
固件:指定下一引导阶段的跳转地址,不直接包含下一阶段的二进制代码fw_payload
固件:包含下一引导阶段有效负载的二进制代码,通常这个有效负载是bootloader或者操作系统镜像全部0条评论
快来发表一下你的评论吧 !