无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
3361#
发表于 2025-1-15 21:56:20 | 只看该作者
2011yaya2007777 发表于 2025-1-15 19:59
是 UEFI 只能启动硬盘,光盘。硬盘需要告知 UEFI 固件,mbr 或者 gpt 的相关参数。软盘没有这些参数。你说 ...

能否把img都当做MBR分区表告知UEFI固件,能启动就启动,不能启动就算了,可行?
我不懂瞎说的。
那grub2又是怎么可以启动的?用的是什么魔法?
回复

使用道具 举报

3362#
 楼主| 发表于 2025-1-15 22:14:59 来自手机 | 只看该作者
好吧,明天试一试。

点评

我依稀记得当时chenall在开发grub4dos_bios的时候,为了与fbinst适配,对于(fd)这样子的软盘,没有MBR的这种仿真的软盘镜像,为了让他启动,也给他加了个MBR,结果就是(fd0),(fd0,0),(fd0,1)这样子的盘符、分区都可  详情 回复 发表于 2025-1-16 08:57
回复

使用道具 举报

3363#
发表于 2025-1-15 22:25:54 | 只看该作者
感谢分享
回复

使用道具 举报

3364#
发表于 2025-1-16 08:39:50 来自手机 | 只看该作者
liuzhaoyzz 发表于 2025-1-15 21:56
能否把img都当做MBR分区表告知UEFI固件,能启动就启动,不能启动就算了,可行?
我不懂瞎说的。
那grub ...

你需要的是grub4dos的bios版本,可以启动软件的img版本。
可启动img软件应该是内置了dos系统,通过img第一扇区启动dos操作系统,然后自动启动img里面的主软件。这样的文件很小。

uefi是不支持dos系统运行的,grub4dos for uefi可以运行软件的wim版本,通过ntloader或者ntboot启动软件的wim文件即可。

软件的wim版本: 内置了winpe系统,启动到winpe后,自动打开软件主文件。

点评

你说的不对,我这个img是软盘镜像,但是与DOS没有关系,是支持64位的UEFI启动的,里面有/EFI/grub/bootx64.efi文件的。 而且我要的不是启动PE,要得是通过img中的/EFI/grub/bootx64.efi启动其中的linux。 与你说的  详情 回复 发表于 2025-1-16 09:01
回复

使用道具 举报

3365#
发表于 2025-1-16 08:57:56 | 只看该作者
2011yaya2007777 发表于 2025-1-15 22:14
好吧,明天试一试。

我依稀记得当时chenall在开发grub4dos_bios的时候,为了与fbinst适配,对于(fd)这样子的软盘,没有MBR的这种仿真的软盘镜像,为了让他启动,也给他加了个MBR,结果就是(fd0),(fd0,0),(fd0,1)这样子的盘符、分区都可用。
g4e应该可以效仿这个,管他img有没有MBR,模拟一个,给他加上,让他不出错,只要能读取/EFI/grub/bootx64.efi即可,就能够让启动流程继续下去。
我不懂瞎说的哦。不懂请见谅。

点评

对于没有 MBR 的 img(也就是软盘映像),当使用 map --mem 把 img 虚拟成硬盘(0x80、0x81,等等)时,grub4dos (for BIOS) 会先生成 MBR 磁道,然后把 img 放在后面(紧接着 MBR 磁道)。如果没有 --mem,那是无  详情 回复 发表于 2025-1-16 09:50
这个问题,我来回复一下版大人。软盘分区,并非为了适配 fbinst。软盘分区,是为了适应某些 BIOS 把硬盘 (0x80)识别为软盘(0x00) 而采取的 workaround(补救措施,或者也可以说是 “马后炮”)。在 grub4dos 的  详情 回复 发表于 2025-1-16 09:32
回复

使用道具 举报

3366#
发表于 2025-1-16 09:01:03 | 只看该作者
cqsky 发表于 2025-1-16 08:39
你需要的是grub4dos的bios版本,可以启动软件的img版本。
可启动img软件应该是内置了dos系统,通过img第 ...

