无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
2791#
发表于 2023-5-4 09:22:57 | 只看该作者
2011yaya2007777 发表于 2023-5-3 18:16
试一试这个。Qemu及实机测试截图。谢谢!
2794#截图很好。

后学请教,G4E是否对NTFS分区支持兼容性没有像GRUB2那么完美,可否借镜于GRUB2。

如果主板支持NTFS启动,想把UEFI安装在NTFS分区,可以的。
测试外挂U固态盘是NTFS分区,UEFI菜单是可以启动的。
G4E菜单藉由使用外部命令 NTBOOT和使用外部命令RUN启动WIM文件,
发现放在NTFS分区里面,会找不到WIM启动而失败。

另外由GRUB2启动UEFI,菜单则不受影响启动运行正常。
回复

使用道具 举报

2792#
 楼主| 发表于 2023-5-4 10:40:27 | 只看该作者
哈哈哈!终于蒙到了,SD卡启动G4E成功,攻克G4E启动SD卡堡畾,恭喜!

这两张图各表示什么?
第一张包含usb,是5月3日的?
第二张怎么没有usb?
5月4日的包含usb再测试一下,谢谢。

点评

从PCIe盘、SATA盘、USB盘、SD卡、CF卡,外挂U固态SDD盘分区是NTFS启动UEFI全部都替换408KB新G4E启动檔,一切OK成功启动。 54没有成功启动,也有截图。  详情 回复 发表于 2023-5-4 11:11
回复

使用道具 举报

2793#
 楼主| 发表于 2023-5-4 10:46:10 | 只看该作者
老毛桃的 XP.PE,用  grubfm.iso 能完全启动加载工具,用 SISO 或 ventoy 加载,能启动到 XP.PE,但加载不上工具。2003PE 3种方式都可以。

问题找到了。是由于当年为了配合SVBus,调整了存储碎片数据的位置。grubfm没有跟进,替换新的grub.exe。
替换grubfm源码中的grub.exe,重新编译即可。

点评

grubfm 现在已经停止开发了,最新版就是 7.4,看来要使用 grubfm,只能使用旧版的 G4D 了。重新编译我不会。  详情 回复 发表于 2023-5-4 13:12
回复

使用道具 举报

2794#
发表于 2023-5-4 11:11:58 | 只看该作者
本帖最后由 chen463 于 2023-5-4 11:15 编辑
2011yaya2007777 发表于 2023-5-4 10:40
这两张图各表示什么?
第一张包含usb,是5月3日的?
第二张怎么没有usb?

从PCIe盘、SATA盘、USB盘、SD卡、CF卡,外挂U固态SDD盘分区是NTFS启动UEFI全部都替换408KB新G4E启动檔,一切OK成功启动。

54没有成功启动,也有截图。
第二张怎么没有usb?是Qemu

2023-05-04_21.png (1.39 MB, 下载次数: 160)

54实机没有成功启动

54实机没有成功启动

2023-05-04_2.png (14.18 KB, 下载次数: 149)

Qemu

Qemu
回复

使用道具 举报

2795#
发表于 2023-5-4 11:18:28 | 只看该作者
感谢发布原创作品
回复

使用道具 举报

2796#
 楼主| 发表于 2023-5-4 12:30:15 来自手机 | 只看该作者
明白了。QEMU识别U盘为Ata设备。谢谢测试。
回复

使用道具 举报

2797#
发表于 2023-5-4 13:12:06 | 只看该作者
本帖最后由 2010XwX 于 2023-5-4 13:16 编辑
2011yaya2007777 发表于 2023-5-4 10:46
问题找到了。是由于当年为了配合SVBus,调整了存储碎片数据的位置。grubfm没有跟进,替换新的grub.exe。
...

grubfm 现在已经停止开发了,最新版就是 7.4,看来要使用 grubfm,只能使用旧版的 G4D 了。重新编译我不会。
当初 新版 G4D 也遇到 SISO 不兼容,后来大师解决了,新版也能用 SISO 了。
回复

使用道具 举报

2798#
发表于 2023-5-4 18:14:36 | 只看该作者
   请教 ksafei 大师,帮忙把 Grubfm 中的 grub.exe 替换 为grub4dos-0.4.6a-2023-03-29 版本,经测试,在新版 G4D 启动平台上,新版的 grubfm,可以成功启动上传的两个 PE,但仍有不足之处,0PE 启动不成功。但旧版的 grub4dos 和 grubfm 都能成功。
  最后,再次感谢各位大师们的无私奉献!!!
回复

使用道具 举报

2799#
 楼主| 发表于 2023-5-5 08:56:55 | 只看该作者
grubfm 现在已经停止开发了

今天编译了一个新的。

grubfm.part3.rar

