无忧启动论坛

标题: grub4dos的map虚拟盘,DUET能访问它吗? [打印本页]

作者: seekyou2008    时间: 前天 08:22
标题: grub4dos的map虚拟盘,DUET能访问它吗?
本帖最后由 seekyou2008 于 2025-11-5 09:19 编辑

我想实现下面链接描述的功能:
http://bbs.wuyou.net/forum.php?m ... 7385&extra=page%3D1

现在问题是VHD里的DUET只能访问物理磁盘的ESP,访问不了它自己所在磁盘里的EFI(VHD),我想确认一下grub4dos的map功能能否解决这样的问题。

当前做法就是在U盘或硬盘上另建一个ESP,然后把VHD里的EFI复制过来。这么做能行,也能接受,但是感觉有点遗憾,能不能做得更好一点,让它能访问自己呢?

有大佬试过这么做吗?


说一下我的尝试:
qemu-img convert -f vpc -O raw D:\uniboot.vhd D:\uniboot.img
GRUB2下:
search -f -s /uniboot.img
insmod part_msdos
loopback loop /uniboot.img
set root=(loop,msdos1)
linux /grub.exe
boot
进入grub4dos:
find --set-root /uniboot.img
map --mem /uniboot.img (hd1)
map --hook
kernel /memdisk img
initrd /uniboot.img
boot
好像不行。




作者: wintoflash    时间: 前天 09:29
解决问题的关键是DUET而不是grub4dos。
DUET有两个版本,一个是普通版本,通过自带的usb/nvme等驱动来识别磁盘,这样是不支持虚拟盘的。
另一个是带BlockIoDxe的版本,它使用Legacy BIOS的int13h驱动读取磁盘,支持memdisk/grub4dos的虚拟盘。
你需要自己搜索下载或者编译BlockIoDxe的DUET。

作者: seekyou2008    时间: 前天 09:37
wintoflash 发表于 2025-11-5 09:29
解决问题的关键是DUET而不是grub4dos。
DUET有两个版本,一个是普通版本,通过自带的usb/nvme等驱动来识别 ...

好的,我去找找,感谢大佬提供思路。
作者: wintoflash    时间: 前天 09:42
顺便说下,Legacy BIOS版本的grubfm带了一个DUET的ISO。但是我忘了是不是BlockIoDxe的了。
作者: a66    时间: 前天 09:58
grub4dos 的 map 是可以用于 DUET 访问 VHD 中 EFI 分区的。
但前提是:必须使用带 BlockIoDxe 的 DUET,并确保虚拟盘正确映射且驱动被加载。
作者: seekyou2008    时间: 前天 10:04
wintoflash 发表于 2025-11-5 09:42
顺便说下,Legacy BIOS版本的grubfm带了一个DUET的ISO。但是我忘了是不是BlockIoDxe的了。

grubfm.iso里有三个文件:fmldr,grubfm.elf,ventoy.dat,是fmldr吗?看大小不对,还是这个loadfm?大佬真是及时雨。
作者: seekyou2008    时间: 前天 10:05
a66 发表于 2025-11-5 09:58
grub4dos 的 map 是可以用于 DUET 访问 VHD 中 EFI 分区的。
但前提是:必须使用带 BlockIoDxe 的 DUET, ...

大佬有现成的吗?发一个出来。感谢
作者: wintoflash    时间: 前天 10:23
seekyou2008 发表于 2025-11-5 10:04
grubfm.iso里有三个文件:fmldr,grubfm.elf,ventoy.dat,是fmldr吗?看大小不对,还是这个loadfm?大佬 ...

https://github.com/a1ive/grub2-f ... iboot/duet64.iso.xz
作者: seekyou2008    时间: 前天 10:27
wintoflash 发表于 2025-11-5 10:23
https://github.com/a1ive/grub2-filemanager/blob/master/arch/multiboot/duet64.iso.xz

谢谢大佬,我前几天还真到你的GITHUB逛了一下,哎,不识宝山呀。
作者: wintoflash    时间: 前天 10:28
本帖最后由 wintoflash 于 2025-11-5 10:34 编辑
seekyou2008 发表于 2025-11-5 10:27
谢谢大佬,我前几天还真到你的GITHUB逛了一下,哎,不识宝山呀。

好多年前研究的,记不清是不是BlockIoDxe版本了。
https://github.com/acidanthera/OpenCorePkg/tree/master/Legacy
Default OpenDuet configuration uses UHCI/EHCI and ATA/AHCI drivers and is named boot. Alternative OpenDuet configuration substituting these for BlockIoDxe is named boot-blockio. This alternative configuration can be used on non-Intel chipsets (i.e. nForce) or situations where the storage controller is poorly supported or unsupported (i.e. RAID controllers) and should be placed at the root of the partition with a name of boot.
作者: it323    时间: 前天 10:41
感谢大家分享!
作者: seekyou2008    时间: 前天 11:11
wintoflash 发表于 2025-11-5 10:23
https://github.com/a1ive/grub2-filemanager/blob/master/arch/multiboot/duet64.iso.xz

大佬,这个解开后里面有个CDBOOT,大小差不多,但是用Qemu启动测试器测试时,进不去,提示IPXE之类的。是不是我操作不对呀?有其它要注意的吗?
作者: wintoflash    时间: 前天 11:28
seekyou2008 发表于 2025-11-5 11:11
大佬,这个解开后里面有个CDBOOT,大小差不多,但是用Qemu启动测试器测试时,进不去,提示IPXE之类的。是 ...

把iso从xz里面解压出来后直接用memdisk/grub4dos加载就行了啊。
ISO里面是不能提取东西的。
作者: seekyou2008    时间: 前天 13:28
wintoflash 发表于 2025-11-5 11:28
把iso从xz里面解压出来后直接用memdisk/grub4dos加载就行了啊。
ISO里面是不能提取东西的。

find --set-root /uniboot.img
map --mem /uniboot.img (hd1)
map --hook
map --mem /duet64.iso (0xff)
map --hook
chainloader (0xff)
这样可以规范吗?进去后,比原来多发现几个启动选项,是之前的黑苹果的,还是发现不了VHD里的EFI。
作者: guong    时间: 前天 13:31
来学习下
作者: 燕飞龙    时间: 前天 19:39
感谢大家分享!




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3