0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenSBI支持哪些固件

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-10-08 14:15 次阅读

FW_DYNAMIC固件

FW_DYNAMIC固件在运行时从上一个启动阶段获取有关下一个启动阶段的信息,例如引导加载程序或操作系统内核。

  • 上一个启动阶段(即LOADER)通过a2 寄存器struct fw_dynamic_info的位置传递给FW_DYNAMIC
  • 之前的启动阶段(即LOADER)需要知道struct fw_dynamic_info
struct fw_dynamic_info {
      /** Info magic */
      unsigned long magic;
      /** Info version */
      unsigned long version;
      /** Next booting stage address */
      unsigned long next_addr;
      /** Next booting stage mode */
      unsigned long next_mode;
      /** Options for OpenSBI library */
      unsigned long options;

      unsigned long boot_hart;
  } __packed;

FW_JUMP固件

FW_JUMP固件假定下一个引导阶段的地址固定,但是不直接包含下一阶段的二进制代码,只是告诉OpenSBI,它运行完后需要到哪个地址执行。

例如,OpenSBI执行完后,需要加载kernel,而Kernel的加载地址为0x80200000,那么我们指定0x80200000为需要跳转的地址,OpenSBI执行完毕后,就会跳转到0x80200000处去加载kernel。

具体例子:

OpenSBI执行完后,去执行uboot或者kernel,假设uboot或者kernel在内存中的地址为0x80200000,则编译OpenSBI:

make PLATFORM=generic FW_JUMP_ADDR=0X80200000

在编译OpenSBI时,加入参数FW_JUMP_ADDR,即可指定需要跳转的地址。

注意, 由于OpenSBI运行在M模式下,本质上也是一个bootloader ,启动时,OpenSBI就会进行一些硬件的初始化操作,加上fw_jump固件可以指定跳转地址,因此 对于RISC-V Linux而言,OpenSBI执行完后,可以不执行uboot,直接启动kernel ,将uboot去掉,不影响RISC-V Linux正常启动。

在某些内存优化的场景下,可以考虑将uboot去掉,利用fw_jump固件直接启动kernel,从而节省内存。

FW_PAYLOAD固件

FW_PAYLOAD固件直接包含下一引导阶段的二进制代码,下一引导阶段通常是bootloader或os镜像。

不同于FW_JUMP固件的指定地址跳转,FW_PAYLOAD固件是将bootloader或os镜像直接打包进来。

具体例子:

将uboot打包进来,则编译OpenSBI:

make PLATFORM=generic FW_PAYLOAD_PATH=uboot.bin

将Linux kernel打包进来,则编译OpenSBI:

make PLATFORM=generic FW_PAYLOAD_PATH=Image

在编译OpenSBI时,加入参数FW_PAYLOAD_PATH,即可以将下一引导阶段的二进制代码打包进来。相当于将OpenSBI、uboot、kernel合并为一个文件。

实际中,我们用的更多的是FW_PAYLOAD固件,将uboot和OpenSBI一起编译。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5186

    浏览量

    118464
  • 内核
    +关注

    关注

    3

    文章

    1316

    浏览量

    39956
  • Linux
    +关注

    关注

    87

    文章

    11031

    浏览量

    207291
  • 固件
    +关注

    关注

    9

    文章

    521

    浏览量

    22524
  • RISC
    +关注

    关注

    6

    文章

    432

    浏览量

    83471