498.99 KB, 下载次数: 24, 下载积分: 无忧币 -2

grubfm.part2.rar

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

grubfm.part1.rar

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

点评

谢谢大师!可以在新版 grub4dos BIOS 启动下,用 grubfm 加载原先无法启动的PE了。 你更新的 grubfm,少了一个 【Boot VHD(memdisk)】,ksafei 在原基础上又添加了【vboot 启动 VHD】,主要依靠 grubf  详情 回复 发表于 2023-5-5 11:16
回复

使用道具 举报

2800#
发表于 2023-5-5 11:16:23 | 只看该作者
本帖最后由 2010XwX 于 2023-5-5 11:18 编辑
2011yaya2007777 发表于 2023-5-5 08:56
今天编译了一个新的。

      谢谢大师!可以在新版 grub4dos BIOS 启动下,用 grubfm 加载原先无法启动的PE了。
    你更新的 grubfm,少了一个 【Boot VHD(memdisk)】,ksafei 在原基础上又添加了【vboot 启动 VHD】,主要依靠 grubfm 加载虚拟硬盘镜像,如 ventoy.vhd。

截图1:yaya 新版 grubfm 无法启动 ventoy.vhd
截图2:ksafei 新版 grubfm 可以用 【Boot VHD(memdisk)】或 【vboot 启动 VHD】加载启动 ventoy 虚拟硬盘镜像。

快照1.jpg (41.08 KB, 下载次数: 157)

快照1.jpg

快照2.jpg (69.85 KB, 下载次数: 149)

快照2.jpg

点评

ksafei 新版 grubfm 来一份啊。  详情 回复 发表于 2023-5-5 11:50
回复

使用道具 举报

2801#
 楼主| 发表于 2023-5-5 11:29:27 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2023-5-5 11:53 编辑

我是从官网下载的,自然没有那个补丁了。你请他打吧,我没有补丁。

点评

官网上确实没有这两个选择项,随着软硬件的进展,你们这些大师与时共进作进一步开发,我们使用者再次感谢你们!  详情 回复 发表于 2023-5-5 11:50
回复

使用道具 举报

2802#
发表于 2023-5-5 11:41:25 | 只看该作者
太牛了,支持支持
回复

使用道具 举报

2803#
发表于 2023-5-5 11:50:27 | 只看该作者
2011yaya2007777 发表于 2023-5-5 11:29
我是从官网下载的,自然没有那个补丁了。你请他大吧,我没有补丁。

官网上确实没有这两个选择项,随着软硬件的进展,你们这些大师与时共进作进一步开发,我们使用者再次感谢你们!
回复

使用道具 举报

2804#
发表于 2023-5-5 11:50:56 | 只看该作者
2010XwX 发表于 2023-5-5 11:16
谢谢大师!可以在新版 grub4dos BIOS 启动下,用 grubfm 加载原先无法启动的PE了。
    你更新的  ...

ksafei 新版 grubfm 来一份啊。

点评

ksafei 定制版: http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=427201&pid=4908371&fromuid=357299  详情 回复 发表于 2023-5-5 11:55
回复

使用道具 举报

2805#
发表于 2023-5-5 11:55:28 | 只看该作者
本帖最后由 2010XwX 于 2023-5-5 12:09 编辑
357734620 发表于 2023-5-5 11:50
ksafei 新版 grubfm 来一份啊。

ksafei 定制版:

http://bbs.wuyou.net/forum.php?m ... 8371&fromuid=357299

yaya 大的也可以。2807#

    考虑到适配兼容 5大的 SISO,更新的 grubfm_pc.iso 建议运行在 grub4dos-0.4.6a-2022-08-23 起升级的G4D平台上。
    以上个人使用体验,供参考。

回复

使用道具 举报

2806#
 楼主| 发表于 2023-5-5 12:54:34 来自手机 | 只看该作者
看见了,人家昨天就重现编译了,我不知道。
回复

使用道具 举报

2807#
发表于 2023-5-5 15:52:59 | 只看该作者
GRUB4DOS还是不错的,多启很赞 兼容性也不错
回复

使用道具 举报

2808#
发表于 2023-5-7 10:03:42 | 只看该作者
本帖最后由 liuzhaoyzz 于 2023-5-7 10:14 编辑
wintoflash 发表于 2023-3-19 13:48
2023-03-19
尝试支持 iPXE wimboot。
grub4dos-for_UEFI-2023-03-19

这个用于ipxe启动的菜单menu.lst,应该放在哪里?(pd)\EFI\grub\menu.lst?
好像找不到菜单啊?(pd)\menu.lst也不行,(pd)\grub\menu.lst也不行。
另外,是否支持http协议?就是说能否这样写菜单?

