UEFI on Spacemit K1
进迭开源uefi源码仓库:
https://gitee.com/bianbu-linux/edk2-platforms
https://gitee.com/bianbu-linux/edk2
Spacemit K1是一颗8核64位RISC-V AI CPU,基于开源Tianocore EDK2解决方案,完成了K1上的UEFI适配。K1上UFEI解决方案启动流程如下图。
bootloader
FSBL
FSBL基于uboot工程编译而来,实现UEFI PEI阶段的:
-
DDR初始化
-
加载opensbi与EDK2
-
更新memory信息,并通过dtb传递给EDK2
openSBI
基于开源openSBI解决方案,提供machine态的基础服务:
-
Cache管理
-
TLB管理
-
suspend/resume管理
EDK2
基于开源tianocore EDK2开源解决方案,提供:
-
EFI boot service,提供系统启动相关服务
-
存储驱动(emmc,sd,nvme)和USB驱动,支持从卡、emmc、NVME、U盘中启动
-
GOP(Graphic Output Protocol),支持通过HDMI显示启动菜单
-
Variable service,实现启动选项的配置,如启动顺序、启动时间等
Grub
grub作为一个EFI application,存储于ESP分区,经EDK2加载和运行;通过/boot/grub/grub.cfg配置文件,完成多系统识别与引导,并配置启动菜单;加载内核镜像和init ramdisk,完成系统加载和控制权切换;kernel镜像与rootfs存储于emmc或nvme等存储器上。
如此,支持从多种启动介质上,完成linux系统的加载和启动;并能通过EDK2启动菜单,完成启动优先级的配置和修改。