无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
961#
发表于 2020-12-31 07:47:01 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-9-14 08:23 编辑
liuzhaoyzz 发表于 2020-12-29 13:18
2020-12-29日,报告下好消息,UEFI-RAMOS已被彻底攻克:
一、抛弃ntfs_x64.efi的情况下,grub2+ntboot已完 ...

报告个好消息,WIN7英文版,单镜像测试没问题了,可能是系统搞乱了的问题,我重新做了个WIN7英文版测试,正常启动win7enpd-primo-uefi-ramos。ntboot和直接map都可以,没问题。


937楼截图中failed to load virtual disk image,从此成了未解之谜。。。
http://wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=422652&pid=4204397&fromuid=298214

g4e-grub2-win7enpd-primo-ueif-ramos.jpg (217.71 KB, 下载次数: 167)

g4e-grub2-win7enpd-primo-ueif-ramos.jpg
回复

使用道具 举报

962#
发表于 2020-12-31 11:26:57 | 只看该作者
G4D入门即得知已过时,如坠深渊。
大神救万民于水火!
回复

使用道具 举报

963#
发表于 2021-1-2 11:15:23 | 只看该作者
谢谢!!! 支持!!!
回复

使用道具 举报

964#
发表于 2021-1-2 14:15:44 | 只看该作者
要好好学习下了,感谢分享
回复

使用道具 举报

965#
发表于 2021-1-3 09:23:07 | 只看该作者
yaya大佬,有空的时候请看下201-206楼的帖子,sevenyu无法在苹果电脑上面正确加载menu.lst。
http://wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=423423&pid=4208950&fromuid=298214
回复

使用道具 举报

966#
发表于 2021-1-5 23:12:04 | 只看该作者
good job!
回复

使用道具 举报

967#
发表于 2021-1-6 18:45:39 | 只看该作者
话说啥时候 g4e 能跟 windows boot manager 互相链式引导就好了。
之前在 legacy 模式下 g4d 和 windows boot manager 就是能互相链式引导的,uefi 下好像行不通的样子...

无论在 g4e 里 chainloader 微软的 bootx64.efi 还是在 windows boot manager 的 BCD 里指定 g4e 的 bootx64.efi 都没法成功引导过去...

点评

前面有帖子啊,g4e可以直接chainloader微软的bootmgfw.efi。 微软处处打压linux,怎么回去加载linux的引导器,g4e/grub2都是非微软体系的,微软不但不会支持,还会用安全启动这样的工具作梗。  详情 回复 发表于 2021-1-8 22:13
回复

使用道具 举报

968#
发表于 2021-1-8 22:13:16 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-9-14 08:24 编辑
wzq2002 发表于 2021-1-6 18:45
话说啥时候 g4e 能跟 windows boot manager 互相链式引导就好了。
之前在 legacy 模式下 g4d 和 windows b ...

前面有帖子啊,g4e可以直接chainloader微软的bootmgfw.efi。

微软处处打压linux,怎么会去加载linux的引导器,g4e/grub2都是非微软体系的,微软不但不会支持,还会用安全启动这样的工具作梗。
回复

使用道具 举报

969#
发表于 2021-1-8 23:58:21 | 只看该作者
menu.lst怎么判断是64位还是32位的,请否写一个例子,因为只能调用同一个menu.lst

点评

我在旧的 bios 版本的 grub4dos 中,就写了一个 is64bit 的命令,用来判断 cpu 是否 64 位。它是内部命令,直接可以在 menu.lst 中使用。 我猜 yaya 在 UEFI 下仍然会有这个命令,你试试。如果没有的话,你让 ya  详情 回复 发表于 2021-1-9 08:03
回复

使用道具 举报

970#
发表于 2021-1-9 00:03:20 | 只看该作者
顶起!
回复

使用道具 举报

971#
发表于 2021-1-9 08:03:10 | 只看该作者
2010eflying 发表于 2021-1-8 23:58
menu.lst怎么判断是64位还是32位的,请否写一个例子,因为只能调用同一个menu.lst

我在旧的 bios 版本的 grub4dos 中,就写了一个 is64bit 的命令,用来判断 cpu 是否 64 位。它是内部命令,直接可以在 menu.lst 中使用。