title WINPE (/imgs/WePE64_V2.2/WEPE/WEPE64.WIM)
kernel http://192.168.1.4/pxe/wimboot
initrd @bootmgr=http://192.168.1.4/pxe/bootmgr @bcd=http://192.168.1.4/pxe/BCD @boot.sdi=http://192.168.1.4/boot.sdi @boot.wim=http://192.168.1.4/imgs/WePE64_V2.2/WEPE/WEPE64.WIM
boot

点评

"iPXE wimboot" 指的是 iPXE 组织的 wimboot 项目,与网启无关。  详情 回复 发表于 2023-5-7 10:40
回复

使用道具 举报

2809#
发表于 2023-5-7 10:40:46 | 只看该作者
liuzhaoyzz 发表于 2023-5-7 10:03
这个用于ipxe启动的菜单menu.lst,应该放在哪里?(pd)\EFI\grub\menu.lst?
好像找不到菜单啊?(pd)\men ...

"iPXE wimboot" 指的是 iPXE 组织的 wimboot 项目,与网启无关。
回复

使用道具 举报

2810#
发表于 2023-5-7 10:49:50 | 只看该作者
wintoflash 发表于 2023-5-7 10:40
"iPXE wimboot" 指的是 iPXE 组织的 wimboot 项目,与网启无关。

哦,我误会了。
回复

使用道具 举报

2811#
 楼主| 发表于 2023-5-7 10:54:23 | 只看该作者
Handover协议目前还是很多linux发行版支持的,Loadfile2协议可能是未来发行版即将支持的。

当前g4e需要做的似乎就是用某个可靠的办法判断linux kernel是否支持Handover协议,如果支持的话g4e就尝试用Handover协议启动,如果不支持的话就尝试用Loadfile2协议启动。看起来你对两个协议颇有研究啊,Loadfile2协议是你引入g4e的吧,希望未来还是由你加个判断,解决新老内核兼容性匹配问题(太老的≤4.xx内核kernel panic那种就不用考虑了)。
不行。
正常情况下,用
kernel (hdx,y)/xxx/vmlinuz xxx initrd=/xxx/initrd.img
initrd (hdx,y)/xxx/initrd.img
复制代码

就可以保证能启动。
* 正常情况指的是正规安装的 Linux,kernel 和 initrd 都位于 FAT 分区里面。

我觉得现阶段仍然需要同时支持Handover协议和Loadfile2协议(不支持Handover协议内核版本<20b)。
我做了一个补丁,kernel 函数增加 --handover 和 --loadfile2 参数,以便强制使用Handover或LoadFile2协议。没有参数,则内核版本<20f,使用Handover协议,内核版本>20e,使用LoadFile2协议。可能不严谨。不知到其他方法。

BOOTX64.rar

145.43 KB, 下载次数: 3, 下载积分: 无忧币 -2

点评

2818楼的这个版本,试了几个linux.iso,都不能启动,包括上面测试的ubuntu-18.04.6-desktop-amd64.iso,截图同上。  详情 回复 发表于 2023-5-7 18:27
逻辑似乎有误。是否支持 Handover 是可以判断出来的 伪代码:  详情 回复 发表于 2023-5-7 11:53
回复

使用道具 举报

