无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
1471#
 楼主| 发表于 2021-5-1 12:10:30 来自手机 | 只看该作者
回复

使用道具 举报

1472#
发表于 2021-5-1 12:47:43 | 只看该作者
hhh333 发表于 2021-4-26 23:11
源码在哪里下的,我不清楚

你可以直接下载每日构建的版本 https://github.com/retrage/edk2-nightly

回复

使用道具 举报

1473#
发表于 2021-5-1 12:51:34 | 只看该作者
用 github actions 自动编译发布的 GRUB4EFI 外部命令有问题。
如果系统是 Ubuntu 16.04, GRUB4DOS 外部命令正常,GRUB4EFI 外部命令无法运行。
如果系统是 Ubuntu 18.04,GRUB4DOS 外部命令无法正常编译,GRUB4EFI 外部命令正常。
但是在我这边实体机上, Ubuntu 18.04 可以正常编译 GRUB4DOS 和 GRUB4EFI 的外部命令。
不知道 @chenall 有没有什么解决方法。
回复

使用道具 举报

1474#
发表于 2021-5-1 16:21:20 | 只看该作者
Climbing 发表于 2021-4-29 07:40
我还是认为有可能性,保护模式切回实模式吧。EFI是可扩展的,完全可以开发一个应用模拟BIOS模式,事实上 ...
EFI是可扩展的,完全可以开发一个应用模拟BIOS模式

目前其实有人做过类似的东西:https://github.com/tkchia/biefircate (只是类似,拒绝抬杠) 但是是实验性的。
这在理论上是可行的,但是以下问题使得这种东西没有太大意义。
1. 开发难度极大。
  要写一大堆汇编,而且跑在实模式下,纯属吃饱了撑的。x86 实模式这些玩意已经是历史的糟粕了,没什么前景。一般有闲工夫的开发者不会自找麻烦,研究这个东西。
2. 很难做到比较好的兼容性。
  目前还是有很多 uefi 带有 csm 功能,即使不带 csm,也有很多 legacy 的东西。你如果自己写了个模拟的 bios,很可能会和这些东西冲突。
3. 即使写出来了,你也不能跑 Win7/Win98/XP,以及 DOS 下的一些程序。
  阻碍新电脑运行叉屁/Win7等老系统的最大障碍还真不是 UEFI,这个无需赘述。如果跑 DOS,也不能运行你那些存了几百年的什么各种硬件检测修改工具。

你要非得跑那些老掉牙的东西,不如搞个裸机虚拟机,啥问题都解决了。
比如,自己编译一个支持 KVM 的最小化 Linux 内核,然后弄个最小化 initramfs,装上 qemu 和 fbvnc。
fbvnc 是个不需要 x11/wayland ,直接用 framebuffer 显示的 VNC 客户端。fbvnc 通过 vnc 连上 qemu,就能全屏显示图像了。


回复

使用道具 举报

1475#
发表于 2021-5-2 01:16:52 | 只看该作者
wintoflash 发表于 2021-5-1 16:21
目前其实有人做过类似的东西:https://github.com/tkchia/biefircate (只是类似,拒绝抬杠) 但是是实验 ...

我并不需要跑这些复杂的东西,很简单,我做的基于wimboot的vhd的win7_x86系统,只能运行在传统的bios模式下,在传统的bios模式下,我只需要用grub4dos+ntboot/ntloader就可以加载启动,但在UEFI模式下是无法启动的。但同样方法制作的win10系统就可以在bios和UEFI模式下自由启动,所以,我想能不能在UEFI模式下切换到grub4dos,然后使用ntboot启动我的win7系统。就是这么简单。如果在UEFI下能够直接调用CSM模式启动grub4dos也是可以的。
回复

使用道具 举报

1476#
发表于 2021-5-2 20:18:22 | 只看该作者
谢谢分享
回复

使用道具 举报

1477#
发表于 2021-5-2 21:57:31 | 只看该作者
wintoflash 发表于 2021-5-2 13:01
要是想达到你所说的效果,那必须要实现(几乎)完整的Legacy BIOS。
你需要的应该是一个第三方 Windows  ...

好吧,你说的对,按你说的这个过程,这确实是一件非常复杂的事情,我已经准备放弃了。

