无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 380287|回复: 3274
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
跳转到指定楼层
#
发表于 2020-10-29 10:31:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 2011yaya2007777 于 2021-4-24 10:50 编辑

  使用于 UEFI 环境的 GRUB4DOS。
  
  这是一个庞大的工程,几乎所有的代码都捋了一遍。修改了控制台键盘输入输出,控制台屏幕输出,内存控制,
  驱动器控制,获取日期时间,暂停控制,图形模式及Unicode字体实现,PXE 网启,等等。
  
  开发过程中,参考了 GRUB2 源码。有关映射,参考了 wintoflash 的源码。

  文件下载:http://grub4dos.chenall.net/

更新说明:
2021-04-24 (yaya)
  支持尾续菜单, 改进批处理调试, 内置 unicode 16*16 英文点阵字符。

2020-11-18 (yaya)
  1. 菜单目录更改为:/efi/grub/menu.lst
  2. 支持实体光盘、硬盘启动。
  3. 多个光盘时,启动光盘调整为第一光盘,以适应 windows。
  4. 增加退出 GRUB4DOS 函数 exit_g4d。
  5. 批处理变更:
     函数下标不变,参数由 32 位变更为 64 位。(Fn.下标 参数1 参数2 ...)
     变量地址由 0x8304 变更为 0x8308,由 32 位变更为 64 位。
     call Fn 函数,如果使用变量 0x8200-0x8400 则要在前面加g4e,如 g4e0x8217。
     批处理增加 else 函数。增加 {脚本集} 表示法。
     如:
     if 条件
     {
       脚本集
       if 条件 {
         脚本集 }
       else {
         脚本集 }
     }
     else if 条件
     {
       脚本集
     }
     else
     {
       脚本集
     }
     注意:
     1. 大括弧必须是一行的结尾。
     2. 脚本集可多行书写。
     3. 大括弧内部可以嵌套。

2020-10-30
  1. 可以启动 efi 文件。
  2. 可以启动 iso 及 img 文件。
  3. 内置热键功能。
  
  与旧版本不同之处:
  1. 可以通过 graphicsmode 命令查看系统支持的图形模式。
  2. map 函数执行后即挂载。不需要执行 --hook 指令。
  3. 取消 --hook,--unhook,--rehook,--unmap=,--floppies=,--harddrives= 指令。
  4. 在 UEFI 环境,可以从 0x80 以外的磁盘启动,因此不需要交换磁盘操作,如 map (hd0) (hd1)。
  5. 取消删除磁盘功能,如 map (hd1) (hd1)。
  6. 目前 PXE 网启只支持 tftp。
  





点评

楼主, 建议提供一个样本PE,包括ISO镜像,包含某PE制作工具对应的完整包。 这样比较易学易用。 比较像grub4DOSmenu.lst那样  发表于 2023-7-22 11:13
有没有efi siso 模块啊?  发表于 2022-2-17 07:02
菜单目录更能不能自定义?  发表于 2022-1-7 21:32

评分

参与人数 128无忧币 +640 收起 理由
liangzr1976 + 5 很给力!
slyneo + 5 很给力!
jhdonline + 1 很给力!
1928374655 -1 赞一个!
msvcdll + 1 很给力!
天涯无痕 + 5 很给力!
kunpeng + 5
快雪时晴 + 1 很给力!
wawakuliao + 5 赞一个!
weiteng + 5 赞一个!
2012chenyuwen + 5 很给力!
xuxuezeng + 5 很给力!
f111 + 5 很给力!!!
994956737 + 1 很给力!
9001 + 5 致敬技术大神们!
szmsys + 5 很给力!
hzghgz + 5 赞一个!
ddngng + 5 很给力!
wwj402 + 5 很给力!
小妹 + 3
lpsyuntao + 1 赞一个!
ddianxing + 5 很给力!
defswffaaaawe + 1 赞一个!
robincai + 30 亲测非常好用!
wfccsqk + 2
ypf188 + 5 很给力!
a-lao + 5 很给力!
2011cwj6958 + 5 很给力!
榕龙 + 1 很给力!
amita + 5

查看全部评分

3191#
发表于 2 小时前 | 只看该作者
感谢楼主分享。。。。。。。
回复

使用道具 举报

3190#
发表于 前天 14:04 来自手机 | 只看该作者
張烈支持
回复

使用道具 举报

3189#
发表于 6 天前 | 只看该作者
感谢分享
回复

使用道具 举报

3188#
 楼主| 发表于 6 天前 来自手机 | 只看该作者
本身不能。可在无忧搜一搜,有方法。
回复

使用道具 举报

3187#
发表于 6 天前 | 只看该作者
怎么过安全启动呢楼主
回复

使用道具 举报