2812#
发表于 2023-5-7 11:53:50 | 只看该作者
本帖最后由 wintoflash 于 2023-5-7 12:04 编辑
2011yaya2007777 发表于 2023-5-7 10:54
我觉得现阶段仍然需要同时支持Handover协议和Loadfile2协议(不支持Handover协议内核版本

逻辑似乎有误。是否支持 Handover 是可以判断出来的
  1. struct linux_kernel_header
  2. {
  3.   ...
  4.   unsigned short version;                // 协议版本
  5.   ...
  6. #define LINUX_XLF_KERNEL_64 (1<<0) // 64位内核
  7. #define LINUX_XLF_CAN_BE_LOADED_ABOVE_4G (1<<1)
  8. #define LINUX_XLF_EFI_HANDOVER_32 (1<<2) // 支持 EFI32 Handover
  9. #define LINUX_XLF_EFI_HANDOVER_64 (1<<3) // 支持 EFI64 Handover
  10. #define LINUX_XLF_EFI_KEXEC (1<<4)
  11.   unsigned short xloadflags;
  12.   ...
  13.   unsigned int handover_offset; // Handover 入口,没有那就不支持 Handover
  14. } __attribute__ ((packed));
复制代码

伪代码:

  1. struct linux_kernel_header lh;
  2. grub_read (kernel, filemax, ...);
  3. memcpy (&lh, kernel, sizeof (lh));
  4. ...
  5. if (lh.version < 0x020b)
  6.   goto LoadFile2Boot;
  7. if (!lh.handover_offset)
  8.   goto LoadFile2Boot;
  9. if (IS_UEFI_32 && (lh.xloadflags & LINUX_XLF_KERNEL_64) && !(lh.xloadflags & LINUX_XLF_EFI_HANDOVER_32))
  10.   goto LoadFile2Boot;
  11. if (IS_UEFI_64 && !(lh.xloadflags & LINUX_XLF_KERNEL_64))
  12.   goto LoadFile2Boot;
  13. goto EfiHandoverBoot;
复制代码


回复

使用道具 举报

2813#
 楼主| 发表于 2023-5-7 12:19:53 来自手机 | 只看该作者
我想知道,这样是判断uefi固件支持不支持,还是判断所加载的那个linux镜像的内核支持不支持?

点评

判断内核是否支持。  详情 回复 发表于 2023-5-7 13:44
回复

使用道具 举报

2814#
发表于 2023-5-7 13:44:22 | 只看该作者
本帖最后由 wintoflash 于 2023-5-7 13:47 编辑
2011yaya2007777 发表于 2023-5-7 12:19
我想知道,这样是判断uefi固件支持不支持,还是判断所加载的那个linux镜像的内核支持不支持?

根据 UEFI 位数判断内核是否支持。
回复

使用道具 举报

2815#
 楼主| 发表于 2023-5-7 14:23:41 | 只看该作者
因此放弃使用 EFI Handover Protocol 启动 Linux,改用 LoadFile2 提供 initrd 加载功能。
此更新会带来不兼容,请注意:
  不再支持 x64 UEFI 下启动 32 位内核 (或者反过来)。
  不再支持 ntloader v1 版本,请使用 ntloader v2 版本。(下载)

请教一个问题:
是不是说使用 EFI Handover Protocol 启动 Linux,
  支持 x64 UEFI 下启动 32 位内核 (或者反过来)?

点评

只要linux内核开了对应的选项(EFI Mixed Mode),就可以。  详情 回复 发表于 2023-5-7 15:06
回复

使用道具 举报

2816#
发表于 2023-5-7 15:06:24 | 只看该作者
2011yaya2007777 发表于 2023-5-7 14:23
请教一个问题:
是不是说使用 EFI Handover Protocol 启动 Linux,
  支持 x64 UEFI 下启动 32 位内核  ...

只要linux内核开了对应的选项(EFI Mixed Mode),就可以。
回复

使用道具 举报

2817#
 楼主| 发表于 2023-5-7 15:45:15 | 只看该作者
只要linux内核开了对应的选项(EFI Mixed Mode),就可以。

IS_UEFI_xx  这是当前 EFI 环境。
lh.xloadflags 这是允许启动的内核位?比如 h.xloadflags=4,允许启动 32 位内核?那当前启动的 Linux 是多少位?从那里获知?

点评

struct linux_kernel_header 就是linux内核的文件头。xloadflags就是它给bootloader提供的信息,告诉bootloader它有哪些特性。  详情 回复 发表于 2023-5-7 15:58
这是伪代码。 判断uefi位数,用#ifdef宏就行了。 xloadflags是按位表示内核的一些特性的。  详情 回复 发表于 2023-5-7 15:52
回复

使用道具 举报

2818#
发表于 2023-5-7 15:52:34 | 只看该作者
2011yaya2007777 发表于 2023-5-7 15:45
IS_UEFI_xx  这是当前 EFI 环境。
lh.xloadflags 这是允许启动的内核位?比如 h.xloadflags=4,允许启动 ...

这是伪代码。
判断uefi位数,用#ifdef宏就行了。
xloadflags是按位表示内核的一些特性的。
回复

使用道具 举报

2819#
发表于 2023-5-7 15:58:58 | 只看该作者
2011yaya2007777 发表于 2023-5-7 15:45
IS_UEFI_xx  这是当前 EFI 环境。
lh.xloadflags 这是允许启动的内核位?比如 h.xloadflags=4,允许启动 ...

struct linux_kernel_header 就是linux内核的文件头。xloadflags就是它给bootloader提供的信息,告诉bootloader它有哪些特性。
回复

使用道具 举报

2820#
 楼主| 发表于 2023-5-7 17:03:53 | 只看该作者
按 wintoflash 提供的逻辑,重新编译的。请测试。

BOOTX64.rar

145.46 KB, 下载次数: 11, 下载积分: 无忧币 -2

点评

文件名称: BOOTX64.EFI文件大小: 412.00 KB (421,888 字节)修改时间: 2023年05月07日,16:50:56MD5: 3DDDEA8AAF6BFCDAFF339E1A7E6CAF02 ubuntu.iso记不清是从哪里下载的,大概是清华大学镜像站吧。https://  详情 回复 发表于 2023-5-7 17:56
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-28 06:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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