无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
91#
发表于 2020-12-23 11:04:26 | 显示全部楼层
2011yaya2007777 发表于 2020-12-23 10:54
谢谢你,这么详尽的解答,受教了!

我没有仔细研究,如果它自己又新建了一个仿真盘,而没有使用map --mem的内存盘,那是极大的内存浪费。如果是这样,那就更应当支持碎片仿真了。

SVBus 的虚拟盘,内存还是 grub4dos分配的。磁盘参数之类的好像都是自己弄的。
非内存盘,如果文件不连续,由于 SVBus 只从内存中读了 文件头部的偏移,还有文件的长度,那SVBus 的虚拟盘里面的数据就是坏的,有乱码。
回复

使用道具 举报

92#
发表于 2020-12-23 13:18:04 | 显示全部楼层
2011yaya2007777 发表于 2020-12-23 12:57
wintoflash: 外部命令测试,是死机了,还是可以回到命令行?

虚拟机报错,强制重启。
实体机是死机。
回复

使用道具 举报

93#
发表于 2020-12-23 22:46:49 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-23 22:47 编辑
wjia 发表于 2020-12-23 14:01
看帖回帖。。。。。

请不要大量发无意义回复。
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D2
回复

使用道具 举报

94#
发表于 2020-12-25 10:33:28 | 显示全部楼层
本帖最后由 wintoflash 于 2020-12-25 10:50 编辑
2011yaya2007777 发表于 2020-12-25 10:26
再次测试G4E外部命令。

OK了

回复

使用道具 举报

95#
发表于 2020-12-25 15:20:20 | 显示全部楼层
写了两个实验性的外部命令。date 和 ver。
date 显示直接从 UEFI 系统表运行时服务获取的日期,ver 命令显示 UEFI 的版本。
g4eext-2020-12-25.zip (1.46 KB, 下载次数: 33)

点评

3个命令都执行ok  详情 回复 发表于 2020-12-25 15:39
回复

使用道具 举报

96#
发表于 2020-12-25 15:39:17 | 显示全部楼层
2011yaya2007777 发表于 2020-12-25 15:26
虚拟机测试,三个外部命令都正确。
ver 2.4

那好,如果你不再改动外部命令格式的话,等下我把g4e的外部命令推送到grubutils。
chenall有没有打算搞一下外部命令的自动编译?

点评

我是有打算把自动编译从原来的travis-ci转移到github自带的Action。 不过最近时间比较少,还没有去研究。  详情 回复 发表于 2020-12-25 17:03
回复

使用道具 举报

97#
发表于 2020-12-26 19:34:27 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-26 14:28
他的意思是说,g4e加载vhd.lz4要比grub2快,但是新的UEFI主板上面,g4e不能直接加载,必须通过grub2 ...

lz4 这种格式又不是主流,快个几秒又能怎样。限制加载速度的瓶颈是磁盘 I/O,而不是解压速度。用xz就行。
grub4dos 的 lz4 支持是有局限性的,在 linux 下用默认参数压缩的都不能解压。

点评

哦,原来这样啊。有空的话你给alacran回复下吧,看样子他对于grub2也是刚接触不久,很多东西不知道。 我完全忘了xz这档子事儿了,我感觉xz压缩比很高。  详情 回复 发表于 2020-12-26 20:57
回复

使用道具 举报

98#
发表于 2020-12-29 15:06:44 | 显示全部楼层
2011yaya2007777 发表于 2020-12-29 14:57
liuzhaoyzz:
首先要祝贺你,通过辛勤劳动取得了丰硕战果!

不支持。江南一根葱已经试过了。
回复

使用道具 举报

99#
发表于 2020-12-29 15:43:29 | 显示全部楼层
2011yaya2007777 发表于 2020-12-29 15:22
我先编译了一个 grub2,其中增加了一些调试信息。通过比对,发现 grub2 的文件路径包含分区信息。
将 G4 ...

