2.1 opensbi: riscv: opensbi源码解析

本文详细解析了OpenSBI的启动流程,从_start开始,探讨了如何处理引导参数、验证固件信息,以及在不同情况下选择冷启动hartid。重点分析了fw_boot_hart汇编函数,检查magic和version参数,并进行 hart id 的处理。此外,还介绍了如何根据FW_PIC标志决定是否进行代码重定位,以及如何标记boot状态。
摘要由CSDN通过智能技术生成

1. opensbi流程

opensbi第一条执行的指令是从_start开始(firmware/fw_base.S).代码如下

_start:
	/* Find preferred boot HART id */
	MOV_3R	s0, a0, s1, a1, s2, a2
	call	fw_boot_hart /*fw_boot_hart调用成功,则返回hart id,否则返回-1,在单步调试中,发现fw_boot_hart一般返回的就是hart id,即放在a0寄存器中*/
	add	a6, a0, zero /*将a0的复制给a6*/
	MOV_3R	a0, s0, a1, s1, a2, s2
	li	a7, -1 
	/*只有执行fw_boot_hart返回-1时,才会跳转到_try_lottery,否则都只有作为热启动的hart*/
	beq	a6, a7, _try_lottery
	/* Jump to relocation wait loop if we are not boot hart */
	bne	a0, a6, _wait_relocate_copy_done
	.....

在spl跳转到opensbi执行的时候,携带了三个参数,分别保存在a0,a1,a2,三个参数的含义:hartid、fdt地址(u-boot的dtb文件)和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byd yes

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值