我猜 yaya 在 UEFI 下仍然会有这个命令,你试试。如果没有的话,你让 yaya 写一个。
回复

使用道具 举报

972#
 楼主| 发表于 2021-1-9 09:06:36 | 只看该作者
我猜 yaya 在 UEFI 下仍然会有这个命令

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

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

点评

如果U盘合盘就要考虑通用性来判断当前环境是X86还是X64,适当的显示可用菜单  详情 回复 发表于 2021-1-10 22:14
可以条件编译,64位uefi下直接返回1,没必要用汇编判断。 应该是判断 uefi 的位数。  详情 回复 发表于 2021-1-9 09:26
回复

使用道具 举报

973#
发表于 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 的用法不符。
回复

使用道具 举报

974#
发表于 2021-1-9 09:39:48 | 只看该作者
支持,学习来了
回复

使用道具 举报

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

点评

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

使用道具 举报

976#
发表于 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 下应该加载的文件是不同的。
回复

使用道具 举报

977#
 楼主| 发表于 2021-1-9 13:01:57 来自手机 | 只看该作者
明白了。可以设置一个参数。
回复

使用道具 举报

978#
发表于 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)


回复

使用道具 举报

979#
 楼主| 发表于 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

点评

这些内存地址很难记忆,而且也没有文档,不方便最终用户理解和使用。 grub2 下有 "grub_cpu" 这种变量可以判断位数,"grub_platform" 可以判断平台是 pcbios 还是 uefi。这些比 "0x8272" 之类的更容易理解。 grub4  详情 回复 发表于 2021-1-9 17:54
回复

使用道具 举报

980#
发表于 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 也支持变量,能不能用类似的环境变量供用户使用?
回复

使用道具 举报

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

点评

但是直接写内存地址也太不"友好"了吧,我觉得可以改一下 is64bit 命令啊。 比如 is64bit 默认是判断cpu的位数,"is64bit --uefi" 来判断uefi的位数。 另外请教两个不相关的问题: 1. BIOS 下的 grub4dos 会占用  详情 回复 发表于 2021-1-9 20:30
回复

使用道具 举报

982#
发表于 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 有效吗?
回复

使用道具 举报

983#
 楼主| 发表于 2021-1-9 20:49:40 来自手机 | 只看该作者
BIOS 下 grub4dos 占用 32Mb以下内存。
回复

使用道具 举报

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

点评

你今天在github上传的版本好像运行不了外部命令 [attachimg]472530[/attachimg]  详情 回复 发表于 2021-1-9 21:51
回复

使用道具 举报

985#
发表于 2021-1-9 21:37:54 | 只看该作者
liuzhaoyzz 发表于 2021-1-8 22:13
前面有帖子啊,g4e可以直接chainloader微软的bootmgfw.efi。

微软处处打压linux,怎么回去加载linux的 ...

改用了12月31号的版本,可以引导bootmgfw.efi了。
回复

使用道具 举报

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

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

回复

使用道具 举报

987#
发表于 2021-1-10 00:30:36 | 只看该作者
不显示英文!

点评

自行加载unifont.hex.gz,前面帖子yaya有分享!  详情 回复 发表于 2021-1-10 11:24
回复

使用道具 举报

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

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

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

使用道具 举报

989#
发表于 2021-1-10 11:24:21 来自手机 | 只看该作者
2011ML丨叼四郎 发表于 2021-1-10 00:30
不显示英文!

      自行加载unifont.hex.gz,前面帖子yaya有分享!  

点评

新手新手,见谅见谅!  详情 回复 发表于 2021-1-11 19:55
回复

使用道具 举报

990#
 楼主| 发表于 2021-1-10 11:28:24 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2021-1-10 11:33 编辑

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

点评

对于这样的网友,可以直接pass,等闲下来有空的时候再抽空回复他吧,或者等其他的网友给他回复。你们干的事情,重要的多得多。 我特别欣赏的是墨西哥的alacran,他真的是一个很好地使用者和反馈者,从reboot.pro到g  详情 回复 发表于 2021-1-10 20:38
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 22:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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