无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
1#
发表于 2020-11-9 16:41:46 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-9 16:51 编辑

加载菜单死机了。虚拟机和实机结果一样。但是删除menu.lst,或者把menu.lst改名为menu1.lst 都能进入命令行。
不知道是不是只有我有这个问题。。。

而且不能加载 .mod文件,显示 unvalid support ... (记不全了)。上传我使用用到的文件。
实际上我想加载 menu_bios_utf8.lst这个文件(bios启动时是集成到了grldr)。但是没反应,我以为是其中的命令有影响。所以把认为有影响的命令去掉了。

是不是菜单下面命令还有影响?如果要改成兼容模式需要怎么处理?


新建截图-20201109162647.jpg (22.42 KB, 下载次数: 107)

新建截图-20201109162647.jpg

IMG_20201109_162950.jpg (1.08 MB, 下载次数: 105)

IMG_20201109_162950.jpg

GRUB.rar

998.48 KB, 下载次数: 36, 下载积分: 无忧币 -2

回复

使用道具 举报

2#
发表于 2020-11-9 17:01:51 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-9 17:10 编辑
xianglang 发表于 2020-11-9 16:13
今天又试了无数次,证实是支持 LZMA 压缩格式的;另外,也与按 F11 选择启动方式无关。另外,微 PE 等 ISO  ...

我猜测是不是一些命令不能在uefi下面运行,导致没反应死机了。。。

建议uefi版本尽量兼容以前的菜单命令,如果该命令不能运行,应该直接退出。。。
如果不能实现兼容以前的命令,建议uefi版本默认还是用新的启动菜单文件吧。同时应该列出不兼容的命令以便编写菜单文件。
如果简单一点,遇到调用该命令出错,或者外部命令出错,直接下一步命令。

回复

使用道具 举报

3#
发表于 2020-11-9 17:11:17 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-9 17:38 编辑
2011yaya2007777 发表于 2020-11-9 17:04
在UEFI环境测试BIOS的东西!
启动EFI文件或者硬盘、光盘。

虚拟机和实机都是uefi启动。请看截图,grub for uefi。
实际上加载menu1.lst或者menu_bios_utf8.lst菜单文件,uefi版本就死机了,不知道我有没有说清楚问题。
menu1.lst 是menu_bios_utf8.lst的去掉几个我认为不支持的命令(认为可能导致死机)
menu0.lst是grldr自带的文件,这个加载不死机,出现了命令行。进入命令行后,执行 insmod /boot/grub/all.mod,出现一个错误提示。并没有加载该文件。

实际上menu_bios_utf8.lst  bios启动并无问题。

其实我的意思就是uefi版本能不能兼容以前的菜单文件。如果不兼容什么命令,这个开发者能不能作出声明。
顺便贴上我的menu_bios_utf8.lst  菜单文件吧

#password --md5 $1$qM1n/$b7DVx3WMmvrcVq8UTI9sn1
pxe detect
debug off
timeout 4
checkrange 0x80 read 0x8280 || timeout 8
default 0
cat --length=0 /boot/grub/all.mod || find --set-root /boot/grub/all.mod
cat --length=0 /boot/default && default /boot/default
insmod /boot/grub/all.mod && bpri
font /boot/grub/UNIFONT.HEX
terminal --font-spacing=0:6
graphicsmode -1 640 480 24:32 || graphicsmode 3
menuset m 48 8 0
color white/black white/black light-red/black 0
bgac /boot/grub/bg

title   Windows 硬盘系统\n\n备份恢复:F4=IMAGE F5=GHOST    F9-F10:PE维护\n启动分区:C_F1-F4=第x主分区    C_F9  :最后分区
cat --length=0 /boot/default && savedefault
find --set-root --devices=h makeactive --status || rootnoverify (hd0,0)
checkrange 0x17,0x1c,0x1b parttype && unhide
rootnoverify
chainloader /gr1dr || chainloader /bootmgr || chainloader /ntldr || chainloader +1
boot

iftitle [ if exist (bd)/boot/iso/win10pe_18363x64全能网络版pe.iso ]   启动 Win10PE_18363x64全能网络版\n\n
fallback 0
run /boot/iso/win10pe_18363x64全能网络版pe.iso
boot

