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

[原创] GRUB4DOS for UEFI

   火... [复制链接]
发表于 2023-3-14 14:58:23 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2023-3-14 16:05:22 | 显示全部楼层
本帖最后由 sunsea 于 2023-3-14 16:07 编辑
wintoflash 发表于 2023-3-14 14:52
能。
创建一个img(软盘镜像,无分区表),格式化成FAT。
创建\EFI\BOOT\

EFI现在还是以加载一个软盘镜像来启动这样为主的嘛?没有BIOS时代的非模拟启动了?

点评

这里所说的“软盘镜像”只是种便于理解的说法。跟什么1.44MB 软盘,dos,引导扇区,模拟启动之类的毫无关系。 是个含有FAT文件系统和efi文件的磁盘镜像就行,跟u盘启动要求一样。 你主板的uefi支持ntfs的话那ntf  详情 回复 发表于 2023-3-14 16:15
回复

使用道具 举报

发表于 2023-3-14 16:15:07 | 显示全部楼层
sunsea 发表于 2023-3-14 16:05
EFI现在还是以加载一个软盘镜像来启动这样为主的嘛?没有BIOS时代的非模拟启动了?


这里所说的“软盘镜像”只是种便于理解的说法。跟什么1.44MB 软盘,dos,引导扇区,模拟启动之类的毫无关系。
是个含有FAT文件系统和efi文件的磁盘镜像就行,跟u盘启动要求一样。
你主板的uefi支持ntfs的话那ntfs格式也行。主板支持iso9660的话连这个镜像都省了(比如vbox)。
我说“不带分区表"也不是绝对的。带分区表的普通硬盘镜像也行。就是grub4dos在map启动它的时候不高兴。

点评

原来如此,就是一般情况下UEFI SimpleFile那玩意只能理解FAT不能理解iso9660但又要找个完整.efi文件启动所以整个FAT镜像在这是吧……明白了,谢谢  详情 回复 发表于 2023-3-14 16:18
回复

使用道具 举报

发表于 2023-3-14 16:18:28 | 显示全部楼层
wintoflash 发表于 2023-3-14 16:15
这里所说的“软盘镜像”只是种便于理解的说法。跟什么1.44MB 软盘,dos,引导扇区,模拟启动之类的毫无 ...

原来如此,就是一般情况下UEFI SimpleFile那玩意只能理解FAT不能理解iso9660但又要找个完整.efi文件启动所以整个FAT镜像在这是吧……明白了,谢谢
回复

使用道具 举报

发表于 2023-3-14 16:45:28 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

 楼主| 发表于 2023-3-14 18:52:27 来自手机 | 显示全部楼层
现在g4e也支持光盘启动镜像使用硬盘模式。    使用UltraISO Premium 9.71 及以上版本,可以制作UEFI可启动ISO,加载 EFI 引导映像文件(Ctrl+Alt+I)  。
回复

使用道具 举报

发表于 2023-3-14 19:34:44 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2023-3-19 13:48:47 | 显示全部楼层
2023-03-19
尝试支持 iPXE wimboot。
grub4dos-for_UEFI-2023-03-19
http://grub4dos.chenall.net/down ... or_UEFI-2023-03-19/
需要使用修改的 wimboot:
(源码) https://github.com/grub4dos/wimboot
wimboot.zip (46.6 KB, 下载次数: 71)
BCD 等文件 (仅供参考):
bootmgfw.zip (1.19 MB, 下载次数: 93)
测试菜单 (仅供参考):
  1. title Wimboot
  2. find --set-root /EFI/grub/wimboot | set x=
  3. kernel /EFI/grub/wimboot
  4. find --set-root /winpe.wim
  5. initrd @bootmgfw.efi=%x%/EFI/grub/bootmgfw.efi
  6. initrd @bcd=%x%/EFI/grub/bcd
  7. initrd @boot.sdi=%x%/EFI/grub/boot.sdi
  8. initrd @wgl4_boot.ttf=%x%/EFI/grub/wgl4_boot.ttf
  9. initrd @aaaa.bat=%x%/EFI/grub/start.bat
  10. initrd @boot.wim=/winpe.wim
复制代码

1.png

点评

这个用于ipxe启动的菜单menu.lst,应该放在哪里?(pd)\EFI\grub\menu.lst? 好像找不到菜单啊?  详情 回复 发表于 2023-5-7 10:03
注入的 aaaa.bat 需 pecmd调用下 或者直接 当传递文本参数  详情 回复 发表于 2023-3-22 12:04

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