3186#
发表于 7 天前 | 只看该作者
好帖!!!
回复

使用道具 举报

3185#
发表于 2024-4-15 18:49:06 | 只看该作者
不才 发表于 2024-4-8 21:57
求教,在 EFIx64 模式下如何加载运行Memtest86+程序?
问题已解决!

EFI下分64与32位,互不通用的,常识
回复

使用道具 举报

3184#
发表于 2024-4-8 21:57:22 | 只看该作者
本帖最后由 不才 于 2024-4-10 11:31 编辑

求教,在 EFIx64 模式下如何加载运行Memtest86+程序?
问题已解决!

在闲鱼买了两根内存条,习惯性的使用Memtest86+内存测试程序(memtest86+-5.01.bin,最新版是7.0的 memtest32.bin)进行测试。在 Legacy Bios 模式下,通过g4d使用kernel加载可正常运行程序进行检测。但在 EFIx64 模式下,尝试通过 g4e 使用 kernel 加载却被提示不支持64位CPUs(可是在 Legacy Bios 模式下,通过g4d使用kernel加载没问题啊)。请教各位老师,在g4e中该如何加载运行Memtest86+程序呢?
Memtest86+ 主页:
http://www.memtest.org/#downiso
刚才在官网上认真阅读了相关说明,原来在UEFI模式下搞不定的原因是偶加载错了程序主体。都是想当然惹得祸哈。
在g4e下应该用kernel加载memtest64.efi(32位的则加载memtest32.efi)!在虚拟机上测试了一下,已经可以正常运行检测程序了。




memtest32.bin.gz

67.26 KB, 下载次数: 1, 下载积分: 无忧币 -2

memtest86+-5.01.bin.gz

54.5 KB, 下载次数: 1, 下载积分: 无忧币 -2

点评

EFI下分64与32位,互不通用的,常识  详情 回复 发表于 2024-4-15 18:49
回复

使用道具 举报

3183#
发表于 2024-3-28 09:39:59 | 只看该作者
2011yaya2007777 发表于 2020-12-23 10:54
谢谢你,这么详尽的解答,受教了!

楼主您好,请问,哪里有支持碎片的svbus下载喔?
回复

使用道具 举报

3182#
发表于 2024-3-27 23:58:12 | 只看该作者
2011yaya2007777 发表于 2020-12-29 16:03
那就算了吧,不管 SVBus 的碎片问题了,省省心吧。

请问,碎片问题,是不是解决不了噢?
svbus那边,有通知作者吗?
或者说,有没有第三方的支持碎片的其它驱动?
回复

使用道具 举报

3181#
发表于 2024-3-27 15:44:57 | 只看该作者
2011yaya2007777 发表于 2023-5-22 18:34
有希望。但是容量大了不易使用固定地址,恐怕不兼容SVbus了。

楼主,最新版的,是不是不兼容SVBUS了?
最近,我用“最新版的grub4dos-for_UEFI-2024-02-26.7z+SVBUS”挂载的盘,会出现数据丢失、数据损坏的情况。
================================================

楼主你好,有个问题困扰着小弟,能否帮忙看看:

小弟的需求是,开机后,系统能同时挂载几个差分的VHD:
windows10.vhd,  program.vhd,   data.vhd

//================================
网上的的一些做法是:创建开机启动的“计划任务”、创建开机启动的“Windows服务”。
但是,这些方法,都不能满足小弟的需求。(因为计划任务、Windows服务,这些在开机的启动流程中,都太后了。)
小弟需要的解决方案是:开机后,能最早的挂载(程序盘、数据盘)的VHD,越早越好。
//================================
请问楼主大侠,有好的解决方案吗?





回复

使用道具 举报

3180#
发表于 2024-3-22 09:21:35 | 只看该作者
下载
回复

使用道具 举报

3179#
发表于 2024-3-22 09:10:30 | 只看该作者
本帖最后由 hhh333 于 2024-4-7 21:38 编辑
2011yaya2007777 发表于 2024-3-20 20:31
目前只能从根目录查找。你可以在grldrstart.S里面更改,然后编译grub4dos。grldr在根目录很烦吗?

