OpenSBI 通常运行在 RISC-V M 模式,为 S 模式操作系统提供定时器、IPI、复位和 hart 管理等 SBI 服务,并完成进入内核前的最低层初始化。它把平台最底层的差异放在固件里,让 Linux、BSD 或自研 S 模式内核不必直接依赖每块板子的中断和电源实现。
冷启动和次级启动必须分工
一个 hart 被选为 coldboot hart 后,才可以初始化全局锁、设备树、控制台和 SBI 服务表。其余 hart 走 warmboot 路径,等待共享状态可见后再建立本地栈和 trap 环境。这里的同步不仅是逻辑正确性问题,也涉及缓存一致性和内存屏障;否则次级 hart 可能看到半初始化的平台数据。
切到 S 模式前要交接哪些信息
固件会配置 mstatus、mepc、medeleg、mideleg 等 CSR,使 S 模式内核能够接管自己负责的异常和中断。常见约定会把 hart ID 和设备树地址传给内核入口,但具体启动协议仍以目标系统要求为准。若内核早期卡住,优先核对入口地址、设备树、委托位、控制台和次级 hart 启动参数,而不是只看是否已经执行了 mret。