简介
SBI即为 (RISC-V Supervisor Binary Interface),SBI直接运行在系统M模式,可以作为一个bootloader也可以是一个M模式下运行的后台程序,SBI程序拥有最高的权限,可以访问所有的硬件资源,向OS提供了统一的系统调用环境,OS通过特殊的指令进入到M模式,并执行SBI的callback。
而RISCV官方在给出SBI标准规范的同时,也开发了一套开源代码opensbi,代码仓库位于 https://github.com/riscv-software-src/opensbi,里面有详细的介绍文档。
编译
opensbi的代码组织上,把sbi公共代码抽象出来形成两个库:lib/sbi, lib/utils,不同平台调用这两个库的代码,和平台相关代码放在platform下面,一起构成了sbi的fw。
对于qemu的virt平台,相关的代码在:opensbi/platform/generic,对于nuclei的riscv,相关代码在platform\nuclei下面,用户可以在platform加入自己的硬件平台。
我们以nuclei的64 riscv的qemu来分析,代码放在platform\nuclei\demosoc下面。
在demosoc下面放入自己平台相关的文件以及一些编译配置参数和宏。objects.mk 是编译规则,config.mk是配置的参数和宏。
lib/sbi下面放一些通用的代码, lib/utils下面会放置具体外设的驱动代码, 每一个文件夹下面都有通用的注册框架和私有的驱动,
以seirial为例:fdt_serial.c是通用的入口,fdt_serial_nuclei.c是被注册的驱动,nuclei-uart.c是具体的操作,所以说如果需要添加自己的driver
就要在这里面实现,并注册使用,注册完成后,在fw的初始化过程中会赋

最低0.47元/天 解锁文章
605

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



