2015年底的时候, UEFI Specification 2.6中新加入了一个 Ram Disk Protocol,但是一直以来我搞不清楚如何使用。到了 UDK2017 有了Demo,终于可以弄清楚使用方法。
实验环境是 QEMU X64。用到UDK2017中的OvmfPkgX64.dsc,编译之后生成 ovmf.fd 使用 qemu-system-x86_64.exe –bios ovmf.fd 进行启动。启动之后,可以在Setup中刚看到 RamDisk 的相关设定。
从下面可以看到有2种创建方式,一种是直接创建一个空的 Ram Disk。另外一种是读取一个文件放在内存中作为 RamDisk
先试试第一种,选择创建一个 RAW 的Ram Disk大小为 4KB。
因为是 RAW,所以没有 FAT分区,也就不会出现 FSx: 这样的盘符。
此外,还可以使用 Create from file 来安装一个带有 Fat 的盘。我做了一个 MemTest 的镜像,安装之后会出现 Fs0: , 但是 MemTest 软件本身在运行的时候会死机(可能是 QEMU 模拟的硬件太老和MemTest有兼容性问题):
同样的方法在实体机上能够正常工作,下图是在 KabyLake-Y上运行的结果:
可以看到,这个功能能够让一些已经编译好的UEFI Application 顺利执行,最直接的应用就是在Boot From WIFI 。
本文提到的 MemTest 工具可以在这里下载 MemTest
这里放一个UDK2017 编译生成的 OVMF.FD ,可以进行试验。需要注意的是,启动速度比较慢,请耐心等待
OVMF
这个能启动WINPE吗?
就是把WINPE ISO读到RamDisk里
再启动
可以的,最初设计目标就是用来引导系统的
Did you ever this this to work?
I am interested in something similar.
Thanks
I think it could work. You can study an open source software: Ventoy.
It can load a ISO into the Ramdisk and boot it.
编译好的Ovmf.fd能给一个吗?我这边总是编译不过
去年的文章,能不能找不一定,回头我试试。
我放了一个编译好的在文章末尾,你试试吧
如果初始化的时候不用文件,而是指定大小,然后安装simplefilesystemprotocol,也能在shell里看到FSX:, 但是shell里打fsx:进入的时候会卡在那里,这个怎么解?
可能是生成的 disk 没有文件系统卡死了