但我必须澄清一下,我说的简单,并不是说它的实现非常简单,而是我的要求在我看来非常简单。例如,我的电脑支持UEFI+Legacy模式,如果我的默认启动方式是UEFI模式(比如启动到grub2 或者grub4dos_UEFI),那么我就无法启动部署在硬盘上的win7系统,但这时候如果我使用一个grub4dos的启动U盘启动系统,就可以通过这个U盘直接启动硬盘上部署的win7系统。在这个过程中,没有人写过任何一行代码,仅仅是更换了一个启动介质,我的目标就实现了,而我想实现的就是能不能在UEFI环境下切换到类似U盘的那种启动环境(避免使用U盘)。既然UEFI兼容CSM(Legacy)启动方式,说明这个UEFI已经实现了一个完整的BIOS的模拟,那么有没有一种可能直接利用UEFI模拟的这个BIOS呢?并不需要你完全重写一个BIOS,它本来应该是UEFI已经实现的。当然,我承认我想得又过于简单了。

好吧,就此打住,就当是一个外行的异想天开吧。感谢您的关注。
回复

使用道具 举报

1478#
发表于 2021-5-3 16:14:02 | 只看该作者
Climbing 发表于 2021-5-2 21:57
好吧,你说的对,按你说的这个过程,这确实是一件非常复杂的事情,我已经准备放弃了。

但我必须澄清一 ...

我猜你U启时选择的Legacy方式,所以可以启硬盘的win7并不是从Legacy启动了EFI。因为你的主板选择两种方式都可以。实际上,U启时如果两种方式都允许,在启动菜单项中,有关U盘的菜单项应该至少有两个,一个是Legacy方式另一个是EFI方式,如果你选择EFI方式的启动项,就不可能启动硬盘上的win7了;同理,由于硬盘上的win7所在分区不能够EFI启动,所以启动菜单中不会有EFI方式的启动项。进而让你产生了错觉,以为从U盘的EFI启动能够启动硬盘的WIN7。
回复

使用道具 举报

1479#
发表于 2021-5-3 16:33:11 | 只看该作者
hhh333 发表于 2021-5-3 16:14
我猜你U启时选择的Legacy方式,所以可以启硬盘的win7并不是从Legacy启动了EFI。因为你的主板选择两种方式 ...

你觉得我有那么弱智吗?我既然说了用U盘启动Grub4dos,当然是进的Legacy启动模式(也就是BIOS方式),我强调的是,这个Legacy模式,也是UEFI模拟出来的,并不是电脑带有UEFI+BIOS两个固件。我一直强调,有没有一种方法,可以从UEFI启动环境切换回BIOS启动环境(从而启动grub4dos)。如同从保护模式切换回实模式。

当然,我既没有进行过BIOS的编程,也没有搞过UEFI的编程,所以真的是异想天开,我提问的目的就是在探索有没有这么一种可能性。grub legacy本来是用于启动Linux系统的,但不点的改进让它可以自由的启动ntldr/bootmgr(以及各种其他引导文件),如果没有不点的异想天开,那么我们可能还生活在原始时代,还在被弱智的ntldr/bootmgr所束缚,不会带来这么多革命性的产品。
回复

使用道具 举报

1480#
发表于 2021-5-3 16:47:44 | 只看该作者
Climbing 发表于 2021-5-3 16:33
你觉得我有那么弱智吗?我既然说了用U盘启动Grub4dos,当然是进的Legacy启动模式(也就是BIOS方式),我 ...

支持双启动理解成EFI模拟出了Legacy似乎也说得通,但看成两个固件更准确吧。不过,支持突破传统的思维,支持异想天开,有时一些伟大的创新就是来源于此。
回复

使用道具 举报

1481#
发表于 2021-5-3 17:11:20 | 只看该作者
hhh333 发表于 2021-5-3 16:47
支持双启动理解成EFI模拟出了Legacy似乎也说得通,但看成两个固件更准确吧。不过,支持突破传统的思维, ...

我觉得它不算是两个固件,就是UEFI固件模拟出来的。
回复

使用道具 举报

1482#
发表于 2021-5-3 17:34:32 | 只看该作者
Climbing 发表于 2021-5-3 16:33
你觉得我有那么弱智吗?我既然说了用U盘启动Grub4dos,当然是进的Legacy启动模式(也就是BIOS方式),我 ...