iftitle [ if exist (bd)/boot/iso/我心如水_2003_pe_v19.36_珍藏版.iso ]   启动 我心如水_2003_PE_v19.36_珍藏版\n\n
fallback 0
run /boot/iso/我心如水_2003_pe_v19.36_珍藏版.iso
boot

iftitle [ if exist (bd)/boot/iso ]   进入 (bd)/boot/iso手动选择\n\n
fallback 0
run (bd)/boot/iso/
boot

iftitle [ if exist (bd)/boot/veket/vmlinuz ]   启动 VEKET 系统\n\n
fallback 0
cat --length=0 /boot/default && savedefault
kernel /boot/veket/vmlinuz pmedia=cd
initrd /boot/veket/initrd.gz
boot

iftitle [ if exist (bd)/boot/ipxe.krn ]   启动 IPXE\n\n
fallback 0
cat --length=0 /boot/default && savedefault
kernel /boot/ipxe.krn
boot

点评

再贴上简化的menu1.lst,我其实不知道为什么不出来菜单,而是死机。。。 #password --md5 $1$qM1n/$b7DVx3WMmvrcVq8UTI9sn1 debug on timeout 4 default 0 cat --length=0 /boot/grub/all.mod || find --set-  详情 回复 发表于 2020-11-9 17:43
回复

使用道具 举报

4#
发表于 2020-11-9 17:43:07 | 显示全部楼层
cchessbd 发表于 2020-11-9 17:11
虚拟机和实机都是uefi启动。请看截图,grub for uefi。
实际上加载menu1.lst或者menu_bios_utf8.lst菜单 ...

再贴上简化的menu1.lst,我其实不知道为什么不出来菜单,而是死机。。。

#password --md5 $1$qM1n/$b7DVx3WMmvrcVq8UTI9sn1
debug on
timeout 4
default 0
cat --length=0 /boot/grub/all.mod || find --set-root /boot/grub/all.mod
cat --length=0 /boot/default && default /boot/default
font /boot/grub/UNIFONT.HEX
graphicsmode -1 800 640 24:32 || graphicsmode -1 600 480 24:32 || graphicsmode 3
color white/black white/black light-red/black 0

title   Windows 硬盘系统\n\n备份恢复:F4=IMAGE F5=GHOST    F9-F10:PE维护\n启动分区:C_F1-F4=第x主分区    C_F9  :最后分区
cat --length=0 /boot/default && savedefault
find --set-root --devices=h makeactive --status || rootnoverify (hd0,0)
checkrange 0x17,0x1c,0x1b parttype && unhide
rootnoverify
chainloader /gr1dr || chainloader /bootmgr || chainloader /ntldr || chainloader +1
boot

iftitle [ if exist (bd)/boot/iso/win10pe_18363x64全能网络版pe.iso ]   启动 Win10PE_18363x64全能网络版\n\n
fallback 0
run /boot/iso/win10pe_18363x64全能网络版pe.iso
boot

iftitle [ if exist (bd)/boot/iso/我心如水_2003_pe_v19.36_珍藏版.iso ]   启动 我心如水_2003_PE_v19.36_珍藏版\n\n
fallback 0
run /boot/iso/我心如水_2003_pe_v19.36_珍藏版.iso
boot

iftitle [ if exist (bd)/boot/iso ]   进入 (bd)/boot/iso手动选择\n\n
fallback 0
run (bd)/boot/iso/
boot

iftitle [ if exist (bd)/boot/veket/vmlinuz ]   启动 VEKET 系统\n\n
fallback 0
cat --length=0 /boot/default && savedefault
kernel /boot/veket/vmlinuz pmedia=cd
initrd /boot/veket/initrd.gz
boot

iftitle [ if exist (bd)/boot/ipxe.krn ]   启动 IPXE\n\n
fallback 0
cat --length=0 /boot/default && savedefault
kernel /boot/ipxe.krn
boot
回复

使用道具 举报

5#
发表于 2020-11-9 19:56:54 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-9 20:42 编辑
2011yaya2007777 发表于 2020-11-9 18:50
菜单可以在命令行一条一条地输入,看看哪条死机。

uefi模式下,确定把 graphicsmode这行命令注释就不死机了,但是菜单显示起始位置不统一。又注释了 menuset这行,显示依旧不统一。文本菜单模式下按c进入命令行,

