2.1 opensbi: riscv: opensbi源码解析

文章目录

  • 1. opensbi流程
  • 2. 汇编代码分析
    • 2.1 fw_boot_hart汇编函数
    • 2.2 使用cpu0作为冷启动hartid
    • 2.3 随机挑选冷启动hartid 步骤
    • 2.4 重定位sbi代码
    • 2.5 标记boot状态

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,否

你可能感兴趣的:(risc-v)