发表于 2023-3-22 12:04:53 | 显示全部楼层
wintoflash 发表于 2023-3-19 13:48
2023-03-19
尝试支持 iPXE wimboot。
grub4dos-for_UEFI-2023-03-19

注入的 aaaa.bat    需 pecmd调用下
或者直接 当传递文本参数

点评

我知道。这个就是用来测试注入是否成功的。  详情 回复 发表于 2023-3-22 13:11
回复

使用道具 举报

发表于 2023-3-22 13:11:05 | 显示全部楼层
2011whp 发表于 2023-3-22 12:04
注入的 aaaa.bat    需 pecmd调用下
或者直接 当传递文本参数

我知道。这个就是用来测试注入是否成功的。
回复

使用道具 举报

发表于 2023-3-22 13:44:25 | 显示全部楼层
很厉害的东西,支持一下
回复

使用道具 举报

发表于 2023-3-29 10:58:53 | 显示全部楼层

g4e  2023-3-14  启动不了 抄作业  贴的 深度livecd了


————————————————————————————————————————————

title 启动 深度liveCD文件
kernel /src/vmlinuz boot=live findiso=/src/l.iso components quiet splash
initrd /src/initrd.img

下载地址:https://www.deepin.org/zh/download/  页面最下面
关键步骤:从livecd光盘内 的live目录提取上面涉及的两个文件,还有修改findiso参数的值。
—————————————————————————————————————————————
回复

使用道具 举报

发表于 2023-3-29 11:00:03 | 显示全部楼层
深度 liveCD 下面方法  也能启动,说明 菜单没变,findiso= 有效,
深度 liveCD,是刚下载的,默认是 cdfs光盘

实机:g4e  2023-3-14       深度 liveCD    转shell下启动

1. map  /src/l.iso (0xff)
2. 转shellx64:chainloader /shellx64.efi  && boot
3. shell下:map -b 找见 venhw开头的光盘efisysy
               fs1:
               \efi\grub\bootx64.efi
4. 来到光盘内的 grub.cfg菜单
      按e键  编辑  添加 findiso=/src/l.iso
      按 F10 启动
5.  可以启动
回复

使用道具 举报

发表于 2023-3-30 12:44:25 来自手机 | 显示全部楼层
支持一下
回复

使用道具 举报

 楼主| 发表于 2023-3-30 15:57:45 | 显示全部楼层
ubuntu-18.04.6-desktop-amd64.iso启动分析

方法1.
虚拟机挂载ubuntu-18.04.6-desktop-amd64.iso启动
可以进入包含‘用户名’‘密码’的界面。应该是启动成功了。

方法2.
title ubuntu-18.04.6-desktop-amd64.iso
find --set-root /boot/imgs/ubuntu-18.04.6-desktop-amd64.iso
map /boot/imgs/ubuntu-18.04.6-desktop-amd64.iso (0xff)
chainloader (0xff)

以前以为进入红背景界面(有循环渐进的点),就是启动成功了,其实是误判。
过了这个界面,提示如下:
[    67.49145] blk_update_request: I/O error. dev fd0. sector 0 op  0x0:(READ) f1
ags 0x0 phys_seg 1 prio class 0

BusyBox v1.27.2  (Ubuntu 1:1.27.2-2ubuntu3.3) built-in shell (ash)
Enter 'help' for a list of built-in command.
(initramfs)

方法3.
title /linux1/ubuntu/ubuntu-18.04.6-desktop-amd64.iso
debug 3
find --ignore-floppies --ignore-cd --set-root /boot/imgs/ubuntu-18.04.6-desktop-amd64.iso
map /boot/imgs/ubuntu-18.04.6-desktop-amd64.iso (hd32)
map --hook
kernel (hd32)/casper/vmlinuz boot=casper iso-scan/filename=/boot/imgs/ubuntu-18.04.6-desktop-amd64.iso noprompt noeject
initrd (hd32)/casper/initrd
boot

提示如下:
[      3.290560] ---[ end Kernel panic - not syncing: vfs: unable to mount root fs on unknown-block(0,0) ]  


探讨几个问题:
1. 方法1与方法2都是加载ISO内启动软盘镜像中的bootx64.efi,但是一个成功另一个失败。
方法2加载的(0xff),好像kernel不认识。
如果使用以下方法:
chainloader (0xff)/efi/boot/bootx64.efi boot=casper iso-scan/filename=/boot/imgs/ubuntu-18.04.6-desktop-amd64.iso noprompt noeject
kernel反馈:打不开\boot\imgs\ubuntu-18.04.6-desktop-amd64.iso
或许是kernel根本不理会UEFI建立的设备,而是抛弃UEFI环境,直接加载自己的驱动,然后探测有那些存在的设备,其中有没有传入指定的设备存在?
或许是kernel根本不理会UEFI建立的VenHw(EBE35AD9-40F5-AADE-0B919A46BF4b)/CDROM(1,11c,B40)这样类型的设备,
而只认PciRoot(0)/Pci(1,1)/Ata(S,M,0)/CDROM(1,11c,B40)这样类型的设备?

2.方法3失败,是传入的参数缺失或是不正确?我觉得这是启动linux最麻烦的地方,每个分支的都不一样,而且同一分支的不同序号也不同。

3.怎样才能成功启动linux光盘?请各路神仙多多指教!

点评

你这用的是哪个版本的g4e?你最新编译的最新alpha/beta测试版本吗? ubuntu版本是18吗?  详情 回复 发表于 2023-4-4 21:46
操作系统调用 BS->ExitBootServices 之后,所有的 UEFI 启动服务就都不能用了,BlockIo,GOP 之类的所有这些 Protocol 也不能用了。 操作系统是用自带的驱动自己探测,并读写硬盘的。 (0xff)/efi/boot/bootx64.e  详情 回复 发表于 2023-4-1 09:42
回复

使用道具 举报

发表于 2023-3-30 17:34:18 | 显示全部楼层
map问题:   
方法2  能到  Enter 'help' for a list of built-in command. && (initramfs)
          说明 map已经好了,(像map win.iso 不能安装完)
          临时编辑 grub菜单 加入 iso-scan/filename=/boot/imgs/ubuntu-18.04.6-desktop-amd64.iso 即好了


kernel问题:
        http://bbs.wuyou.net/forum.php?m ... &fromuid=413782
回复

使用道具 举报

发表于 2023-4-1 09:42:56 | 显示全部楼层
本帖最后由 wintoflash 于 2023-4-1 09:46 编辑
2011yaya2007777 发表于 2023-3-30 15:57
ubuntu-18.04.6-desktop-amd64.iso启动分析

方法1.
1. 方法1与方法2都是加载ISO内启动软盘镜像中的bootx64.efi,但是一个成功另一个失败。
方法2加载的(0xff),好像kernel不认识。
如果使用以下方法:
chainloader (0xff)/efi/boot/bootx64.efi boot=casper iso-scan/filename=/boot/imgs/ubuntu-18.04.6-desktop-amd64.iso noprompt noeject
kernel反馈:打不开\boot\imgs\ubuntu-18.04.6-desktop-amd64.iso
或许是kernel根本不理会UEFI建立的设备,而是抛弃UEFI环境,直接加载自己的驱动,然后探测有那些存在的设备,其中有没有传入指定的设备存在?
或许是kernel根本不理会UEFI建立的VenHw(EBE35AD9-40F5-AADE-0B919A46BF4b)/CDROM(1,11c,B40)这样类型的设备,
而只认PciRoot(0)/Pci(1,1)/Ata(S,M,0)/CDROM(1,11c,B40)这样类型的设备?

操作系统调用 BS->ExitBootServices 之后,所有的 UEFI 启动服务就都不能用了,BlockIo,GOP 之类的所有这些 Protocol 也不能用了。
操作系统是用自带的驱动自己探测,并读写硬盘的。
(0xff)/efi/boot/bootx64.efi 是 GRUB2 的 EFI 文件。你给它传参数是没用的,要直接传给内核。
2.方法3失败,是传入的参数缺失或是不正确?我觉得这是启动linux最麻烦的地方,每个分支的都不一样,而且同一分支的不同序号也不同。

方法三是正确的。报错是找不到 initrd。原因是你用的 Ubuntu 版本太老了。用 Ubuntu 22.04 就没问题。
老的 linux 内核,支持 EFI Handover,不支持 LoadFile2。新的 linux 内核,支持 LoadFile2,不支持 EFI Handover。
以前 G4E 用的是 EFI Handover,现在用的是 LoadFile2。