1、测试root,显示(0xa0),执行第一项菜单后无法启动,按c进入命令行,root,显示不了root启动设备。这不知道是不是root命令在uefi模式有问题。2、测试直接加载 .mod文件不成功,里面就是几个外部文件,hotkey等。。。 insmod 命令在uefi模式有问题
3、boot启动 /boot/ipxe.krn,启动不了。。。以上测试是qemu虚拟机下。boot命令在uefi模式有问题
uefi模式下可以编辑每个菜单命令。

以下是正常bios启动界面,uefi启动界面对比。附上使用的菜单文件。





uefi启动界面-20201109200136.jpg (19.89 KB, 下载次数: 124)

菜单首行没有对齐,不知道为啥不显示中文

菜单首行没有对齐,不知道为啥不显示中文

bios-20201109200031.jpg (42.88 KB, 下载次数: 113)

bios-20201109200031.jpg

新建截图-20201109195516.jpg (41.72 KB, 下载次数: 118)

有问题的命令

有问题的命令

menu.lst.txt

1.74 KB, 下载次数: 14, 下载积分: 无忧币 -2

点评

在UEFI下用bios的东西?  详情 回复 发表于 2020-11-10 15:25
回复

使用道具 举报

6#
发表于 2020-11-9 20:41:28 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-9 21:19 编辑
2011yaya2007777 发表于 2020-11-9 20:28
不支持ipxe,不支持kernel。    死机的图形模式命令,后面紧跟 -1 800就行了。置顶菜单sili

我又按您的输入试了,qemu虚拟机下执行 graphicsmode  -1 800又死机了。实机之前也是graphicsmode 这行命令死机。等我量产一下usb光驱,进入实机试一试。。。现在我拿u盘的量产光驱,实机加载文本菜单界面后,运行graphicsmode  -1 800后死机黑屏无任何提示,没有截图。

另外发现了实机启动后汉字又显示了,但是显示不全;
实机root设备是(fd0),而虚拟机启动root设备是(0xa0);
实机chainloader /boot/bootx64.efi,boot成功运行,但是无法启动进入win10 x64 pe,错误提示0xc000000e,没有进入加载wim文件过程这一步。
机子主板是 微星z390i。实机用模拟fd0启动软盘(微软的bootx64.efi)做usb光驱的efi引导文件,uefi启动win10 x64 pe没有问题。
又用虚拟机测试以上chainloader /boot/bootx64.efi过程,直接黑屏死机了。

当然本身qemu虚拟机也是不能进入win10 x64 pe的,不过虚拟机用微软的bootx64.efi放置启动软盘内(不经过 grub uefi调用),有加载过程及win图标出现,然后不动(见图);而虚拟机进入grub uefi 命令行,chainloader /boot/bootx64.efi,无加载过程及win图标出现



debug-20201109203719.jpg (42.3 KB, 下载次数: 143)

执行 graphicsmode -1 800

执行 graphicsmode  -1 800

debug-20201109203803.jpg (18.08 KB, 下载次数: 213)

执行 graphicsmode -1 800又死机

执行 graphicsmode  -1 800又死机

IMG_20201109_204912.jpg (716.15 KB, 下载次数: 206)

加载bootx64.efi,能boot不能进入pe

加载bootx64.efi,能boot不能进入pe

IMG_20201109_204957.jpg (1.08 MB, 下载次数: 201)

boot后出错界面

boot后出错界面

IMG_20201109_204447.jpg (1017.6 KB, 下载次数: 197)

实际又能显示汉字,缺一汉字(虚拟机无汉字)

实际又能显示汉字,缺一汉字(虚拟机无汉字)

新1-20201109210339.jpg (42.9 KB, 下载次数: 209)

虚拟机测试以上chainloader /boot/bootx64.efi过程,直接黑屏死机

虚拟机测试以上chainloader /boot/bootx64.efi过程,直接黑屏死机

新2-20201109210339.jpg (22.31 KB, 下载次数: 216)

虚拟机微软bootx64.efi直接加载过程截图

虚拟机微软bootx64.efi直接加载过程截图

新3-20201109210836.jpg (19.88 KB, 下载次数: 211)

虚拟机微软bootx64.efi直接加载出现此图标后死机

虚拟机微软bootx64.efi直接加载出现此图标后死机
回复

使用道具 举报