你是说这个吧。
https://github.com/a1ive/grub/bl ... chainloader.c#L1028
/* LoadImage does not set a device handler when the image is
     loaded from memory, so it is necessary to set it explicitly here.
     This is a mess.  */
回复

使用道具 举报

100#
发表于 2020-12-29 16:43:36 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-29 16:14
我没有遇到这样的问题,因为我从来就没想过尝试g4e→grub2来回跳转过。

需要怎样的测试?g4e我知道有d ...

lsmmap
lsefimmap
回复

使用道具 举报

101#
发表于 2021-1-9 09:26:42 | 显示全部楼层
本帖最后由 wintoflash 于 2021-1-9 09:43 编辑
2011yaya2007777 发表于 2021-1-9 09:06
编译64位代码时,内置的汇编代码通不过。所以在 i386 时有 is64bit 这个命令(也就是使用 bootia32.efi  ...

可以条件编译,64位uefi下直接返回1,没必要用汇编判断。
我不明白你是要判断 cpu 是否支持64位,还是要判断系统工作在 UEFI-32/64?

应该是判断 uefi 的位数,那和 is64bit 的用法不符。
回复

使用道具 举报

102#
发表于 2021-1-9 11:07:33 | 显示全部楼层
2011yaya2007777 发表于 2021-1-9 10:03
g4d 工作在32位模式。要存取4Gb以上内存,需要判断cpu是否支持PAE分页。是否支持AMD64/IA32-e分页。所以要 ...

@2010eflying 提这个问题,是因为 ia32 uefi 和 x64 uefi 下的 grub4dos 都加载同一个 menu.lst。
如果 menu.lst 里面有菜单项是加载 efi 驱动或者启动其他 efi 文件,那么 ia32 uefi 和 x64 uefi 下应该加载的文件是不同的。
回复

使用道具 举报

103#
发表于 2021-1-9 14:05:53 | 显示全部楼层
本帖最后由 wintoflash 于 2021-1-9 14:19 编辑

闲得无聊,又写了个外部命令:cpuid。
可以通过 cpuid 指令获取处理器型号之类的信息。
uefi版: cpuid.7z (1.21 KB, 下载次数: 25)
bios版: cpuid_bios.7z (929 Bytes, 下载次数: 21)


回复

使用道具 举报

104#
发表于 2021-1-9 17:54:44 | 显示全部楼层
2011yaya2007777 发表于 2021-1-9 17:11
在 0x8272 处设置标记(1字节),32或者64。
calc *0x8272&0xff
if "%@retval%"=="32" echo 32 || echo ...

这些内存地址很难记忆,而且也没有文档,不方便最终用户理解和使用。
grub2 下有 "grub_cpu" 这种变量可以判断位数,"grub_platform" 可以判断平台是 pcbios 还是 uefi。这些比 "0x8272" 之类的更容易理解。
grub4dos 也支持变量,能不能用类似的环境变量供用户使用?
回复

使用道具 举报

105#
发表于 2021-1-9 20:30:24 | 显示全部楼层
2011yaya2007777 发表于 2021-1-9 20:04
使用惯了grub2,接触grub4dos,会有点别扭。反之亦然。确实有些方面grub2要先进一些,但是不可能把grub4dos ...

但是直接写内存地址也太不"友好"了吧,我觉得可以改一下 is64bit 命令啊。
比如 is64bit 默认是判断cpu的位数,"is64bit --uefi" 来判断uefi的位数。

另外请教两个不相关的问题:
1. BIOS 下的 grub4dos 会占用哪些内存区域?
2. BIOS 下 grub4dos 的 usb 驱动是什么原理?如果加载 usb 驱动之后进入其他启动管理器 (比如 syslinux),这个驱动还对 syslinux 有效吗?
回复

使用道具 举报

106#
发表于 2021-1-9 21:51:13 | 显示全部楼层
2011yaya2007777 发表于 2021-1-9 20:53
usb 驱动是工作在实模式,底层驱动。进入其他管理器后,只要不覆盖它,应该会有效。

你今天在github上传的版本好像运行不了外部命令

回复

使用道具 举报

107#
发表于 2021-1-11 08:22:20 | 显示全部楼层
2011yaya2007777 发表于 2021-1-10 16:59
今天又上传了一个版本,仍然不行。

是的,现象一样。

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

你的电脑有点邪门啊。
回复

使用道具 举报

108#
发表于 2021-1-11 17:10:57 | 显示全部楼层
blank007 发表于 2021-1-11 16:44
请问一下,如下菜单,在QEMU中测试,无论选择 EFI-IA32还是 EFI-X64都是只显示 #x64 部分的菜单, #86 部分 ...

is64bit 的作用是检测 cpu 是否支持 64 位,而不是检测 uefi 是否为 64 位。

回复

使用道具 举报

109#
发表于 2021-1-11 20:57:18 | 显示全部楼层
blank007 发表于 2021-1-11 20:19
补充一个:

title Acronis (x64)\nAcronis 11.7 中文版,内存要求: 1024 MB\n

目前暂时不支持加载多个initrd

点评

原来如此。 多谢  详情 回复 发表于 2021-1-11 20:58
回复

使用道具 举报

110#
发表于 2021-1-12 14:54:36 | 显示全部楼层
blank007 发表于 2021-1-11 20:19
补充一个:

title Acronis (x64)\nAcronis 11.7 中文版,内存要求: 1024 MB\n

能不能传一下这个Linux?

点评

没问题。 先解释几个问题: 您说的这个Linux,其实就是 Acronis Bakucp 11.7.50230 ,我只是按照习惯对文件改名,然后制做成自己习惯的 GRUB4DOS (bios版)、XorBoot U 可分别引导的版本。 另外,您将要下  详情 回复 发表于 2021-1-12 15:45
回复

使用道具 举报

111#
发表于 2021-1-12 16:03:39 | 显示全部楼层
blank007 发表于 2021-1-11 20:19
补充一个:

title Acronis (x64)\nAcronis 11.7 中文版,内存要求: 1024 MB\n

试试:
grub4dos-for_UEFI-2021-01-12.7z (241.59 KB, 下载次数: 24)
  1. title acronis
  2. kernel /acronis/kernel.dat quiet vga=791 product=bootagent media_for_windows
  3. initrd /acronis/initrd.dat /acronis/initrd.img
复制代码

测试通过

点评

另外,您刚刚的版本和 yaya 的 2021.01.10 版一样,判断 uefi 位数的结果不正确  详情 回复 发表于 2021-1-12 16:52
可能受 flash 插件禁用影响,无法上传图片和文件了。 请到我的FTP看照片 我估计还是和优盘格式有关  详情 回复 发表于 2021-1-12 16:43
回复

使用道具 举报

112#
发表于 2021-1-12 16:54:07 | 显示全部楼层
blank007 发表于 2021-1-12 16:52
另外,您刚刚的版本和 yaya 的 2021.01.10 版一样,判断 uefi 位数的结果不正确

那部分是yaya写的,跟我无关。yaya还没有推送代码。
在命令行手动执行这两条命令 (kernel 和 initrd),拍个照看看。


点评

晕。 很抱歉。用了的yaya的版本。刚刚用你的版本试了,通过。 另外,你的版本对文件夹、文件名大小写敏感。  详情 回复 发表于 2021-1-12 17:04
回复

使用道具 举报

113#
发表于 2021-1-12 20:13:54 | 显示全部楼层
测试:使用 gcc-7 编译的 grub4dos
grub4dos-for_UEFI-2021-01-12.7z (238.6 KB, 下载次数: 212)

点评

adobe flash player 被禁用后,无法向论坛发送任何附件。 只能文字描述一下:您刚才的这个版本,使用 configfile ,会报告 : 不能加载到内存。其它的还没有测试。  详情 回复 发表于 2021-1-12 21:28
回复

使用道具 举报

114#
发表于 2021-1-13 15:08:06 | 显示全部楼层
2011yaya2007777 发表于 2021-1-13 15:00
你说的有道理,我感觉可能不是 gcc 版本问题。因为我这里是 4.8,官网也是 4.8。
grub4dos_dev 可能是 3 ...

跟32位64位应该有很大关系。我查gcc-5报错的时候,很多帖子都提到了这个问题。
travis-ci上是64位的ubuntu。
回复

使用道具 举报

115#
发表于 2021-1-13 18:21:24 | 显示全部楼层
chenall 发表于 2021-1-13 15:56
现在好像都是64位的,travis-ci 也即将停用,我这些天测试看看用github action能不能编译一个可用的出来。
...

我的grub2就是用 github action 自动编译发布的。不过为了让下载地址固定,都是覆盖上一次的文件。
用的是这个 https://github.com/marketplace/actions/automatic-releases
配置文件:https://github.com/a1ive/grub/bl ... workflows/build.yml
回复

使用道具 举报

116#
发表于 2021-1-17 13:45:02 | 显示全部楼层
chenall 发表于 2021-1-16 20:23
有条件的试一下这个版本是否正常

外部命令也正常
回复

使用道具 举报

117#
发表于 2021-1-17 13:46:44 | 显示全部楼层
blank007 发表于 2021-1-16 23:08
使用 UltraISO 制作的 BIOS/UEFI 双启动.iso (I9SO9660_Joilet格式),UEFI自然是使用这个版本,Qemu 测试 ...
光盘上不能引导 bootmgfw.efi 、acronis.efi 这个问题,Grub2 也是一样的。

这不是grub2/grub4dos的问题,而是acronis的启动器本身不支持从非ESP分区启动。
回复

使用道具 举报

118#
发表于 2021-1-17 15:18:45 | 显示全部楼层
回复

使用道具 举报

119#
发表于 2021-1-22 14:20:00 | 显示全部楼层
2011yaya2007777 发表于 2021-1-22 10:28
grub4dos 有 ntboot 模块,希望有人移植到 grub4dos for uefi。

[d039f8f]: . 解决64位环境编译的版本找不到固定数据区的问题。 (yaya)

2021-01-22: 此版本不能正常运行外部命令。
无论是从github上下载的,还是自己编译的,都不行。
是不是外部命令的头文件又要改?
回复

使用道具 举报

120#
发表于 2021-1-22 14:34:33 | 显示全部楼层
本帖最后由 wintoflash 于 2021-1-22 14:36 编辑
hilsonma 发表于 2021-1-22 10:04
建议多层差分也考虑一下。
或者可以跟wintoflash参考一下,他改的grub2的ntboot模块是可以直接引导子vhd ...

我以前说过,ntboot 不会读 vhd。读 vhd 的是 bootmgfw.efi,它支持什么样的格式,那就能启动什么样的vhd。
如果Wintoflash大神有兴趣,应该很简单。grub2的ntboot就是Wintoflash大神从chenall的ntboot移植过去的。

不是。只是借鉴了 chenall 的 ntboot 的原理。现在 grub2 的 ntboot 和 早期的版本完全不是一回事了。
grub4dos 有 ntboot 模块,希望有人移植到 grub4dos for uefi。

等你弄好了外部命令,我肯定会弄 ntboot。我个人觉得没必要研究差分 vhd。因为微软的 bootmgfw.efi 支持直接启动差分 vhd,而 linux 下又没有启动差分 vhd 的方案,即使做了也没啥用。

点评

这个我是知道的,BIOS下面的ntboot和grub2-uefi下面的ntboot肯定差别非常之大,作为一个外行人来看你的开发记录和你参考过的知识技术就知道。 静候佳音!  详情 回复 发表于 2021-1-22 15:01
是我表达错误,没关系,可以的话,你就做个g4e的外部命令,让它能象grub2的ntboot一样生成bcd/boot.sdi,然后调用bootmgfw.efi启动vhd就好了。  详情 回复 发表于 2021-1-22 14:44
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-1 18:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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