哈哈,grldr不烦。主要是用这个文件来装载bootmgr的,每一个PE对应一个mgr。而这个mgr是放在\BOOT下的。
譬如,我的PE安装到硬盘,其中一种方式就是改boot.ini的:
  1. [BOOT loader]
  2. timeout=10
  3. default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
  4. [operating systems]
  5. multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP/2003 (Boot to C:\Windows)" /noexecute=optin /fastdetect
  6. C:\BOOT\H3_AVL06.BIN="H3 Win10 PE 64"
  7. C:\BOOT\H3_AVL10.BIN="H3 Win10 PE"
  8. C:\BOOT\H3_AVL16.BIN="H3 Win8.1 PE 64"
  9. C:\BOOT\H3_AVL81.BIN="H3 Win8.1 PE"
  10. C:\BOOT\H3_AVL03.BIN="H3 Win2003 PE"
  11. C:\BOOT\H3_AVLW7.BIN="H3 Win7 PE"
  12. C:\BOOT\H3_AVLW8.BIN="H3 Win8 PE"
  13. C:\BOOT\H3_AVL64.BIN="H3 Win8 PE 64"
  14. C:\BOOT\H3_AVLIN.BIN="H3 Win2003 PE ExtTools-Built-In"
  15. C:\BOOT\H3_AVLRM.BIN="H3 Win2003 PE Non-RAM-Mode"
  16. C:\BOOT\H3_AVLNV.BIN="H3 Win2003 PE Native_Mode"
  17. C:\grldr="H3 Grub4DOS for NT5"
复制代码
对应关系是这样的:
  1. 硬盘启动器(grldr.mbr改名而来)-->指向的PE启动器---->对应的BCD-->对应的WIM------>对应的PE
  2.     H3_AVLW7.BIN------------------------>H3_MGRW7.BIN------>BW7-------->H3_7PE.WIM----->Win7PE
  3.     H3_AVLW8.BIN------------------------>H3_MGRW8.BIN------>BW8-------->H3_8PE.WIM----->Win8 PE
  4.     H3_AVL81.BIN------------------------->H3_MGR81.BIN------>B81---------->H3_81PE.WIM--->Win81 PE
  5.     H3_AVL10.BIN------------------------->H3_MGR10.BIN------>B10---------->H3_10PE.WIM--->Win10 PE
  6.     H3_AVL64.BIN------------------------->H3_MGR64.BIN------>B64---------->H3_864.WIM----->Win8 64 PE
  7.     H3_AVL16.BIN------------------------->H3_MGR16.BIN------>B16---------->H3_8164.WIM--->Win81 64 PE
  8.     H3_AVL06.BIN------------------------->H3_MGR06.BIN------>B06---------->H3_1064.WIM--->Win10 64 PE
  9.     H3_AVL11.BIN------------------------->H3_MGR11.BIN------>B11---------->H3_1164.WIM--->Win11 64 PE
复制代码


这样我就必须把H3_MGRxx.BIN必须复制一份放根目录下,显得有点多,当然也可以做成统一一个BCD,把这些都包含进去,但这需要二次选择不是?
回复

使用道具 举报

3178#
发表于 2024-3-21 10:58:09 | 只看该作者
不点 发表于 2024-3-21 04:38
你可以使用 wee,来取代 grldr.mbr。在 wee 的菜单中,你可以指定查找的位置。这样,就可以避免去修改和 ...

哦,感谢解答,我这技术肯定搞不定,我看下wee
回复

使用道具 举报

3177#
发表于 2024-3-21 04:38:30 | 只看该作者
hhh333 发表于 2024-3-20 18:19
想请教一个问题,以前我是用grldr.mbr来传统BIOS启动PE,但这个总是从启动盘的根下找文件,能不能从了目录 ...

你可以使用 wee,来取代 grldr.mbr。在 wee 的菜单中,你可以指定查找的位置。这样,就可以避免去修改和编译 grldr.mbr 了。

要编译 grldr.mbr,让它支持从子目录启动 grldr,这决不像看起来那么容易。是超高难度!基本可以认为是 “不可能做到” 的。这是因为,grldr.mbr 里面查找 grldr 的代码,是按照不同分区(卷)的格式来动态制作引导记录,然后再调用引导记录进行查找和引导的。每种卷的引导记录通常只有一个引导扇区(或少数几个扇区),已经经过了充分的优化,512 字节通常都用光了,很难再进行任何调整。即便你是汇编语言的超级高手,也难以修改了。这些引导扇区代码,都不包括引导子目录里面的 grldr。微软的引导扇区也不会去寻找子目录里面的 ntldr 或 bootmgr。如果要查找子目录,那么,单扇区的代码根本就不够,需要多扇区才行。那样的话,grldr.mbr 将会膨胀很多!所以,要想修改,工作量超级庞大,是不可想象的。wee 为何可以支持子目录?因为 wee 总共有 62 个扇区啊,空间大啊。任意多级子目录,wee 都支持。

wee 用于硬盘是没问题的,因为硬盘都支持 LBA。

wee 甚至也能用于优盘,因为现在的主板上的优盘 BIOS,差不多也都支持 LBA 了。如果你只是个人使用,碰上失败的概率不太大。在优盘上万一碰上失败,那就换成 fbinst 或者别的启动方式。