7#
发表于 2020-11-9 21:44:59 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-9 21:58 编辑
2011yaya2007777 发表于 2020-11-9 20:54
在命令行执行graphicsmode,就知道支持不支持图形模式,知道支持什么尺寸。

我的猜测是yaya老大没有完全模拟微软bootx64.efi启动过程(efisys.bin是软驱fd0文件格式,bootx64.efi启动是在fd0,从usb光驱uefi启动后,加载fd0内的bootx64.efi,此文件会去光驱查找启动相关必需文件,注意:实机是进入了pe的);
但是实机启动grub for uefi的(替换了efisys.bin中的此文件),启动后整个usb光驱变为fd0,没有光驱了,这样微软的bootx64.efi自然无法查找启动文件。同时实机我用ls命令探测了 (cd0) (cd1) (a0)都没有找到,这就是出现0xc000000e错误提示的根本原因。
不知道yaya大怎么解决这一问题,不然真的没法用grub for uefi。是应该再模拟一个cd0,还是要grub for uefi运行后不把光驱模拟为fd0。。。
同时实机uefi模式,chainloader +1命令也有问题(可能是我想在uefi下运行dos,想多了)。见图


IMG_20201109_213100.jpg (635.68 KB, 下载次数: 109)

实机探测光驱不存,整个光驱被模拟为fd0。

实机探测光驱不存,整个光驱被模拟为fd0。

IMG_20201109_213428.jpg (1.08 MB, 下载次数: 112)

chainloader +1 无法执行

chainloader +1 无法执行
回复

使用道具 举报

8#
发表于 2020-11-9 22:16:05 | 显示全部楼层
2011yaya2007777 发表于 2020-11-9 21:37
实机你是使用量产的cdrom起动的,怎么会被识别为软盘?它有启动镜像efi没有?你的U盘是不是还有一个量产单元 ...

没有其他软驱,就一个usb光驱。量产光驱用的iso是有启动镜像efi的。bios启动正常,用微软的efisys.bin做efi启动镜像也正常(usb光驱可以正常双启)
回复

使用道具 举报

9#
发表于 2020-11-9 22:16:52 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-9 22:19 编辑

chainloader应该也是有问题的,无法加载其他文件,但是(fd0)/boot/bootx64.efi可以加载。实机无法加载(hd1,1)的文件,也无法加载fd0的文件bootmgr bootmgr.efi。出错提示见图


IMG_20201109_221149.jpg (769.45 KB, 下载次数: 115)

无法加载启动文件

无法加载启动文件
回复

使用道具 举报

10#
发表于 2020-11-9 22:36:39 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-10 08:23 编辑
2011yaya2007777 发表于 2020-11-9 21:37
实机你是使用量产的cdrom起动的,怎么会被识别为软盘?它有启动镜像efi没有?你的U盘是不是还有一个量产单元 ...

我先用 map (fd0) (cd0)  chainloader (fd0)/boot/bootx64.efi,boot启动后,仍然是0xc000000e的错误提示。
但是现在的 map (fd0) (fd1)啥的 没作用了,模拟cd0后,对微软的bootx64.efi无效。也就是说实机启动grub uefi后,模拟(fd0) 为(cd0)这条路不通。
看来只能是 grub for uefi启动后自身bootx64.efi在 fd1,加载其他引导文件时,模拟fd0,放入该文件,然后启动,实机设备不动。这样估计就没问题了。
回复

使用道具 举报

11#
发表于 2020-11-11 12:28:23 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-11 12:39 编辑
2011yaya2007777 发表于 2020-11-9 20:54
在命令行执行graphicsmode,就知道支持不支持图形模式,知道支持什么尺寸。

