OpenSBI 上手指南

OpenSBI 上手指南

首页角色扮演代号KD更新时间:2024-07-31

本文将简要介绍OpenSBI,并介绍其编译和启动方法。

1. OpenSBI

OpenSBI是一种SBI(RISC-V Supervisor Binary Interface)规范的实现,运行在 RISC-V 平台M-mode的特定平台固件,在运行完 BootLoader 以后,M-Mode还为 S-Mode 提供一些特定的服务,通过ecall调用。

opensbi代码地址:https://github.com/riscv-software-src/opensbi

SBI文档:https://github.com/riscv-non-isa/riscv-sbi-doc

2. OpenSBI三种固件类型

FW_DYNAMIC:从上一级 Boot Stage 获取下一级 Boot Stage 的入口信息,以 struct fw_dynamic_info 结构体通过 a2 寄存器传递。

FW_JUMP:带固定跳转地址的OpenSBI固件,假设下一级 Boot Stage Entry 为固定地址,直接跳转过去运行。

FW_PAYLOAD:带有效负载的OpenSBI固件,在 jump 的基础上,直接打包进来下一级 Boot Stage 的 Binary。下一级通常是 Bootloader 或 OS,比如 U-Boot,Linux。

3. OpenSBI的Platform支持

OpenSBI 目前支持以下虚拟和硬件平台:

4. OpenSBI的使用(qemu仿真)

4.1 OpenSBI源码下载

git clone https://github.com/riscv-software-src/opensbi.git

4.2 交叉编译工具链下载(自行选择)

wget https://musl.cc/riscv32-linux-musl-cross.tgz or wget https://musl.cc/riscv64-linux-musl-cross.tgz

4.3 交叉编译工具链解压

tar zxvf riscv32-linux-musl-cross.tgz -C <your_directory> or tar zxvf riscv64-linux-musl-cross.tgz -C <your_directory>

4.4 编译目录声明编译工具链

export PATH=<your_directory>/riscv32-linux-musl-cross/bin:$PATH or export PATH=<your_directory>/riscv64-linux-musl-cross/bin:$PATH

4.5 编译

OpenSBI最新代码无需指定编译成那种固件,默认情况下会同时编译生成3种固件,有关OpenSBI编译的更多详细信息,请参阅文件 https://github.com/riscv-software-src/opensbi/blob/master/docs/firmware/fw.md

export CROSS_COMPILE=riscv32-linux-musl- make all PLATFORM=generic PLATFORM_RISCV_XLEN=32

export CROSS_COMPILE=riscv64-linux-musl- make all PLATFORM=generic PLATFORM_RISCV_XLEN=64

4.6 启动(只启动OpenSBI)

qemu-system-riscv32 -machine virt \ -m 512M -nographic \ -bios <your_directory>/fw_jump.bin or qemu-system-riscv64 -machine virt \ -m 512M -nographic \ -bios <your_directory>/fw_jump.bin

其中-bios参数,在只启动OpenSBI可以是任意指定的,可指定文件:

fw_dynamic.bin or fw_payload.bin or fw_jump.bin

4.7 OpenSBI的运行结果如图所示:

好了,有关OpenSBI的介绍到此介绍,下文将介绍通过OpenSBI引导BootLoader或OS 内核,敬请期待。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved