无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
61#
发表于 2020-11-29 13:30:30 | 显示全部楼层
回复

使用道具 举报

62#
发表于 2020-11-29 13:31:19 | 显示全部楼层
sunsea 发表于 2020-11-29 13:18
汇报一下测试结果。

采用的是github上的11.26版本。真机测试。

BIOS 下 map --mem --top 试试。
我记得 reboot.pro 上有人说不用 --top 找不到。
回复

使用道具 举报

63#
发表于 2020-11-29 17:08:56 | 显示全部楼层
ko20010214 发表于 2020-11-29 16:22
我不懂编程。不懂代码。
我只能提点界面上问题的反馈。
就是我现在已经能在图形界面上正确布置菜单了( ...

但如果不设置图形界面,光设置字体,菜单还是乱的,中文也出不来,这是为什么啊?

GRUB4DOS 本来就是这样的啊。必须设置图形模式,才能显示汉字,显示图片。BIOS 版本也是这样。
回复

使用道具 举报

64#
发表于 2020-12-2 14:45:47 | 显示全部楼层
longpanda 发表于 2020-12-2 14:29
Ventoy的MAP是专门设计为Ventoy工作的。 G4E和GRUB2的MAP应该可以统一。

G4E和GRUB2的MAP专注于把 ISO ...

请问 ventoy里面的iso9660 efi 驱动有什么作用?
回复

使用道具 举报

65#
发表于 2020-12-2 15:09:07 | 显示全部楼层
longpanda 发表于 2020-12-2 14:57
绝大多数的Linux发行版里面, UEFI 的 eltorito的镜像里面只有一个 grub的可执行程序。kernel和initrd都 ...

怪不得我研究了半天,也没发现用在哪。
回复

使用道具 举报

66#
发表于 2020-12-5 12:30:04 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-5 12:31 编辑

@liuzhaoyzz @sunsea
修改内存盘类型为 RUNTIME SERVICES DATA 之后,reboot.pro 那边已经有人确认,SVBus 可用了。
我已经把代码推送上去了,你们可以试试。

点评

svbus在WIN10X64-UEFI上面死活安装不上去,提示“试图将驱动程序添加到存储区时遇到问题"。 好郁闷啊,BCD里面的驱动签名验证关了也不行,用yamingw制作的签名后的svbus1.1也不行。按照以前的做法,gpedit.msc 确定  详情 回复 发表于 2020-12-6 17:08
谢谢提醒,晚点试试看。  详情 回复 发表于 2020-12-5 19:54
回复

使用道具 举报

67#
发表于 2020-12-7 14:11:19 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-7 12:42
试了这个1207版本的bootx64.efi,一样提示“out of memory”.跟上面的帖子665楼截图一样。

blocklist  ...

displaymem当然是正常工作的。
bios下能分配那么多内存,uefi下就不一定。

点评

你看我displaymem,最后一行显示length=71F000000=10进制30584864768=28GB,这个应该是高位内存吧,应该足够放下13GB的vhd啊,4GB以内的内存块,似乎很零散。提示“out of memory”是不是因为g4e把vhd放到其  详情 回复 发表于 2020-12-7 14:50
回复

使用道具 举报

68#
发表于 2020-12-7 18:37:09 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-7 18:48 编辑
liuzhaoyzz 发表于 2020-12-7 18:20
你是给我说的,还是个wintoflash说的,我这边想不出是什么原因,该怎么尝试。
“out of  ...

艹 基本上确定了,x64 UEFI 固件一般都不会分配 4GB 以上内存,有的甚至不会分配 2GB 以上内存。
强行指定一个 4GB 以上的地址是可以的。下图是先把一个vhd加载到内存,再启动 winpe 安装 svbus 驱动。


回复

使用道具 举报

69#
发表于 2020-12-8 18:32:49 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-8 18:16
map --mem --top加载到高位内存成功了,因为看到了尺寸在变大,慢慢地达到100%那个尺寸。
然后启动的时 ...

试试这里的grub2
http://bbs.wuyou.net/forum.php?m ... &fromuid=487838
回复

使用道具 举报

70#
发表于 2020-12-9 16:10:46 | 显示全部楼层
2011yaya2007777 发表于 2020-12-9 15:58
grub4dos 里面的文件 build 是否可以传递参数?
如果可以的话,在 build 里面如何使用这个参数?

$1 $2之类的吧
回复

使用道具 举报

71#
发表于 2020-12-9 19:07:25 | 显示全部楼层
2011yaya2007777 发表于 2020-12-9 18:48
现在使用 ./build i386 就可以编译 BOOTIA32.EFI 了。
在你的环境里是否解决了编译 32 位的问题?

我这几天研究svbus呢,没弄这个,你应该可以直接推送代码。
回复

使用道具 举报

72#
发表于 2020-12-9 22:08:15 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-9 21:10
Good news!Good job!
用yaya2020.12.09分享的这个内存类型为GRUB_EFI_PERSISTENT_MEMORY的版本,成功进 ...

同一个VHD用之前的 RUNTIME_SERVICES_DATA不行,PERSISTENT_MEMORY 就可以?
回复

使用道具 举报

73#
发表于 2020-12-10 12:50:20 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-10 12:58 编辑

./build i386 还是不行。


---------------------------
改 Makefile.in-i386,全部加上 -m32 就好了。
稍后我改一下自动编译脚本。
回复

使用道具 举报

74#
发表于 2020-12-10 18:43:34 | 显示全部楼层
sunsea 发表于 2020-12-10 16:26
请问谁目前有测试成功的PE ISO或者比较小尺寸的VHD之类的,能够发一下,以供测试?我这里Github 12-10版本 ...

链接:https://pan.baidu.com/s/1CFxl2n5eveejmY0S0ZHy3g
提取码:l47r

解压后vhd 5GB。
grub2可以不解压直接map --mem --rt /xxx.vhd

回复

使用道具 举报

75#
发表于 2020-12-12 09:51:47 | 显示全部楼层
2011yaya2007777 发表于 2020-12-12 09:21
wintoflash :
你看看我修改的这个Makefile.in-i386,在你的电脑环境可否编译成功。
或者把你修改成功的发 ...

可以。
回复

使用道具 举报

76#
发表于 2020-12-14 09:41:09 | 显示全部楼层
yaya, GRUB4DOS 的外部命令现在怎么样了?
回复

使用道具 举报

77#
发表于 2020-12-14 15:56:01 | 显示全部楼层
2011yaya2007777 发表于 2020-12-14 12:14
外部命令我只是修改了头文件,修改了热键,可以作为参考。其他外部命令没有改动。

只替换头文件,其他的什么都不改?
回复

使用道具 举报

78#
发表于 2020-12-15 13:03:33 | 显示全部楼层
测试:添加 load 命令,可以加载 EFI 驱动。(与 GRUB2 的 efiload 命令,以及 EFI Shell 的 load 命令功能相同)
下载: BOOTX64.zip (144.17 KB, 下载次数: 110)
用法:
          load [-n] /path/to/driver.efi
示例:
          load /boot/ntfs_x64.efi
          加载 NTFS 驱动,之后进 EFI Shell 或者 refind 就可以读 NTFS 上的文件。

          load -n /boot/CrScreenshotDxe.efi
          加载屏幕截图驱动,加载之后可以按 左Ctrl + 左Alt + F12 截图,图片格式为 png,保存在第一个找到的 FAT 分区根目录下。

          load /boot/EfiGuardDxe.efi
          加载破解 Windows 驱动签名验证的驱动。(可能不支持较新的 Windows 版本,如 20H1)
示例驱动下载: drivers.zip (122.07 KB, 下载次数: 190)
回复

使用道具 举报

79#
发表于 2020-12-15 21:44:02 | 显示全部楼层
江南一根葱 发表于 2020-12-15 21:36
g4d有类似grub2的编译套装没,编译要两个钟头么

啪一下就编译完了,很快啊。
回复

使用道具 举报

80#
发表于 2020-12-16 10:36:10 | 显示全部楼层
2011yaya2007777 发表于 2020-12-15 22:37
两个小时,太夸张了吧。我2Gb的内存,编译大概10秒。

外部命令怎么弄?
我是这样的:
把你的 grub4dos.h 和 grubprog.h 改名 grub4efi.h 和 g4eprog.h。
写个最简单的外部命令:
  1. #include "grub4efi.h"
  2. /* this is needed, see the comment in grubprog.h */
  3. #include "g4eprog.h"
  4. /* Do not insert any other asm lines here. */

  5. int main(char *arg,int flags)
  6. {
  7.         return printf ("%s\n",arg);
  8. }
复制代码

编译:
  1. gcc -nostdlib -DASM_BUILD_DATE="".long 20201216"" -fno-reorder-functions -fno-strict-aliasing -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables --entry main -Wl,-N -Wl,--build-id=none -m64 -mno-sse -Wl,-Ttext -Wl,0 -fPIE -I../include/ echo.c -o echo.o
  2. objcopy -O binary echo.o echo.tmp
  3. sed -e '$s/\x00*$//' echo.tmp > echo.mod
  4. mv echo.mod bin/$(basename -s .mod echo.mod)
复制代码

执行之后虚拟机报错。



回复

使用道具 举报

81#
发表于 2020-12-16 18:25:34 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-16 18:33 编辑
2011yaya2007777 发表于 2020-12-16 15:14
记得以前上传了一个外部命令编译环境,附带修改后的热键代码,怎么找不到了。
再上传一次。

还是不行啊。
  1. gcc -Wl,--build-id=none -m64 -mno-sse -nostdlib -Wno-int-to-pointer-cast -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables -Wl,-N -fPIE g4e_wb.c -o g4e_wb.o 2>&1|tee build.log
  2. objcopy -O binary g4e_wb.o g4e_wb
复制代码

报警:
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 00000000004000e8
虽然能出来文件,但是还是一样的,虚拟机报错关闭。
gcc 加上 --entry main 不报警了,但还是虚拟机报错。

-------------------------------------------------------------------
我发现直接用你编译好的 g4d_wb 文件,还是虚拟机报错。
回复

使用道具 举报

82#
发表于 2020-12-16 20:43:54 | 显示全部楼层
2011yaya2007777 发表于 2020-12-16 20:28
wintoflash:我是使用gcc4.8编译的。我编译的时候也报错。不影响使用。

我也是GCC4.8。就算直接执行你编译好的 g4d_wb,也是死机。
回复

使用道具 举报

83#
发表于 2020-12-16 20:54:23 | 显示全部楼层
wuwuzz 发表于 2020-12-16 19:45
问题1: G4E在AMI UEFI V2016下会出现boot_image_handle not found已解决。

先load ntfs_x64.efi,再m ...

GRUB2/GRUB4DOS的各种文件系统驱动都只能在它们内部使用。
这个 NTFS 驱动是给 UEFI 固件用的。map 的时候启动 bootx64.efi 用的是 UEFI 启动服务 LoadImage,固件读文件要用 UEFI 的驱动。
回复

使用道具 举报

84#
发表于 2020-12-19 19:02:51 | 显示全部楼层
hilsonma 发表于 2020-12-19 18:04
我现在也是用差分系统,等待中。

GRUB4DOS BIOS 版就不支持差分 VHD 啊,更别说 VHDX 了。
你是不是 BIOS 下用的 NTBOOT?
https://github.com/chenall/grub4 ... age2/dec_vhd.c#L199
回复

使用道具 举报

85#
发表于 2020-12-19 19:31:07 | 显示全部楼层
hilsonma 发表于 2020-12-19 19:04
是的,bios下我用g4d+siso (应该就是ntboot,命令:command siso ntboot NT6=/vhd/win.vhdx)
uefi下用你 ...

http://bbs.wuyou.net/forum.php?m ... &fromuid=487838
827# yaya放出的测试用外部命令,你的电脑上能正常使用吗?
我觉得把 NTBOOT 做成外部命令比较合适。
回复

使用道具 举报

86#
发表于 2020-12-19 21:09:26 | 显示全部楼层

提取里面的g4e_wb,在grub4dos下运行它,看看有什么反应。
title g4e_wb
g4e_wb abcdef
pause
回复

使用道具 举报

87#
发表于 2020-12-19 22:35:00 | 显示全部楼层
hilsonma 发表于 2020-12-19 22:33
卡停,实体机与qemu一样。

等yaya解决这个问题吧。
能写外部命令了就可以移植ntboot。
回复

使用道具 举报

88#
发表于 2020-12-20 17:34:20 | 显示全部楼层
2011yaya2007777 发表于 2020-12-20 16:06
试一试这一个。
这一个与前一个,我在qemu虚拟机以及实机测试,都正常,所以也不知问题在哪里。
我猜测是 ...

还是不行。

ntboot 好像不是使用外部命令编写的,使用的是批处理。

ntboot里面带了一些外部命令,比如 wenv, diskid。
grub2 的 ntboot/wimboot 是我另外用c语言写的模块,集成了注册表解析、boot.sdi生成、虚拟FAT32文件系统、wim文件解析等东西。原理有借鉴 chenall 的 ntboot。
回复

使用道具 举报

89#
发表于 2020-12-23 09:36:28 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-23 09:07
一、svbus搭配g4e/grub2有两种模式,直接map和map --mem。
1、在直接map模式下,要求被仿真的镜像必须在 ...
在直接map模式下,要求被仿真的镜像必须在硬盘上连续存放,这是g4e/grub2引导器要求的。

uefi下grub2对文件是否连续没有任何要求,只要是个grub2下能看到的文件就行。只不过一些文件没办法或者不方便随机读取(比如网络上的文件或者压缩文件),所以对于这类文件,建议直接加载到内存。
bios下理论上也能设计出对文件连续性完全没有要求的map。比如 ventoy,对碎片数目没有要求,但是对簇大小有要求。GRUB4DOS (甚至 GRUB2) 理论上也能做到这一点,但是 BIOS 下开发的难度太大了。
svbus是否支持“碎片”,这个问题感觉问得不对,因为无论是直接map文件,还是map --mem文件到内存,都是由g4e/grub2这样的引导器所做的,也是g4e/grub2所要求或者初始设计的,到不了svbus这个层面,svbus只是个磁盘驱动,该磁盘驱动的作用就是让windows认识g4e/grub2虚拟磁盘/内存盘

注意,SVBus 挂载的虚拟磁盘,并不是由grub4dos/grub2弄出来的那个虚拟盘。svbus 是另外创建了一个虚拟磁盘。
回复

使用道具 举报

90#
发表于 2020-12-23 10:49:07 | 显示全部楼层
2011yaya2007777 发表于 2020-12-23 10:16
修改了 G4E 外部命令模板,再测试一下。我这里正常。要使用里边那个 BOOTX64.EFI,是配套的。
另外我想 ...
以前测试,是不是启动了 GRUB2,然后由 GRUB2 启动的 G4E?

我是这样的。
修改了 G4E 外部命令模板,再测试一下。我这里正常。要使用里边那个 BOOTX64.EFI,是配套的。

分别测试了3种情况,都是虚拟机报错。
(1) grub2->grub4dos

(2) uefi shell->grub4dos

(3) 直接固件设置页面启动 grub4dos
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-29 06:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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