无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
211#
 楼主| 发表于 2020-12-25 15:26:31 | 显示全部楼层
写了两个实验性的外部命令。date 和 ve r。

虚拟机测试,三个外部命令都正确。
ver 2.4
回复

使用道具 举报

212#
 楼主| 发表于 2020-12-25 16:38:14 | 显示全部楼层
那好,如果你不再改动外部命令格式的话,等下我把g4e的外部命令推送到grubutils。

可以。
回复

使用道具 举报

213#
 楼主| 发表于 2020-12-26 08:37:42 来自手机 | 显示全部楼层
Unfortunatelly booting directly to UEFI grub4dos is not possible on only UEFI new MBs    这句话百度翻译后是  :不幸的是,仅在UEFI新MBs上不可能直接引导到UEFI grub4dos。这句话如何理解?
回复

使用道具 举报

214#
 楼主| 发表于 2020-12-26 09:01:59 来自手机 | 显示全部楼层
我的知识有限,还是不能理解,既然ventoy是个启动软件,他可以启动镜像,干嘛需要g4e?
回复

使用道具 举报

215#
 楼主| 发表于 2020-12-26 09:38:22 来自手机 | 显示全部楼层
明白了。哈哈哈
回复

使用道具 举报

216#
 楼主| 发表于 2020-12-26 11:54:09 | 显示全部楼层
liuzhaoyzz :
可以使用这个测试。

BOOTX64.rar

136.8 KB, 下载次数: 37, 下载积分: 无忧币 -2

回复

使用道具 举报

217#
 楼主| 发表于 2020-12-28 09:27:57 | 显示全部楼层
这个版本没有推送到github吗?

没有。但是在 https://github.com/chenall/grub4dos/issues/248,给 alacran 上传了一个。
回复

使用道具 举报

218#
 楼主| 发表于 2020-12-29 09:53:54 | 显示全部楼层
终于搞定了 1522Kb 的 bootmgfw.efi! 排查得好辛苦。

BOOTX64.rar

135.98 KB, 下载次数: 56, 下载积分: 无忧币 -2

点评

OK 圆满 元旦 前 进入 正式版 VBOX试了,在试实机  详情 回复 发表于 2020-12-29 11:16
大神,请问下这个版本是什么意思?是给我的吗?用于解决939楼的failed to load virtual partition image的问题吗?  详情 回复 发表于 2020-12-29 09:59
回复

使用道具 举报

219#
 楼主| 发表于 2020-12-29 10:51:28 | 显示全部楼层
请问下这个版本是什么意思?是给我的吗

不是专门给你的。
以前 chainloader /efi/microsoft/boot/bootmgfw.efi ,有的可以启动,但是 1522Kb 的那个启动失败。

本人今天亲测,SX70211.vhd放在机械硬盘

谢谢测试。直接map和map --mem都成功,有点奇怪。不用管他了,等以后遇到碎片问题再说吧。

g4e在选择菜单的时候,似乎必须要按大写的"E"键才能进入菜单编辑模式,小写的"e"键似乎不行?

小写“e”可以呀。是不是你的电脑特殊?

点评

台式机USB键盘没问题,笔记本的键盘好像有点问题,奇怪得很。不过这是个很小的问题。  详情 回复 发表于 2020-12-30 16:03
回复

使用道具 举报

220#
 楼主| 发表于 2020-12-29 14:57:12 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-29 14:58 编辑

liuzhaoyzz:
首先要祝贺你,通过辛勤劳动取得了丰硕战果!

其次有点不甘心,还是想弄明白,到底 SVBus 是否支持碎片。
如果你 934# 的环境还在的话,不妨再进一步测试。
第三个碎片在 0x4f2926c0 扇区,也就是在 0x9e524d8000 字节。在 windows 使用 WinHex 打开物理驱动器(不是逻辑驱动器)hd0,定位到该字节,截图。

使用
map /VHD/SX70211.vhd (hd)
chainloader (hd-1)
进入 windows,使用 WinHex 打开这个虚拟的物理驱动器,定位到 (0xc00008+0x13f908)*0x200=0x1a7f22000字节,截图。

使用
map --mem /VHD/SX70211.vhd (hd)
chainloader (hd-1)
进入 windows,使用 WinHex 打开这个虚拟的物理驱动器,定位到 (0xc00008+0x13f908)*0x200=0x1a7f22000字节,截图。

研究这三张图,就有结论了。

点评

应该是943楼吧,环境还在的,等我试下,然后更新帖子。  详情 回复 发表于 2020-12-29 15:44
不支持。江南一根葱已经试过了。  详情 回复 发表于 2020-12-29 15:06
回复