点评

感觉大佬的解释不太对呢?从时间逻辑上看不太对,因为2023-03-11放弃使用 EFI Handover Protocol 启动 Linux,改用 LoadFile2 提供 initrd 加载功能。但我测试成堆的grub4dos-for_UEFI, grub4dos-for_UEFI-202  详情 回复 发表于 2023-4-4 15:32
回复

使用道具 举报

 楼主| 发表于 2023-4-1 10:55:26 来自手机 | 显示全部楼层
不知有没有必要同时支持两个协议?这样可以兼顾新老版本,如果不复杂的话。
回复

使用道具 举报

发表于 2023-4-1 10:58:50 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

发表于 2023-4-2 15:52:37 | 显示全部楼层
本帖最后由 2011whp 于 2023-4-2 15:54 编辑

看见 ntloader式 启动 老式linunx( g4e的 2023-3-29版)

果然是 可以的,希望 wintoflash 重申 用法: 较系统的 说法。

如下:
————————————————————————————————————————————

title 启动 深度liveCD文件
kernel /src/vmlinuz boot=live findiso=/src/l.iso components quiet splash initrd=/src/initrd.img

下载地址:https://www.deepin.org/zh/download/  页面最下面
关键步骤:从livecd光盘内 的live目录提取上面涉及的两个文件,还有修改findiso参数的值。
—————————————————————————————————————————————
回复

使用道具 举报

发表于 2023-4-2 22:02:26 | 显示全部楼层
很给力,下载收藏!
回复

使用道具 举报

发表于 2023-4-3 11:26:54 | 显示全部楼层
给力!
收藏此贴!
回复

使用道具 举报

发表于 2023-4-3 20:01:18 | 显示全部楼层
本帖最后由 chen463 于 2023-4-4 21:54 编辑

问题已经解决
2023-04-03_190947.png

点评

Windows系统文件夹在哪个分区,就传递哪个分区的 UUID。 反馈的内容要具体。 ========= 如果系统启用了 Hyper-V / UWF / Bitlocker 之类的东西,就没法用这些第三方启动。  详情 回复 发表于 2023-4-3 21:00
回复

使用道具 举报

发表于 2023-4-3 21:00:08 | 显示全部楼层
chen463 发表于 2023-4-3 20:01
请教各位前辈大大,我使用2023.3.29-G4D_UEFI版,在启动 Windows 系统时,17-18-21项都无法成功启动,是我操 ...

Windows系统文件夹在哪个分区,就传递哪个分区的 UUID。
17-18-21项都无法成功启动

反馈的内容要具体。
=========
如果系统启用了 Hyper-V / Bitlocker 之类的东西,就没法用这些第三方启动。

点评

