本文将简要介绍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