使用道具 举报

221#
 楼主| 发表于 2020-12-29 15:22:13 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-29 15:25 编辑
@yaya  是什么原因呢,猜了一个多月了

我先编译了一个 grub2,其中增加了一些调试信息。通过比对,发现 grub2 的文件路径包含分区信息。
将 G4E 的文件路径也增加分区信息后,还是不行。之后就卡壳了。
后来发现 UEFI 固件的分区信息里也有一个句柄,使用这个句柄替换加载镜像结构里的设备句柄,居然成功了!
UEFI 文档里是 device_handle,没有过多解释,以为就是设备句柄。也可能是没有仔细预读。

点评

你是说这个吧。 https://github.com/a1ive/grub/blob/ad36e323b92047615cd0b57750ca0a361ad8262f/grub-core/loader/efi/chainloader.c#L1028 /* LoadImage does not set a device handler when the image is  详情 回复 发表于 2020-12-29 15:43
回复

使用道具 举报

222#
 楼主| 发表于 2020-12-29 15:33:43 | 显示全部楼层
不支持。江南一根葱已经试过了。

那就是有结论了。
我不清楚,加载 SVBus 的情况,使用  map /xxx.vhd (hd) 的时候多,还是使用   map --mem /xxx.vhd (hd) 的时候多?
有没有必要给  SVBus 的作者提供一个支持碎片的补丁?
回复

使用道具 举报

223#
 楼主| 发表于 2020-12-29 15:45:33 | 显示全部楼层
liuzhaoyzz:
alacran 反馈的问题:grub2 -> g4e,然后 map --mem /xxx.vhd (hd) ,不能加载大于 1.3Gb 的镜像(好像他的内存 8Gb)
你遇到此类问题吗?可否帮忙测试一下:
进入 grub2,测试一下内存发布(不知 brub2 有没有此类命令),然后进入 g4e ,执行 displaymem ,看看可用内存的变化情况。

虚拟机也好,实体机也好,必须关机后再启动,才能释放内存。我看他的截图,失败时状态码是 0x8000000000000009,就是内存不足。

点评

我没有遇到这样的问题,因为我从来就没想过尝试g4e→grub2来回跳转过。 需要怎样的测试?g4e我知道有displaymem命令,grub2我不知道,好象没有啊?  详情 回复 发表于 2020-12-29 16:14
回复

使用道具 举报

224#
 楼主| 发表于 2020-12-29 15:58:52 | 显示全部楼层
你是说这个吧。

我编译32位的时候就看到这句话了,但是没有理解了。我看到 grub_efi_loaded_image 结构里, device_handle 已经赋值,就以为 UEFI 固件改进了,此处注释过时了。
现在仔细想想,是由于 grub2 讲的是 磁盘、设备、文件,而 g4d 讲的是 磁盘、分区。同样问题,描述不同。
回复

使用道具 举报

225#
 楼主| 发表于 2020-12-29 16:03:54 | 显示全部楼层
svbus肯定是用map --mem /xxx.vhd (hd) 的时候多,map /xxx.vhd (hd) 用的少,而且map /xxx.vhd (hd) 可以直接用bootmgfw.efi来引导xxx.vhd代替他。

那就算了吧,不管 SVBus 的碎片问题了,省省心吧。
回复

使用道具 举报

226#
 楼主| 发表于 2020-12-29 16:26:44 来自手机 | 显示全部楼层
liuzhaoyzz:不用测试了。撤回2个测试请求。

点评

哦,好的。  发表于 2020-12-29 18:24
回复

使用道具 举报

227#
 楼主| 发表于 2020-12-30 16:48:34 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-30 17:03 编辑

我已经回复了该帖。如果禁用图形模式成功,可能是不支持通用图形模式。如果任然不行,那就是启动管理器没有设置对。一般电脑插入U盘,启动管理器就会自动列入启动菜单。可是他的第一张截图,视乎是由什么软件设置的。
他可能是从硬盘启动的,可能是启动目录不合适。

点评

他的第一张图,用的是bootice添加UEFI引导序列的功能,这个功能我也在用没问题的。目录的问题,他有帖子截图了,我看了好像也是对的,问题有点奇怪。  详情 回复 发表于 2020-12-30 19:01
回复

使用道具 举报

228#
 楼主| 发表于 2021-1-9 09:06:36 | 显示全部楼层
我猜 yaya 在 UEFI 下仍然会有这个命令

