by fanxiushu 2023-04-14/18 转载或引用请注明原始作者。
接上文。
上文提到了至少有两种办法制作UEFI的虚拟磁盘驱动。
本文只接收利用BlockIO的方式来构造一个临时用的虚拟磁盘。
之所以说是临时使用,是因为在作为引导程序中,一旦进入到 \EFI\boot\bootx64.efi之后,
控制权就交给了bootx64.efi以及之后的引导程序,我们的引导程序唯一需要在幕后扮演的就是提供虚拟磁盘的IO功能。
这跟传统BIOS下实现大型系统引导的基本规则是一样的。
所以在开发引导程序的时候,不必按照UEFI规范文档那样阐述的,制作符合UEFI规范的UEFI驱动程序,
我们只需要在程序入口里调用 InstallMultipleProtocolInterfaces 函数安装新的BlockIO的PROTOCOL,
并且之后调用ConnectController 函数,让我们新安装的PROTOCOL能被连接上,
能被别的引导程序(其实就是 EFI\Boot\bootx64.efi 等其他引导程序)识别到。
所以在UEFI中制作这么一个临时的BlockIO接口就会显得比较轻松:
定义:
EFI_BLOCK_IO_MEDIA Media;
EFI_BLOCK_IO_PROTOCOL BlkIo;
EFI_BLOCK_DEVICE_PATH DevPath;
EFI_BLOCK_DEVICE_PATH是我们自己定义的继承自 EFI_DEVICE_PATH 的路径,可直接定义成 MSG_VENDOR_DP 的方式。
设备路径(EFI_DEVICE_PATH)是必须要的,否则其他efi程序无法正确定位。
windows无盘启动技术开发之UEFI(新一代BIOS)引导程序开发之二
于 2023-04-18 18:16:19 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)