你说的不对,我这个img是软盘镜像,但是与DOS没有关系,是支持64位的UEFI启动的,里面有/EFI/grub/bootx64.efi文件的。
而且我要的不是启动PE,要得是通过img中的/EFI/grub/bootx64.efi启动其中的linux。
与你说的wim,ntloader,ntboot这些win下面的东西无关。
回复

使用道具 举报

3367#
发表于 2025-1-16 09:32:08 | 只看该作者
liuzhaoyzz 发表于 2025-1-16 08:57
我依稀记得当时chenall在开发grub4dos_bios的时候,为了与fbinst适配,对于(fd)这样子的软盘,没有MBR的 ...

这个问题,我来回复一下版大人。软盘分区,并非为了适配 fbinst。软盘分区,是为了适应某些 BIOS 把硬盘 (0x80)识别为软盘(0x00) 而采取的 workaround(补救措施,或者也可以说是 “马后炮”)。在 grub4dos 的 “系统内核” 层面,增加一些代码,来解析软盘的 MBR 上的分区表,从而识别出软盘上的各个“逻辑驱动器” (分区)。这个过程,就跟识别硬盘 MBR 分区表以及 “逻辑驱动器” (分区)是一样的。软盘与硬盘从 BIOS 的角度来看,没有差别,仅仅是盘号不同:硬盘盘号在 0x80 以上,软盘盘号在 0x7F 以下。所以,grub4dos 内核里面只要模仿硬盘来处理软盘,就可解析软盘的分区。再强调一次:这是因为主板的 ROM BIOS 同等看待软盘和硬盘,都是扇区序列。而解析分区表的工作,都是在 “应用层”,所以,应用层就能够任意发挥。而主板系统的 ROM BIOS 是根本不知道分区表、逻辑驱动器之类的事情的。ROM BIOS 只提供 int13 扇区访问。也就是说,软盘、硬盘、光盘,都是扇区序列,没有结构,没有文件系统的概念。

在 UEFI 下,系统固件(相当于以前的 ROM 吧)有可能不再同等看待软盘和硬盘了。也就是说,当 g4e 准备去调用 UEFI 的 API 时,发现软盘和硬盘真的不同。我不知道能否越过这个壁垒。这要看开发者们的研究结果了。
回复

使用道具 举报

3368#
发表于 2025-1-16 09:47:22 来自手机 | 只看该作者
本帖最后由 cqsky 于 2025-1-20 22:19 编辑
liuzhaoyzz 发表于 2025-1-16 09:01
你说的不对,我这个img是软盘镜像,但是与DOS没有关系,是支持64位的UEFI启动的,里面有/EFI/grub/bootx6 ...

好的,我明白了。它这个img是有efi启动文件。我想出个方法:可以使用winimage打开它这个img,映像->导出为具有mbr的映像,选择虚拟硬盘 vhd文件,
比如保存为ATI.vhd,然后grub4dos for_UEFI里面配置:

titile ATI.vhd
find --set-root /ATI.vhd
map  /ATI.vhd  (hd)
chainloader  (hd-1)

应该可以启动了。

你想让grub4dos for uefi有这个功能,
将没有mbr的硬盘映像img文件转换为具有mbr的类似vhd一样的硬盘映像,
能够被map为硬盘,这样就可以从里面EFI\BOOT\BOOTX64.EFI文件启动。







点评

我们现在讨论的是改进g4e的功能,并非去改动img,那么多img,你都去改成vhd?可能吗? 我在前面说了,这个img可以用grub2成功启动,为啥还要改成vhd?  详情 回复 发表于 2025-1-16 10:07
回复

使用道具 举报

3369#
发表于 2025-1-16 09:50:47 | 只看该作者
liuzhaoyzz 发表于 2025-1-16 08:57
我依稀记得当时chenall在开发grub4dos_bios的时候,为了与fbinst适配,对于(fd)这样子的软盘,没有MBR的 ...