编译64位代码时,内置的汇编代码通不过。所以在 i386 时有 is64bit 这个命令(也就是使用 bootia32.efi 启动系统),在 x86_64 时没有这个命令(也就是使用 bootx64.efi 启动系统)。

@2010eflying
我不明白你是要判断 cpu 是否支持64位,还是要判断系统工作在 UEFI-32/64?
回复

使用道具 举报

229#
 楼主| 发表于 2021-1-9 10:03:09 | 显示全部楼层
g4d 工作在32位模式。要存取4Gb以上内存,需要判断cpu是否支持PAE分页。是否支持AMD64/IA32-e分页。所以要使用 is64bit 判断。
g4e 工作在64位模式时,不需要判断。
回复

使用道具 举报

230#
 楼主| 发表于 2021-1-9 13:01:57 来自手机 | 显示全部楼层
明白了。可以设置一个参数。
回复

使用道具 举报

231#
 楼主| 发表于 2021-1-9 17:11:35 | 显示全部楼层
menu.lst怎么判断是64位还是32位的,请否写一个例子,因为只能调用同一个menu.lst

在 0x8272 处设置标记(1字节),32或者64。
calc *0x8272&0xff
if "%@retval%"=="32" echo 32 || echo 64
回复

使用道具 举报

232#
 楼主| 发表于 2021-1-9 20:04:15 来自手机 | 显示全部楼层
使用惯了grub2,接触grub4dos,会有点别扭。反之亦然。确实有些方面grub2要先进一些,但是不可能把grub4dos改造成grub2,也没有必要。毕竟grub4dos小巧玲珑。grub4dos是支持变量,但内部变量只支持零星的几个,改造起来很困难,体积也会增大。
回复

使用道具 举报

233#
 楼主| 发表于 2021-1-9 20:49:40 来自手机 | 显示全部楼层
BIOS 下 grub4dos 占用 32Mb以下内存。
回复

使用道具 举报

234#
 楼主| 发表于 2021-1-9 20:53:48 来自手机 | 显示全部楼层
usb 驱动是工作在实模式,底层驱动。进入其他管理器后,只要不覆盖它,应该会有效。
回复

使用道具 举报

235#
 楼主| 发表于 2021-1-10 08:59:23 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2021-1-10 09:08 编辑
你今天在github上传的版本好像运行不了外部命令

官网编译的 bootx64.efi 397312 字节,我编译的 bootx64.efi 388096 字节。我编译的外部命令正常。
都是使用 gcc 4.8 编译的。还有说明地方不一样?是什么原因导致的?

这种情况我这里不好排查,因为虽然可以重现错误状态,但是无论怎样我编译的外部命令都正常。
回复

使用道具 举报

236#
 楼主| 发表于 2021-1-10 11:28:24 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2021-1-10 11:33 编辑

这个网友一字千金,短短5个字,是想让人猜谜语。不显示英文只显示中文?估计是又要显示中文,又要显示英文。那就是字库不全,或者字库制作有问题,或者制作软件有问题。
回复

使用道具 举报

237#
 楼主| 发表于 2021-1-10 16:59:08 | 显示全部楼层
你今天在github上传的版本好像运行不了外部命令

今天又上传了一个版本,仍然不行。
回复

使用道具 举报

238#
 楼主| 发表于 2021-1-10 20:46:25 来自手机 | 显示全部楼层
这几年人心浮躁,都想挣快钱,没几个人对技术感兴趣。即便是搞技术的,也喜欢索取,抄袭,弯道超车。
回复

使用道具 举报

239#
 楼主| 发表于 2021-1-11 17:33:04 | 显示全部楼层
请问一下,如下菜单,在QEMU中测试,无论选择 EFI-IA32还是 EFI-X64都是只显示 #x64 部分的菜单, #86 部分的均不显示

calc *0x8272&0xff > nul
set ver=%@retval%

iftitle [if %ver%==64] WinPE (x64)\n基于 Windows 10,内存要求: 1024 MB\n
chainloader /Boot/WinX/x64/WinX.efi

iftitle [if %ver%==32] WinPE (x86)\n基于 Windows 10,内存要求: 1024 MB\n
chainloader /Boot/WinX/x86/WinX.efi

回复

使用道具 举报

240#
 楼主| 发表于 2021-1-11 17:34:56 | 显示全部楼层
@oym2016
错误的
map /imgs/pe10x64.ISO (0xff)||map --mem /imgs/pe10x64.iso (0xff)

正确的
map /imgs/pe10x64.ISO (0xff) || map --mem /imgs/pe10x64.iso (0xff)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-29 17:05

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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