不知道yaya大有没有认真看我的贴,那我再说一下遇到uefi版本的问题吧,虚拟机的暂且不管。。。
1.实机命令行执行graphicsmode死机,执行graphicsmode -1 800也死机,死机都是黑屏无任何提示,菜单debug on打开也无任何提示,注释这个命令的话,就可以出现文本菜单。见343楼
2.实机启动后usb光驱变为(fd0),找不到(cd0) (cd1),chainloader能正常启动efi/boot/bootx64.efi,不能启动/bootmgr.efi,启动bootx64.efi后无法进入win10 pe,出现0xc000000e的错误,没有进入加载wim的过程。(虚拟机有0xa0光驱,没有出现0xc000000e的错误,进入了加载wim的过程)见343楼。
(不能启动/bootmgr.efi见348楼图片)
3.实机执行以下菜单项后不是进入win系统,按c进入命令行,root,找不到root设备了.bios版本无影响正常启动进入win.
title   Windows 硬盘系统
cat --length=0 /boot/default && savedefault
find --set-root --devices=h makeactive --status || rootnoverify (hd0,0)
checkrange 0x17,0x1c,0x1b parttype && unhide
rootnoverify
chainloader /gr1dr || chainloader /bootmgr || chainloader /ntldr || chainloader +1
boot

4.实机菜单又能显示汉字,但缺一汉字(虚拟机无汉字),文本菜单横向也没有对齐。见340楼图。

其实这些都是影响使用的问题。还是希望能得到解决吧。如果可以希望yaya贴一个完整的启动菜单,列举几项菜单,启动进入win,启动第二硬盘,启动iso,启动img,启动efi等。因为我不知道chainloader 出错了了n次,不知道怎么用了。。。
我觉得不应该要用户去试错,然后来嘲笑说用户不会用。。。
所以我建议:uefi版本尽量兼容以前的菜单命令,如果该命令不能运行,应该直接退出,或者应该采用不同的菜单文件名。
第2项我不知道是不是普遍现象,所以这个需要会量产的拿uefi版本再试一试。


点评

bootmgr.efi本来就不是efi可执行程序,不能启动。 (fd0)是光盘的El Torito软盘镜像。 uefi固件没有认出来光盘,只认出了里面的软盘镜像,当然启动不了。 这个菜单本来就只能在BIOS下用。grldr, bootmfr,  详情 回复 发表于 2020-11-11 13:18
回复

使用道具 举报

12#
发表于 2020-11-11 13:26:52 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-11 13:34 编辑
wintoflash 发表于 2020-11-11 13:18
bootmgr.efi本来就不是efi可执行程序,不能启动。

谢谢您的解释,如果不能用bios的那套,那grub uefi下怎么启动windows呢。怎么启动某个分区?
启动img是不是只能是硬盘镜像,还是chainloader (hd0)+1之类的吗 ?

点评

启动windows应该是 chainloader /EFI/Microsoft/Boot/bootmgfw.efi 这样子,不过现在好象还不行,还要耐心等。 启动某个分区,特别是(hd0)+1之类,是bios启动的那一套,是扇区引导;而uefi不用这一套的,是直接文  详情 回复 发表于 2020-11-11 15:39
回复

使用道具 举报

13#
发表于 2020-11-11 13:29:39 | 显示全部楼层
本帖最后由 cchessbd 于 2020-11-11 13:31 编辑
2011yaya2007777 发表于 2020-11-11 12:56
cchessbd:1. 你的设备不支持图形模式。至于为什么不正常退出而死机,待查。可是第四项你能显示汉字,奇怪 ...

我注释了graphicsmode,uefi没有进入图形模式,是文本菜单显示了汉字。正常显示了图片加汉字的是bios启动后的菜单。bios菜单是集成到了grldr的。uefi加载menu.ls,bios不加载。
回复

使用道具 举报

14#
发表于 2020-11-11 21:31:52 | 显示全部楼层
hilsonma 发表于 2020-11-11 15:39
启动windows应该是 chainloader /EFI/Microsoft/Boot/bootmgfw.efi 这样子,不过现在好象还不行,还要耐 ...

谢谢解惑,我又研究了下Ventoy,也启动不了win,uefi启动可能还需要修复硬盘的bcd,如果有多个主分区,多个系统,每个系统分区隐藏不一样的情况下,麻烦事一堆,uefi从硬盘启动win那只好放弃了。那这样目前就好像只能采用微软的bootx64.efi来启动pe吧,这样兼容性强一些。毕竟就弄一个pe维护算了。不过Ventoy启动wim,iso都挺方便的。也可以做成uefi启动。Ventoy做usb硬盘的uefi启动不错。

点评

你得先保证自己的windows系统是安装在gpt分区上的,有ESP分区,ESP分区里面有bootmgfw.efi,才可能支持UEFI启动 (不接受抬杠)  详情 回复 发表于 2020-11-11 21:54
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-14 21:22

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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