对于支持 CSM 的 UEFI 固件,当然是有办法直接调用它的 Leagcy 启动功能的。
具体怎么调用,可以看 Intel 的文档。 (https://www.intel.com/content/da ... cification-v098.pdf)
但是, CSM 不在 UEFI 规范里面,所以主板的 UEFI 固件是否支持 CSM,要看制造商的心情。
另外,2020 年起,Intel 正式放弃 CSM,也就是说新电脑不会再支持 CSM 了。
回复

使用道具 举报

1483#
发表于 2021-5-4 08:51:08 | 只看该作者
本帖最后由 mygamexxx 于 2021-5-4 08:52 编辑

EFI64模式,QEMU测试ISO映像文件,出现无法加载菜单的情况。但用QENU测试硬盘,RUN模块运行这个ISO映像文件能出现菜单。请教各位老师是什么情况?菜单确定是UTF-8编码。

QQ截图20210504084528.png (18.66 KB, 下载次数: 175)

QQ截图20210504084528.png
回复

使用道具 举报

1484#
发表于 2021-5-4 10:09:01 | 只看该作者
mygamexxx 发表于 2021-5-4 08:51
EFI64模式,QEMU测试ISO映像文件,出现无法加载菜单的情况。但用QENU测试硬盘,RUN模块运行这个ISO映像文件 ...

\efi\grub\下补齐ext文件夹
回复

使用道具 举报

1485#
发表于 2021-5-4 10:17:14 | 只看该作者
mygamexxx 发表于 2021-5-4 08:51
EFI64模式,QEMU测试ISO映像文件,出现无法加载菜单的情况。但用QENU测试硬盘,RUN模块运行这个ISO映像文件 ...

ISO测试正常
回复

使用道具 举报

1486#
发表于 2021-5-4 11:54:40 | 只看该作者
本帖最后由 mygamexxx 于 2021-5-4 12:31 编辑
ksafei 发表于 2021-5-4 10:09
\efi\grub\下补齐ext文件夹

跟ext没关系,因为没有用到外部命令。实机启动也没问题。只是在QEMU上启动有一二次会出菜单,大部分进入了命令行。命令行下用 configfile 加载菜单也不行。可能是电脑的问题。VMware虚拟机EFI启动也一样的问题。

QQ截图20210504115346.png (22.85 KB, 下载次数: 144)

QQ截图20210504115346.png

QQ截图20210504115200.png (17.79 KB, 下载次数: 162)

QQ截图20210504115200.png

实机map启动成功.png (444.96 KB, 下载次数: 155)

实机map启动成功.png

ryan.7z.002.TXT

1.92 MB, 下载次数: 5, 下载积分: 无忧币 -2

ryan.7z.001.TXT

2 MB, 下载次数: 4, 下载积分: 无忧币 -2

回复

使用道具 举报

1487#
发表于 2021-5-4 12:54:13 | 只看该作者
mygamexxx 发表于 2021-5-4 11:54
跟ext没关系,因为没有用到外部命令。实机启动也没问题。只是在QEMU上启动有一二次会出菜单,大部分进入 ...

实践出真知,为何不试下呢?再说试下又不会怀孕,但会有惊喜哟,哈哈哈......
回复

使用道具 举报

1488#
发表于 2021-5-4 13:40:17 | 只看该作者
mygamexxx 发表于 2021-5-4 11:54
跟ext没关系,因为没有用到外部命令。实机启动也没问题。只是在QEMU上启动有一二次会出菜单,大部分进入 ...

经测验应该是打包命令上的问题,加个小文件就可以改变优先级,具体的有点想不起来啦
回复

使用道具 举报

1489#
发表于 2021-5-4 13:44:26 | 只看该作者
ksafei 发表于 2021-5-4 12:54
实践出真知,为何不试下呢?再说试下又不会怀孕,但会有惊喜哟,哈哈哈......

从命令行的图上可以看出,ls /efi/ 已经显示加了ext
回复

使用道具 举报

1490#
发表于 2021-5-4 13:54:40 | 只看该作者
mygamexxx 发表于 2021-5-4 13:44
从命令行的图上可以看出,ls /efi/ 已经显示加了ext

前几天下载你的附件制作ISO,经虚拟机测试不能正常显示菜单,当时看菜单上有iftitle等想着需要外部命令就加了ext文件夹,结果显示正常啦
今天仔细又测了下新菜单命令,发现ISO加个小文件就可以正常显示,就想到了以前坛里讨论过打包文件优先级的问题,你可测下
回复

使用道具 举报

1491#
 楼主| 发表于 2021-5-5 12:14:51 | 只看该作者
EFI64模式,QEMU测试ISO映像文件,出现无法加载菜单的情况。但用QENU测试硬盘,RUN模块运行这个ISO映像文件能出现菜单。请教各位老师是什么情况?菜单确定是UTF-8编码。

确实有一个出界问题,已经排查。谢谢反馈。

BOOTX64.rar

140.66 KB, 下载次数: 44, 下载积分: 无忧币 -2

回复

使用道具 举报

1492#
发表于 2021-5-8 07:49:50 | 只看该作者
请教HHH333大大,BOOTX64.efi更新了,用于EFI光盘启动的引导文件grub4efi.bin如何更新?
回复

使用道具 举报

1493#
发表于 2021-5-8 09:32:33 | 只看该作者
mygamexxx 发表于 2021-5-8 07:49
请教HHH333大大,BOOTX64.efi更新了,用于EFI光盘启动的引导文件grub4efi.bin如何更新?

用ultraiso打开并替换之,再把efi/boot/g4bootx64.efi换成这个新的,over
回复

使用道具 举报

1494#
发表于 2021-5-8 11:24:54 | 只看该作者
本帖最后由 mygamexxx 于 2021-5-8 12:50 编辑
hhh333 发表于 2021-5-8 09:32
用ultraiso打开并替换之,再把efi/boot/g4bootx64.efi换成这个新的,over

明白了,用UltraISO打开.bin文件,更换文件。
回复

使用道具 举报

1495#
发表于 2021-5-10 11:54:23 | 只看该作者
终于支持EFI启动了,谢谢分享、
回复

使用道具 举报

1496#
发表于 2021-5-10 16:39:02 | 只看该作者
wintoflash 发表于 2021-5-1 12:51
用 github actions 自动编译发布的 GRUB4EFI 外部命令有问题。
如果系统是 Ubuntu 16.04, GRUB4DOS 外部命 ...

我试了一下,好像是没有回显.我抽空测试下是什么情况.
回复

使用道具 举报

1497#
发表于 2021-5-10 18:05:01 | 只看该作者
chenall 发表于 2021-5-10 16:39
我试了一下,好像是没有回显.我抽空测试下是什么情况.

大神,想问一下hotkey外部命令是你开发的吧。能不能让在title中用^或[]定义的热键用title文本颜色的对比色显示?另外^跟随的字母作热键不隐藏?
回复

使用道具 举报

1498#
发表于 2021-5-11 12:04:03 | 只看该作者
本帖最后由 chenall 于 2021-5-11 12:58 编辑
wintoflash 发表于 2021-5-1 12:51
用 github actions 自动编译发布的 GRUB4EFI 外部命令有问题。
如果系统是 Ubuntu 16.04, GRUB4DOS 外部命 ...

应该是解决了 @wintoflash

修改了  grubutils g4e 的编译脚本 (我改错了,不过可以正常编译, $cc 需要改为 $(CC) )
应该是 -fPIE 这个参数的关系,改错了的话就会一直使用这个参数,否则如果 gcc 版本高于 5.0 就会使用  -no-pie

因为对编译参数不太了解,你看一下要怎么处理,  有调整的话再顺便修改下.

这个是早上我编译的版本,
https://transfer.sh/U9PCL/grub4dos-for_UEFI-2021-05-11.7z
回复

使用道具 举报

1499#
 楼主| 发表于 2021-5-11 12:32:00 | 只看该作者
正常了,chenall ^_^
回复

使用道具 举报

1500#
发表于 2021-5-11 13:06:14 | 只看该作者
hhh333 发表于 2021-5-10 18:05
大神,想问一下hotkey外部命令是你开发的吧。能不能让在title中用^或[]定义的热键用title文本颜色的对比 ...

好久没有弄,忘得差不多了^_^.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-2 23:08

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表