无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
2701#
发表于 2023-3-14 10:17:10 | 只看该作者
efi分支 builtins.c 10854行附近
https://github.com/chenall/grub4 ... 2/builtins.c#L10854
  1.       if (to_code == from_code)
  2.         /* If TO is equal to FROM, delete the entry.  */
  3.         grub_memmove ((char *) &ascii_key_map[i],
  4.                       (char *) &ascii_key_map[i + 1],
  5.                       sizeof (unsigned int) * (KEY_MAP_SIZE - i));
  6.       else
  7.                 ascii_key_map[i].from_code = from_code;
  8.                 ascii_key_map[i].to_code = to_code;
  9.     }
复制代码

  1. else
  2.                 ascii_key_map[i].from_code = from_code;
  3.                 ascii_key_map[i].to_code = to_code;
复制代码

是不是要加上花括号
  1. else
  2. {
  3.                 ascii_key_map[i].from_code = from_code;
  4.                 ascii_key_map[i].to_code = to_code;
  5. }
复制代码

如果是的话我一并改了。
回复

使用道具 举报

2702#
 楼主| 发表于 2023-3-14 11:15:57 来自手机 | 只看该作者
一并改了吧
回复

使用道具 举报

2703#
发表于 2023-3-14 14:44:34 | 只看该作者
话说现在G4E能用做光盘上启动用途嘛?如果能的话怎么生成ISO?(要是能grldr和G4E双启动就好了)

点评

能。 创建一个img(软盘镜像,无分区表),格式化成FAT。 创建\EFI\BOOT\ 把g4e efi文件放进去 \EFI\BOOT\BOOTX64.EFI \EFI\BOOT\BOOTIA32.EFI 找个生成双启iso的脚本,把uefi启动文件换成这个img就行了。  详情 回复 发表于 2023-3-14 14:52
回复

使用道具 举报

2704#
发表于 2023-3-14 14:52:59 | 只看该作者
本帖最后由 wintoflash 于 2023-3-14 15:05 编辑
sunsea 发表于 2023-3-14 14:44
话说现在G4E能用做光盘上启动用途嘛?如果能的话怎么生成ISO?(要是能grldr和G4E双启动就好了)

能。
创建一个img(软盘镜像,无分区表),格式化成FAT。
创建\EFI\BOOT\
把g4e efi文件放进去
\EFI\BOOT\BOOTX64.EFI
\EFI\BOOT\BOOTIA32.EFI
找个生成双启iso的脚本,把uefi启动文件换成这个img就行了。
仅供参考
  1. mkisofs -l -R -hide-joliet boot.catalog -b grldr -no-emul-boot -allow-lowercase -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e efi.img -no-emul-boot -o grubfm.iso build
复制代码

点评

EFI现在还是以加载一个软盘镜像来启动这样为主的嘛?  详情 回复 发表于 2023-3-14 16:05
回复

使用道具 举报

2705#
发表于 2023-3-14 14:58:23 | 只看该作者
感谢分享
回复

使用道具 举报

2706#
发表于 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
回复

使用道具 举报

2707#
发表于 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
回复

使用道具 举报

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

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

使用道具 举报

2709#
发表于 2023-3-14 16:45:28 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

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

使用道具 举报

2711#
发表于 2023-3-14 19:34:44 | 只看该作者
感谢分享
回复

使用道具 举报

2712#
发表于 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, 下载次数: 44)
BCD 等文件 (仅供参考):
bootmgfw.zip (1.19 MB, 下载次数: 62)
测试菜单 (仅供参考):
  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
复制代码

点评

这个用于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

查看全部评分

回复

使用道具 举报

2713#
发表于 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
回复

使用道具 举报

2714#
发表于 2023-3-22 13:11:05 | 只看该作者
2011whp 发表于 2023-3-22 12:04
注入的 aaaa.bat    需 pecmd调用下
或者直接 当传递文本参数

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

使用道具 举报

2715#
发表于 2023-3-22 13:44:25 | 只看该作者
很厉害的东西,支持一下
回复

使用道具 举报

2716#
发表于 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参数的值。
—————————————————————————————————————————————
回复

使用道具 举报

2717#
发表于 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.  可以启动
回复

使用道具 举报

2718#
发表于 2023-3-30 12:44:25 来自手机 | 只看该作者
支持一下
回复

使用道具 举报

2719#
 楼主| 发表于 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
回复

使用道具 举报

2720#
发表于 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-4 16:10
回复

使用道具 举报

2721#
发表于 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
回复

使用道具 举报

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

使用道具 举报

2723#
发表于 2023-4-1 10:58:50 | 只看该作者
感谢楼主分享
回复

使用道具 举报

2724#
发表于 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参数的值。
—————————————————————————————————————————————
回复

使用道具 举报

2725#
发表于 2023-4-2 22:02:26 | 只看该作者
很给力,下载收藏!
回复

使用道具 举报

2726#
发表于 2023-4-3 11:26:54 | 只看该作者
给力!
收藏此贴!
回复

使用道具 举报

2727#
发表于 2023-4-3 20:01:18 | 只看该作者
本帖最后由 chen463 于 2023-4-4 21:54 编辑

问题已经解决

2023-04-03_190947.png (322.39 KB, 下载次数: 157)

2023-04-03_190947.png

点评

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

使用道具 举报

2728#
发表于 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
回复

使用道具 举报

2729#
发表于 2023-4-3 21:03:29 | 只看该作者
wintoflash 发表于 2023-4-3 21:00
Windows系统文件夹在哪个分区,就传递哪个分区的 UUID。

反馈的内容要具体。

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

使用道具 举报

2730#
发表于 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
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-29 01:12

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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