title 使用外部命令 NTBOOT 启动 Windows 系统\n (hd1,2) map --mem --no-hook /efi/grub/ext/NTBOOT (hd) (hd-1,0)/loaderNT (hd1,2)/.win Boot 刚刚实机测试(hd1,2)启动 Windows 系统 (kernel 方案) 和(ch  详情 回复 发表于 2023-4-3 21:33
问题已经解决,应该硬盘定位是(1,2)才对  详情 回复 发表于 2023-4-3 21:03
回复

使用道具 举报

发表于 2023-4-3 21:03:29 | 显示全部楼层
wintoflash 发表于 2023-4-3 21:00
Windows系统文件夹在哪个分区,就传递哪个分区的 UUID。

反馈的内容要具体。

问题已经解决,应该硬盘定位是(1,2)才对
回复

使用道具 举报

发表于 2023-4-3 21:33:23 | 显示全部楼层
wintoflash 发表于 2023-4-3 21:00
Windows系统文件夹在哪个分区,就传递哪个分区的 UUID。

反馈的内容要具体。

title 使用外部命令 NTBOOT 启动 Windows 系统\n (hd1,2)
map --mem --no-hook /efi/grub/ext/NTBOOT (hd)
(hd-1,0)/loaderNT (hd1,2)/.win
Boot


刚刚实机测试(hd1,2)启动 Windows 系统 (kernel 方案) 和(chainloader 方案)已经解决启动 Windows 系统,只有NTBOOT 启动 Windows 系统失败

点评

"失败" 具体是怎么个失败法?  详情 回复 发表于 2023-4-3 22:14
回复

使用道具 举报

发表于 2023-4-3 22:14:07 | 显示全部楼层
chen463 发表于 2023-4-3 21:33
title 使用外部命令 NTBOOT 启动 Windows 系统\n (hd1,2)
map --mem --no-hook /efi/grub/ext/NTBOOT (h ...

"失败" 具体是怎么个失败法?

点评

另外后学实机重复开关机操作,发现ROOT会有互换的现象,接下来(方案1)菜单uuid(hdx,y)操作就会出现问题  详情 回复 发表于 2023-4-4 10:07
显示 status:oxcooooooe  详情 回复 发表于 2023-4-4 10:01
回复

使用道具 举报

发表于 2023-4-4 10:01:23 | 显示全部楼层
wintoflash 发表于 2023-4-3 22:14
"失败" 具体是怎么个失败法?

显示 status:oxcooooooe
20230404_08.png
回复

使用道具 举报

发表于 2023-4-4 10:07:49 | 显示全部楼层
本帖最后由 chen463 于 2023-4-4 12:53 编辑
wintoflash 发表于 2023-4-3 22:14
"失败" 具体是怎么个失败法?

另外后学实机重复开关机操作,发现ROOT会有互换的现象,接下来(方案1)菜单uuid(hdx,y)操作就会出现问题
实机测试-(kernel 方案) (chainloader 方案)启动 Windows 系统,在我新笔电配备-固态SDD硬盘操作,全部(hdx,y)尝试了无法找到系统启动,(hd1,1)看不到,是被隐藏还是不存在。


2023-04-04_011.png
2023-04-04_111.png

点评

你应该用 find --set-root 查找标志文件来确定磁盘分区号,比如  详情 回复 发表于 2023-4-4 20:50
回复

使用道具 举报

发表于 2023-4-4 15:32:42 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2023-4-4 15:56 编辑
wintoflash 发表于 2023-4-1 09:42
操作系统调用 BS->ExitBootServices 之后,所有的 UEFI 启动服务就都不能用了,BlockIo,GOP 之类的所 ...
方法三是正确的。报错是找不到 initrd。原因是你用的 Ubuntu 版本太老了。用 Ubuntu 22.04 就没问题。
老的 linux 内核,支持 EFI Handover,不支持 LoadFile2。新的 linux 内核,支持 LoadFile2,不支持 EFI Handover。
以前 G4E 用的是 EFI Handover,现在用的是 LoadFile2。

感觉大佬的解释不太对呢?从时间逻辑上看不太对,因为2023-03-11放弃使用 EFI Handover Protocol 启动 Linux,改用 LoadFile2 提供 initrd 加载功能。但我测试成堆的grub4dos-for_UEFI,
grub4dos-for_UEFI-2021-10-21可以启动ubuntu-18.04.6-desktop-amd64.iso,√
grub4dos-for_UEFI-2021-11-05启动失败×,后面的版本我又试了,很多无法启动ubuntu-18.04.6-desktop-amd64.iso。
grub4dos-for_UEFI-2021-11-05应该是还是用的EFI Handover,这个启动ubuntu出错,不应该是 EFI Handover/ LoadFile2的问题呀?
因为2023-03-11才修改EFI Handover/ LoadFile2,在修改EFI Handover/ LoadFile2之前grub4dos-for_UEFI-2021-11-05就出错了,从时间逻辑上来说对不上啊?

2023-03-11 (a1ive)
Linux 6.2 将已废弃的 EFI Handover Protocol 设为可选项:
    https://github.com/torvalds/linux/commit/cc3fdda2876e58a7e83e558ab51853cf106afb6a
因此放弃使用 EFI Handover Protocol 启动 Linux,改用 LoadFile2 提供 initrd 加载功能。
此更新会带来不兼容,请注意:
  不再支持 x64 UEFI 下启动 32 位内核 (或者反过来)。
  不再支持 ntloader v1 版本,请使用 ntloader v2 版本。(下载)
========
本次改动应该可以解决在某些电脑上用 kernel 命令启动 ntloader 时出现的问题。
========
我偷懒了一下,目前 kernel 命令实际上就是 chainloader 命令。将来可能会添加对 wimboot 的支持。


点评

你太死板了。要看他具体的报错: 他的机器上 map 是没有问题的。  详情 回复 发表于 2023-4-4 20:51
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-11 12:02

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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