对于没有 MBR 的 img(也就是软盘映像),当使用 map --mem 把 img 虚拟成硬盘(0x80、0x81,等等)时,grub4dos (for BIOS) 会先生成 MBR 磁道,然后把 img 放在后面(紧接着 MBR 磁道)。如果没有 --mem,那是无法生成 MBR 磁道的。也就是说,这额外增加的 MBR 磁道是在内存中增加的。如果没有 --mem,无法在 img 的前面塞入一个 MBR 磁道(因为紧接 IMG 的前面,可能是别的文件或数据),尝试这么做(即,企图把软盘 img 用不带 --mem 的方式虚拟为硬盘),会失败、报错。

点评

那正好,我在3355楼的帖子,就是map --mem http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=422652&pid=5567059&fromuid=298214  详情 回复 发表于 2025-1-16 10:03
回复

使用道具 举报

3370#
发表于 2025-1-16 10:03:50 | 只看该作者
不点 发表于 2025-1-16 09:50
对于没有 MBR 的 img(也就是软盘映像),当使用 map --mem 把 img 虚拟成硬盘(0x80、0x81,等等)时,g ...

那正好,我在3355楼的帖子,就是map --mem
http://bbs.wuyou.net/forum.php?m ... &fromuid=298214

点评

我说的是 g4d,而版大是在 g4e 下使用。这可能有某种壁垒。yaya 不是正在为版大研究这个问题吗?  详情 回复 发表于 2025-1-16 10:11
回复

使用道具 举报

3371#
发表于 2025-1-16 10:07:05 | 只看该作者
cqsky 发表于 2025-1-16 09:47
好的,我明白了。它这个img是有efi启动文件。我想出个方法:可以使用winimage打开它这个img,映像->导出 ...

我们现在讨论的是改进g4e的功能,并非去改动img,那么多img,你都去改成vhd?可能吗?
我在前面说了,这个img可以用grub2成功启动,为啥还要改成vhd?
回复

使用道具 举报

3372#
发表于 2025-1-16 10:11:08 | 只看该作者
liuzhaoyzz 发表于 2025-1-16 10:03
那正好,我在3355楼的帖子,就是map --mem
http://bbs.wuyou.net/forum.php?mod=redirect&goto ...

我说的是 g4d,而版大是在 g4e 下使用。这可能有某种壁垒。yaya 不是正在为版大研究这个问题吗?
回复

使用道具 举报

3373#
发表于 2025-1-16 10:12:45 | 只看该作者
我是来学习的
回复

使用道具 举报

3374#
 楼主| 发表于 2025-1-16 17:07:39 | 只看该作者
本帖最后由 2011yaya2007777 于 2025-1-17 18:13 编辑
我们现在讨论的是改进g4e的功能,并非去改动img,那么多img,你都去改成vhd?可能吗?

UEFI 环境可以启动软盘 img 映像了。其实就是增加了一扇区的 mbr。这只能在内存中实现。
菜单里面可以不用参数 --mem ,因为程序会判断自动完成。

使用 winimage 建立的 img 映像是软盘格式。
使用 ultraiso 可以建立硬盘或者软盘格式的 img 映像。
使用 DiskGenius 也可以建立硬盘或者软盘格式的 img 映像。

点评

yaya你施加的魔法生效了!可以启动AcronisCyberProtectHomeOffice_41126_x64.img了,更多的img我还在测试中。。。  详情 回复 发表于 2025-1-17 07:27
向大侠致敬  详情 回复 发表于 2025-1-16 18:22
回复

使用道具 举报

3375#
发表于 2025-1-16 18:22:01 | 只看该作者
2011yaya2007777 发表于 2025-1-16 17:07
UEFI 环境可以启动软盘 img 映像了。其实就是增加了一扇区的 mbr。这只能在内存中实现。
菜单里面可以不 ...

向大侠致敬
回复

使用道具 举报

3376#
发表于 2025-1-17 07:27:50 | 只看该作者
本帖最后由 liuzhaoyzz 于 2025-1-17 08:10 编辑
2011yaya2007777 发表于 2025-1-16 17:07
UEFI 环境可以启动软盘 img 映像了。其实就是增加了一扇区的 mbr。这只能在内存中实现。
菜单里面可以不 ...

