-
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例子
原文链接:https://blog.csdn.net/dai_xiangjun/article/details/123537557