chenall/grub4dos

grub4dos 非UEFI版,有没有 efi loader mod?

1457384613gh opened this issue · 16 comments

grub4dos 非UEFI版,有没有 efi loader mod?

我想实现
BIOS->MBR->PBR->grub4dos->refind_x64.efi

a1ive commented

没看懂。
你是想 BIOS 下加载类似 DUET 的东西来模拟 UEFI 吗?
那跟 GRUB4DOS 本身没啥关系,你直接在 GRUB4DOS 下启动 DUET 之类的东西不就行了?

对,就是给旧主板模拟 UEFI。
那个 DUET 具体叫什么?
我百度搜索了一下,有好多东西都叫 DUET。

a1ive commented

对,就是给旧主板模拟 UEFI。 那个 DUET 具体叫什么? 我百度搜索了一下,有好多东西都叫 DUET。

DUET 是 EDK2 里面的一个组件,早就停止开发了。https://github.com/tianocore/tianocore.github.io/wiki/DuetPkg
Clover 和 OpenCore 的 UEFI 模拟就是基于它开发的。
你可以用 GRUB4DOS 启动 Clover 或 OpenCore。

你可以用 GRUB4DOS 启动 Clover 或 OpenCore。

Legacy BIOS 启动的 GRUB4DOS 可以加载 CLOVERX64.efi 或 OpenCore.efi 吗?

a1ive commented

前面说了,你要用 Clover 或 OpenCore 的模拟 UEFI 功能,所以你要加载的是 Clover / OpenCore 的 MBR 或 PBR。
GRUB4DOS 没有模拟 UEFI 的功能,也不会添加模拟 UEFI 的功能。

好的,谢谢,顺便问另一个问题。

GRUB4DOS 可以使用 改编自 grub2的 主题吗?

a1ive commented

GRUB4DOS 可以使用 改编自 grub2的 主题吗?

这似乎不是一个有意义的问题。你如果 "改编" 成 GRUB4DOS 的外观设置了,那当然可以在 GRUB4DOS 上用。
你想问的问题也许应该是 "如何 自定义 GRUB4DOS 的视觉效果"
GRUB4DOS 和 GRUB2 在主题外观方面的配置方法是完全不同的,可能并不能实现相同的效果。
目前也没有比较详细的文档来介绍 GRUB4DOS 如何自定义外观风格,可以参考 GRUB4DOS 开发者 @yaya2007 的帖子:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=369720

有的有缺陷的显卡,加载主题会出现分辨率异常的现象。
有一个关于 Arrandale 显卡 分辨率的问题。

Arrandale GPU 的情况

  • 如果 Legacy BIOS 启动 GRUB4DOS 并且加载主题,Arrandale GPU 能够使用 1366x768的分辨率,和显示器分辨率一样,并且高于 1024x768

  • 如果 UEFI 启动 GRUB4DOS for UEFI 并且加载主题,Arrandale GPU 最大只能使用 1024x768的分辨率,低于显示器分辨率,并且会造成 图形界面横向拉伸,主题变丑不美观。

有解决方案的先例

为了防止图形界面横向拉伸,CloverBootloader 的团队已经开发了 CsmVideoDxe.efiOpenCore 的团队已经开发了 BiosVideo.efi,能够在 UEFI 模式下, 以 CSM 或 Legacy 模式加载 Arrandale GPU 的方式 加载Arrandale GPU ,使得 UEFI 的图形界面能够使用 来自 CSM 或 Legacy 模式 的更高的分辨率,使得 UEFI 图形界面的分辨率能够与 显示器的分辨率保持一致,防止主题失真。
链接中是 efi 图形驱动 的源代码。
https://github.com/CloverHackyColor/CloverBootloader/tree/master/CloverEFI/BiosVideo
https://github.com/acidanthera/OpenCorePkg/tree/master/Legacy/BootPlatform/BiosVideo

希望

  • 我希望 GRUB4DOS for UEFI 的图形界面也能够达到这种效果。
    然而,GRUB4DOS for UEFI 无法 像 加载 CrScreenshotDxe.efi 那样直接加载 CsmVideoDxe.efiBiosVideo.efi,grub2 也不能够做到。
    很可能是因为 CsmVideoDxe.efiBiosVideo.efi 都需要 被配置文件中的特殊字符串激活,然而 配置文件肯定是不一样的。

提问

  • 有没有什么 通用的 能够让 至少GRUB4DOS for UEFI 或者 grub2 的图形界面 达到那种效果的 EFI 图形驱动?
  • 还有其他方式达到这种效果吗?
  • 可不可以 根据上述链接中的源代码 改编一个 UEFI图形界面通用的驱动?
    就是那种,让拥有 Arrandale GPU以及类似 GPU 的用户 自己手动添加一行 load xxxx.efi 就加载 该驱动 的效果。

Arrandale GPU 的信息

image

a1ive commented

然而,GRUB4DOS for UEFI 无法 像 加载 CrScreenshotDxe.efi 那样直接加载 CsmVideoDxe.efi 或 BiosVideo.efi,grub2 也不能够做到。
很可能是因为 CsmVideoDxe.efi 或 BiosVideo.efi 都需要 被配置文件中的特殊字符串激活,然而 配置文件肯定是不一样的。

你在 grub 中执行 load /xxx/CsmVideoDxe.efi之后,再执行 chainloader /path/to/grub4dos.efi,重新加载一次 grub 试试。

你在 grub 中执行 load /xxx/CsmVideoDxe.efi之后,再执行 chainloader /path/to/grub4dos.efi,重新加载一次 grub 试试。

试了 grub 和 refind 加载 CsmVideoDxe.efi,没什么效果。

a1ive commented

我看了 CsmVideoDxe.efi 的代码,它就是个普通的 UEFI 显示驱动,只是把 GOP 的一些调用转成了 Legacy 的。
按理说加载之后各种 bootloader 应该都用的,我不知道为什么只有 OpenCore / Clover 能用。
是不是 OpenCore / Clover 在加载它之前,屏蔽了所有的 UEFI 显示驱动?
如果你用 OpenCore / Clover 修改分辨率生效之后,再启动 GRUB,这个显示分辨率是否依然有效?

😆😆😆大佬,你这么快,就看完 CsmVideoDxe.efi的源代码,并且了解工作原理了吗?

真厉害呢!

那也就是说,CsmVideoDxe.efi 是很有希望兼容的,BiosVideo.efi 出入很大咯。

有可能是操作有问题,我多试几次。

有没有可能,我给你发送的源代码发错了?
有没有可能,不是 CsmVideoDxe.efi的源代码,是 DUET 图形界面的源代码?

a1ive commented

它们的原理都是一样的,没啥区别。
只是非 BIOS 模拟 UEFI 的情况下,要调 LegacyRegion 之类的协议 patch VBIOS。
反着来的类似的东西也有,就是用来在纯 UEFI 下启动 Win7 的 (https://github.com/manatails/uefiseven)

有没有什么 通用的 能够让 至少GRUB4DOS for UEFI 或者 grub2 的图形界面 达到那种效果的 EFI 图形驱动?

没有。

a1ive commented

有关 grub4dos 的问题,可以在 Discussions 里面讨论。

a1ive commented

与哪个 repo 有关,就在哪个 repo 的 discussions 或 issues 里面讨论。
与具体的 repo 无关的问题,可以在无忧论坛里面讨论,GRUB4DOS 和 Ventoy 的开发者都在。

我不喜欢用即时通讯软件讨论这些东西,因为它们不能被搜索引擎记录索引,帮助更多的人。