yaya你施加的魔法生效了!可以启动AcronisCyberProtectHomeOffice_41126_x64.img了,更多的img我还在测试中。。。
-------------------------------------------------------------------
不行啊,AcronisCyberProtectHomeOffice_39703_x64.img,这个启动不了,截图在前面贴的有。grub2就可以。
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=422652&pid=5567059&fromuid=298214
下载地址:https://cloud.189.cn/web/share?code=vMbqIvieUFfu&pwd=6w7b#6w7b


论坛好奇怪,你的消息我这边有时候没有提示,不知道你昨天就发布了这个修改版。



回复

使用道具 举报

3377#
 楼主| 发表于 2025-1-17 09:20:28 | 只看该作者
论坛好奇怪,你的消息我这边有时候没有提示
我就是下载和使用这个版本测试的呀!你再看看。碎片不能太多。

点评

哇!你说得对,就是碎片问题,已经可以启动了! 赶快上传github吧。  详情 回复 发表于 2025-1-17 09:25
回复

使用道具 举报

3378#
发表于 2025-1-17 09:25:04 | 只看该作者
2011yaya2007777 发表于 2025-1-17 09:20
我就是下载和使用这个版本测试的呀!你再看看。碎片不能太多。

哇!你说得对,就是碎片问题,已经可以启动了!
赶快上传github吧。

点评

再一想,不对呀! find --ignore-floppies --ignore-cd --set-root /linux/acronis_true_image/AcronisCyberProtectHomeOffice_39703_x64.img map --mem --top /linux/acronis_true_image/AcronisCyberProtectHo  详情 回复 发表于 2025-1-17 15:16
回复

使用道具 举报

3379#
发表于 2025-1-17 10:52:24 | 只看该作者
令人振奋。为 yaya 和版大人点赞!
回复

使用道具 举报

3380#
发表于 2025-1-17 15:16:31 | 只看该作者
liuzhaoyzz 发表于 2025-1-17 09:25
哇!你说得对,就是碎片问题,已经可以启动了!
赶快上传github吧。

再一想,不对呀!

find --ignore-floppies --ignore-cd --set-root /linux/acronis_true_image/AcronisCyberProtectHomeOffice_39703_x64.img
map --mem --top /linux/acronis_true_image/AcronisCyberProtectHomeOffice_39703_x64.img (hd)
chainloader (hd-1)

你这是 --mem,怎么还受碎片的影响?

点评

实操场景下确实有影响,这些linux的isi都是用多线程下载器比如IDM下载的,下载过程中一个文件会被拆分为8-16个片段分别下载,下载完之后再重组成为一个文件,因此可能会有碎片,这样子的重组后的文件,可能grub4dos  详情 回复 发表于 2025-1-17 15:41
回复

使用道具 举报

3381#
发表于 2025-1-17 15:41:44 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2025-1-17 15:57 编辑
不点 发表于 2025-1-17 15:16
再一想,不对呀!

find --ignore-floppies --ignore-cd --set-root /linux/acronis_true_image/Acroni ...


实操场景下确实有影响,这些linux的iso都是用多线程下载器比如IDM下载的,下载过程中一个文件会被拆分为8-16个片段分别下载,下载完之后再重组成为一个文件,因此可能会有碎片,这样子的重组后的文件,可能grub4dos读取会有一定的问题,我用复制粘贴重命名大法,确实可以启动了,直接map需要本地文件碎片小于等于32个;map --mem要求内存有足够的区块存放这个镜像文件,但前提是要能正确读取,grub4dos的碎片解析能力比grub2差太远,grub2都是c语言写的,难度要比汇编小很多吧,我估计就这样。

用syslinux的memdisk加载到内存的时候,我发现也有类似的问题,我复制粘贴重命名之后就好了,就能正常读取了。

点评

好吧,我这么理解:g4e 在读文件时,有碎片限制。碎片多了,读文件就要失败。 版大人还证实了,同一个碎片文件,grub2 能够正常读取并仿真启动。 我似乎感觉,这说明了,g4e 还有改进完善的空间。  详情 回复 发表于 2025-1-17 16:06
回复

使用道具 举报

3382#
发表于 2025-1-17 16:06:09 | 只看该作者
liuzhaoyzz 发表于 2025-1-17 15:41
实操场景下确实有影响,这些linux的iso都是用多线程下载器比如IDM下载的,下载过程中一个文件会被拆分 ...

