OpenSBI payload

  • U-Boot作为OpenSBI的有效负载

U-Boot是一个开源的主引导加载程序。在嵌入式环境中,它可以用作第一和/或第二阶段引导加载程序。在OpenSBI环境中,U-Boot可以被指定为OpenSBI固件的负载,成为OpenSBI固件执行之后的启动阶段。

  • 构建和生成U-Boot映像

  • Linux作为OpenSBI的直接有效负载

OpenSBI能够在S-mode下直接加载Linux内核映像。由Linux内核构建过程生成的flattened image 可以作为OpenSBI的有效负载提供。详细的例子可以在QEMU和HiFive Unleashed平台指南中找到。

带有动态信息的OpenSBI固件(FW_DYNAMIC)是一个可以获取下一个启动阶段(例如引导加载程序或操作系统)和运行时OpenSBI库选项的固件。

上一个启动阶段会在内存中创建fw_dynamic_info结构体,并将其地址通过RISC-V CPU的a2寄存器传递给FW_DYNAMIC。地址在RV64上必须对齐为8字节,在RV32上必须对齐为4字节。

  • FW_DYNAMIC编译

一个平台可以通过以下任何一种方式启用FW_DYNAMIC固件。

  • FW_DYNAMIC Firmware配置选项

FW_DYNAMIC固件不需要任何特定平台的配置参数,因为所有必需的信息都是在运行时通过struct fw_dynamic_info在上一个启动阶段传递的。

带有跳转地址的OpenSBI固件(FW_JUMP)是一个只处理下一个启动阶段入口地址的固件,例如引导加载程序或操作系统内核,而不直接包含下一个启动阶段的二进制代码。

  • FW_JUMP编译

一个平台可以通过以下任何一种方式启用FW_JUMP固件。

编译后的FW_JUMP固件ELF文件命名为FW_JUMP.ELF。其扩展镜像文件为fw_jump.bin。这两个文件都创建在build/platform/<platform_subdir>/firmware目录下的特定于平台的构建目录中。

  • FW_JUMP固件配置选项

为了正确运行,FW_JUMP 固件需要使用顶级 make 命令行或目标平台 config.mk 配置文件定义一些配置参数。可能的参数如下:

  • FW_JUMP例子

带有Payload (FW_PAYLOAD)的OpenSBI固件是一个直接包含启动阶段的二进制文件的固件,在OpenSBI固件执行之后。通常,这个有效负载将是一个引导加载程序或一个OS内核。

当在 OpenSBI 固件之前执行的引导阶段不能同时加载 OpenSBI 固件和跟随 OpenSBI 固件的引导阶段时,FW_PAYLOAD 固件特别有用。

FW_PAYLOAD 固件也适用于 OpenSBI 固件之前的引导阶段未传递扁平设备树(FDT 文件)的情况。 在这种情况下,FW_PAYLOAD 固件允许在最终固件的 .text 部分中嵌入扁平设备树。

  • FW_PAYLOAD编译

一个平台可以通过以下任何一种方式启用FW_PAYLOAD固件。

编译后的FW_PAYLOAD固件ELF文件命名为fw_payload.elf。它的扩展镜像文件是fw_payload.bin。这两个文件都创建在build/platform/<platform_subdir>/firmware目录下的特定于平台的构建目录中。

  • 配置选项

  • FW_PAYLOAD例子

本网页由快兔兔AI采集器生成,目的为演示采集效果,若侵权请及时联系删除。

原文链接:https://blog.csdn.net/dai_xiangjun/article/details/123537557

更多内容