文章目录
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文件)和
本文详细解析了OpenSBI的启动流程,从_start开始,探讨了如何处理引导参数、验证固件信息,以及在不同情况下选择冷启动hartid。重点分析了fw_boot_hart汇编函数,检查magic和version参数,并进行 hart id 的处理。此外,还介绍了如何根据FW_PIC标志决定是否进行代码重定位,以及如何标记boot状态。
订阅专栏 解锁全文
382

被折叠的 条评论
为什么被折叠?