好吧,我这么理解:g4e 在读文件时,有碎片限制。碎片多了,读文件就要失败。

版大人还证实了,同一个碎片文件,grub2 能够正常读取并仿真启动。

我似乎感觉,这说明了,g4e 还有改进完善的空间。

回复

使用道具 举报

3383#
 楼主| 发表于 2025-1-17 18:13:23 | 只看该作者
本帖最后由 2011yaya2007777 于 2025-1-17 18:25 编辑
直接map需要本地文件碎片小于等于32个

之前是这样,后来修改为最大碎片126个,我觉得够用了。
可是分配内存时尺寸忘了乘以8,乌龙了啊。现在实际上是15个。
已经修正,希望验证一下。
软盘格式的 img 仿真为硬盘格式时,只支持 FAT12,FAT16,FAT32。


BOOTX64.rar

166.35 KB, 下载次数: 37, 下载积分: 无忧币 -2

点评

用这个版本,我测试了最多有107个碎片的uos-desktop-20-professional-hwe-1070-amd64-202412,直接map,可以启动。 试了map --mem xxx.img,没有发现有什么问题。 附带搞了个批处理,检测文件碎片数量,支持拖  详情 回复 发表于 2025-1-17 23:29
回复

使用道具 举报

3384#
发表于 2025-1-17 23:29:38 | 只看该作者
本帖最后由 liuzhaoyzz 于 2025-1-17 23:39 编辑
2011yaya2007777 发表于 2025-1-17 18:13
之前是这样,后来修改为最大碎片126个,我觉得够用了。
可是分配内存时尺寸忘了乘以8,乌龙了啊。现在实 ...

用这个版本,我测试了最多有107个碎片的uos-desktop-20-professional-hwe-1070-amd64-202412,直接map,可以启动。

试了map --mem xxx.img,没有发现有什么问题。

附带搞了个批处理,检测多个文件碎片数量,支持拖放。

检测文件碎片数量_支持拖放.rar

102.31 KB, 下载次数: 30, 下载积分: 无忧币 -2

回复

使用道具 举报

3385#
发表于 7 天前 | 只看该作者
再接再厉
回复

使用道具 举报

3386#
发表于 昨天 09:05 | 只看该作者
本帖最后由 mygamexxx 于 2025-2-7 09:08 编辑

g4d有pxe和ipxe的命令,g4e没有。g4d可以通过ipxe命令,启动ipxe菜单。
g4d通过kernel wimboot来调动PE。g4e在PXE启动尝试用wimboot,中间有出错信息,总是返回到菜单,能在出错时暂停,查看出错信息吗?从pxe服务器日志看,是传输wimboot成功,传输其他文件不成功。
iftitle [if "%@boot%"=="(pd)"] 启动PXE启动服务端 10pe.wim
#if %@uefi%#==# && chainloader /grldr.pxe ! /efi/ext/ntboot (http)/boot/10pe.wim
pxe keep
kernel ()/boot/wimboot
if %@uefi%#==# && initrd @bootmgr.efi=/boot/bootmgr.exe @bcd=/boot/bcdbios @boot.sdi=/boot/boot.sdi @boot.wim=/boot/10PE.WIM
if %@uefi%==64 && initrd @bootx64.efi=/boot/bootmgfw.efi @bcd=/boot/bcduefi @boot.sdi=/boot/boot.sdi @boot.wim=/boot/10PE.WIM
pause
boot



微信截图_20250207090609.png (86.55 KB, 下载次数: 0)

微信截图_20250207090609.png

点评

用的是ipxe官方的wimboot吗?  详情 回复 发表于 4 小时前
回复

使用道具 举报

3387#
发表于 7 小时前 | 只看该作者
看起来很强大。
回复

使用道具 举报

3388#
发表于 4 小时前 | 只看该作者
mygamexxx 发表于 2025-2-7 09:05
g4d有pxe和ipxe的命令,g4e没有。g4d可以通过ipxe命令,启动ipxe菜单。
g4d通过kernel wimboot来调动PE。g ...

用的是ipxe官方的wimboot吗?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-2-8 16:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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