收藏 人收藏

    评论

    相关推荐

    意法半导体为STM32Cube生态系统新增LoRaWAN®固件无线更新支持

    意法半导体增强STM32 *LoRaWAN®开发软件扩展包(I-CUBE-LRWAN)的功能,支持最新的无线固件更新(FUOTA)规范。
    发表于 11-11 14:09 1172次阅读

    广和通G510联网固件首发,支持连接机智云

    首发GAgent for G510固件!!!!烧写此固件后,产品就能拥有更多功能啦!!联网、免费接入机智云、支持APP+MCU代码自动生成服务、支持大数据统计分析、
    发表于 04-24 16:57

    有没有通过GPIF支持NAND支持的FX2LP固件源的例子?

    你好,有没有通过GPIF支持NAND支持的FX2LP固件源的例子?
    发表于 08-20 12:31

    Lua固件是否支持上传arduino代码?

    这对 LUA 脚本和编程来说非常有用,我总是用 LUA 来做。简单稳定,作为 mqtt esp 客户端做事时效果很好。这个固件是否支持上传 arduino 代码或者这是另一个故事?我的朋友将 arduino 编码为 esp8266-01,他告诉我
    发表于 04-26 06:37

    什么是固件固件的概念

    什么是固件固件的概念   固件(FirmWare)的词典里的解释是具有软件功能的硬件,在早期这种器件一般都是存有软件的EROM或EPROM(电可擦除可编程只读存储器)等,通常这
    发表于 02-02 11:43 2536次阅读

    编程器固件和路由器固件什么不同

    本文开始阐述了固件的概念,其次介绍了固件的工作原理与固件的技术性能,最后详细的介绍了编程器固件和路由器固件两者之间的区别。
    的头像 发表于 04-09 09:38 2.5w次阅读

    opensbi下的riscv64裸机系列编程1(串口输出)

    opensbi下的riscv64裸机系列编程1(串口输出) 1.说明 2.opensbi的编译 3.基本环境的准备 3.1 准备qemu 3.2 准备交叉编译工具链 4.工程完善 5.封装的sbi
    的头像 发表于 12-31 10:56 8679次阅读

    CycurHSM安全固件支持车联网联盟数字密钥规范

    CycurHSM 支持 CCC 数字密钥的网络安全 ESCRYPT 的 CycurHSM 安全固件支持车联网联盟 (CCC) 数字密钥规范, 它具备必要的网络安全功能,来实现通过智能手机的安全且通过
    的头像 发表于 09-06 14:37 2615次阅读

    OpenSBI RISC-V开源Supervisor二进制接口

    opensbi.zip
    发表于 04-25 10:25 1次下载
    <b class='flag-5'>OpenSBI</b> RISC-V开源Supervisor二进制接口

    Core 3308Y固件ROC RK3308B CC PLUS支持Docker固件

    电子发烧友网站提供《Core 3308Y固件ROC RK3308B CC PLUS支持Docker固件.txt》资料免费下载
    发表于 09-13 09:52 10次下载
    Core 3308Y<b class='flag-5'>固件</b>ROC RK3308B CC PLUS<b class='flag-5'>支持</b>Docker<b class='flag-5'>固件</b>

    如何对物联设备进行远程固件升级?

    当有新功能或需要修复bug,而设备已经生产出来,在渠道或客户手中时,那么远程固件升级就很重要了。ZLG物联网云平台支持远程固件升级,本文将详解固件升级功能。
    的头像 发表于 11-01 13:14 1143次阅读

    固件升级 | NDI系列产品支持NDI 5.0

    千视N3、N30、N4、N40、U40、RN-3等多款NDI产品发布全新固件V-2.00.0208,该版本固件更新了NDISDK至5.0版本、同时全系列支持语音通话等多种功能,目前已经上线了千视官网
    的头像 发表于 03-25 09:32 785次阅读
    <b class='flag-5'>固件</b>升级 | NDI系列产品<b class='flag-5'>支持</b>NDI 5.0

    开源网络引导固件iPXE正式支持龙架构

    开源网络引导固件iPXE集成龙架构补丁,正式支持龙架构(LoongArch)。用户可以使用iPXE从网络引导基于龙架构的操作系统。
    的头像 发表于 07-19 10:12 429次阅读
    开源网络引导<b class='flag-5'>固件</b>iPXE正式<b class='flag-5'>支持</b>龙架构

    昆仑太科发布支持国产飞腾腾锐D2000芯片的开源BIOS固件版本

    近日,中国首家开源固件社区OpenKunlun,发布了由昆仑太科(北京)技术股份有限公司(以下简称“昆仑太科”)贡献的,支持国产飞腾腾锐D2000芯片的开源BIOS固件版本。
    的头像 发表于 09-21 09:17 2278次阅读

    OpenSBI固件类型介绍

    不同的固件类型来处理不同平台早期启动阶段的差异。 OpenSBI简介 OpenSBI为特定平台提供固件构建,支持不同类型的
    的头像 发表于 10-08 14:11 454次阅读
    <b class='flag-5'>OpenSBI</b><b class='flag-5'>固件</b>类型介绍