点评

哦,感谢解答,我这技术肯定搞不定,我看下wee  详情 回复 发表于 2024-3-21 10:58
回复

使用道具 举报

3176#
 楼主| 发表于 2024-3-20 20:31:16 来自手机 | 只看该作者
目前只能从根目录查找。你可以在grldrstart.S里面更改,然后编译grub4dos。grldr在根目录很烦吗?

点评

哈哈,grldr不烦。主要是用这个文件来装载bootmgr的,每一个PE对应一个mgr。而这个mgr是放在\BOOT下的。 譬如,我的PE安装到硬盘,其中一种方式就是改boot.ini的: 对应关系是这样的: 这样我就必须把H3_AVLx  详情 回复 发表于 2024-3-22 09:10
回复

使用道具 举报

3175#
发表于 2024-3-20 18:19:14 | 只看该作者
本帖最后由 hhh333 于 2024-3-20 18:28 编辑

想请教一个问题,以前我是用grldr.mbr来传统BIOS启动PE,但这个总是从启动盘的根下找文件,能不能从了目录中找文件?我如果要自己编译这个grldr.mbr要怎么做

点评

你可以使用 wee,来取代 grldr.mbr。在 wee 的菜单中,你可以指定查找的位置。这样,就可以避免去修改和编译 grldr.mbr 了。 要编译 grldr.mbr,让它支持从子目录启动 grldr,这决不像看起来那么容易。是超高难度  详情 回复 发表于 2024-3-21 04:38
回复

使用道具 举报

3174#
发表于 2024-2-29 10:46:06 | 只看该作者
2010VT8365A 发表于 2024-2-27 16:59
yaya大仙法力无边,目前用G4E可以启动原有G4D的系统镜像(F驱动)但是会有win7 7B 蓝屏和win10的 inaceesib ...

Firadisk已经完全落伍了。换SVBus。
回复

使用道具 举报

3173#
 楼主| 发表于 2024-2-28 10:06:48 来自手机 | 只看该作者
这几天网络抽风了
回复

使用道具 举报

3172#
发表于 2024-2-28 10:05:32 | 只看该作者
看看
回复

使用道具 举报

3171#
发表于 2024-2-28 09:55:31 | 只看该作者
本帖最后由 xianglang 于 2024-2-28 09:59 编辑

下载2024-02-26版(http://dl.grub4dos.chenall.net/grub4dos-for_UEFI-2024-02-26.7z)出错,出现如下提示信息(G4D也是一样):

{"error":"Document not found"}

Github 又经常访问困难,或者访问不了——Github刚才试了下,终于可以访问下载了。
回复

使用道具 举报

3170#
发表于 2024-2-27 20:45:41 | 只看该作者
谢谢大神的无私奉献!
回复

使用道具 举报

3169#
发表于 2024-2-27 17:01:50 | 只看该作者
F驱动 不兼容G4EFI吗?
回复

使用道具 举报

3168#
发表于 2024-2-27 17:00:53 | 只看该作者
(G4D启动镜像完全没问题) 需要换驱动吗
回复

使用道具 举报

3167#
发表于 2024-2-27 16:59:38 | 只看该作者
yaya大仙法力无边,目前用G4E可以启动原有G4D的系统镜像(F驱动)但是会有win7 7B 蓝屏和win10的 inaceesible boot device 请教如何解决(G4D启动完全没问题)

点评

Firadisk已经完全落伍了。换SVBus。  详情 回复 发表于 2024-2-29 10:46
回复

使用道具 举报

3166#
发表于 2024-2-22 17:48:00 | 只看该作者
学习一下
回复

使用道具 举报

3165#
发表于 2024-2-20 23:18:43 来自手机 | 只看该作者
感谢分享。
回复

使用道具 举报

3164#
 楼主| 发表于 2024-2-8 11:54:56 来自手机 | 只看该作者
boot是启动设备,root是根目录,或者说是跟设备。两者可能相同,也可能不同。比如从光盘启动,但是在光盘没有找到menu.lst,而是在硬盘找到了,那么这时boot=cd,root=(hd0,1)
回复

使用道具 举报

3163#
发表于 2024-2-8 09:42:46 | 只看该作者
还有一个问题就是?_BOOT和@root是不是有区别?是不是前者表示初始启动设备,后者表示当前启动设备,即开始是相同的,但如果用root命令改变了启动设备,只有@root更新,而?_BOOT不更新。
回复

使用道具 举报

3162#
发表于 2024-2-8 09:38:09 | 只看该作者
我觉得既然?_BOOT/@root表示启动设备就应该统一格式,CD启动时就是(cd)而不应该其他是ud/hd/rd/pd只有光盘才是0x16进制形式。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-25 11:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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