无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
 楼主| 发表于 2020-10-30 12:47:03 来自手机 | 显示全部楼层
chainloader (hd0)      你是没有使用map函数,而直接启动第一个磁盘吗?
回复

使用道具 举报

发表于 2020-10-30 13:23:56 | 显示全部楼层
2011yaya2007777 发表于 2020-10-29 21:01
原来支持不?我只是把接口由BIOS改为UEFI,另外屏蔽了ipxe.

9999999999999999999999999.png
原来支持的
回复

使用道具 举报

发表于 2020-10-30 13:32:22 | 显示全部楼层
樓主加油,向勤勞者致敬!
回复

使用道具 举报

发表于 2020-10-30 13:50:10 | 显示全部楼层
本帖最后由 不才 于 2020-10-30 13:53 编辑
liuzhaoyzz 发表于 2020-10-30 11:36
在你昨天58楼和81楼回这个帖子之前,我摸索了好久了。后来我放到根目录下才找到的。而且menu.lst必须要用 ...

嘿嘿,看来超版对于g4d还是不熟悉呀。
自2011年12月开始,g4d只要开启了VBE模式,菜单文件必须采用utf-8编码!这是王八的屁股——龟腚
回复

使用道具 举报

发表于 2020-10-30 14:12:56 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-10-30 14:18 编辑
不才 发表于 2020-10-30 13:50
嘿嘿,看来超版对于g4d还是不熟悉呀。
自2011年12月开始,g4d只要开启了VBE模式,菜单文件必须采用utf-8 ...

        我知道g4d用中文+vbe模式需要menu.lst用utf-8的编码啊。

现在是grub4dos-uefi,我试了utf-8编码显示不出来,然后我就用ansi编码进行了尝试,结果也不行。

换用了yaya在91楼分享的unifont.hex,用vbe模式可以正常显示并启动pe.iso了。之前我用了我电脑里面保存的unifont.hex不行,可能是精简版本的。

GPT-TEST-2020-10-30-14-17-07.png
回复

使用道具 举报

发表于 2020-10-30 14:18:04 | 显示全部楼层
xbmc 发表于 2020-10-30 12:18
怎么两个--mem?
还有 --mem应该没用。
我用的命令是

        正式的菜单里面是只有一个--mem,下面是编辑的时候笔误了。
回复

使用道具 举报

发表于 2020-10-30 14:18:39 | 显示全部楼层
uefi下不存在vbe模式。
建议统一一下术语,叫 gfx模式吧
回复

使用道具 举报

发表于 2020-10-30 14:31:47 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-10-30 14:48 编辑
wintoflash 发表于 2020-10-30 14:18
uefi下不存在vbe模式。
建议统一一下术语,叫 gfx模式吧

        我们业余人士也搞不懂那么专业的术语,大神们说叫什么就叫什么吧。

@yaya,反馈个问题,前面wintoflash大神也曾经反馈过的。
在虚拟机的虚拟光驱里面挂载个pe1.iso镜像,然后uefi设置本地硬盘优先于光驱启动,引导文件就是grub4dos-uefi那个bootx64.efi,菜单如下:
title /boot/imgs/SXWIN10PEX64_17763_NET20200902.iso
find --set-root /boot/imgs/SXWIN10PEX64_17763_NET20200902.iso
map --mem /boot/imgs/SXWIN10PEX64_17763_NET20200902.iso (cd0)
chainloader (cd0)
结果引导的不是这个仿真出来的(cd0),似乎是虚拟光驱里面挂载的那个pe1.iso,但是有加载到(cd0)的xxxMB的进度。
类似的问题,wintoflash大神在修改grub2的时候曾经碰到过类似的问题,参见
152楼,163楼,166楼,303楼已解决,我们也曾经反馈过,这个问题可以稳定重现。
至于原因,wintoflash分析过也提出过改进的办法,主要就是微软的bootmgfw.efi只能支持第一个光驱启动。



GPT-TEST-2020-10-30-14-25-34.png
回复

使用道具 举报

 楼主| 发表于 2020-10-30 14:36:56 来自手机 | 显示全部楼层
不如就叫文本模式,图形模式。管他何种图形模式。
回复

使用道具 举报

 楼主| 发表于 2020-10-30 14:40:01 | 显示全部楼层
@yaya,反馈个问题,前面wintoflash大神也曾经反馈过的

昨天测试没有问题,这个容我再测试一下。
回复

使用道具 举报

发表于 2020-10-30 15:56:04 | 显示全部楼层
建议:菜单文件默认在 \efi\grub\ 下,文件名:grub.txt
回复

使用道具 举报

发表于 2020-10-30 16:07:38 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-10-30 16:09 编辑
blank007 发表于 2020-10-30 15:56
建议:菜单文件默认在 \efi\grub\ 下,文件名:grub.txt

       其实我一直在想能否和BIOS下的grub4dos共用一套菜单,比如MBR磁盘,根目录下有一个menu.lst,BIOS/UEFI可以共用一套菜单即可。这样子的话,BIOS/UEFI下默认的查找路径都是相同的,menu.lst太多的话,会把人搞晕的。
回复

使用道具 举报

发表于 2020-10-30 16:15:10 | 显示全部楼层
本帖最后由 hilsonma 于 2020-10-30 16:28 编辑
blank007 发表于 2020-10-30 15:56
建议:菜单文件默认在 \efi\grub\ 下,文件名:grub.txt

同建议菜单文件默认在 /EFI/grub/ ,与UEFI规范一致。
菜单文件名个人认为无所谓,可以跟原来一致。

更喜欢的是菜单内置,同时提供修改工具。这样就跟之前一样,一个文件就可以引导。
一个引导文件,一个修改工具,一个学习文档(说明文档 和/或 自己的学习记录),就可以成为完整的软件包。
回复

使用道具 举报

发表于 2020-10-30 16:19:36 | 显示全部楼层
liuzhaoyzz 发表于 2020-10-30 16:07
其实我一直在想能否和BIOS下的grub4dos共用一套菜单,比如MBR磁盘,根目录下有一个menu.lst,BIOS ...

但是如果你原来的menu.lst里有“高级”的命令,用g4efi去执行会出错的(因为不支持这些命令),还是分开好些
回复

使用道具 举报

 楼主| 发表于 2020-10-30 16:44:40 来自手机 | 显示全部楼层
有人偏爱内置菜单,但是不易修改。再说,现在是在保护模式,内存不能任意指定。内置菜单怎么编译进去,又如何修改,需有这方面知识和经验的人来完成。
回复

使用道具 举报

 楼主| 发表于 2020-10-30 16:49:01 来自手机 | 显示全部楼层
UEFI规范好像没有规定菜单放在哪里吧。我觉得当务之急是完善启动任意磁盘(光盘)、启动任意分区的efi文件。
回复

使用道具 举报

发表于 2020-10-30 16:49:11 | 显示全部楼层
liuzhaoyzz 发表于 2020-10-30 16:07
其实我一直在想能否和BIOS下的grub4dos共用一套菜单,比如MBR磁盘,根目录下有一个menu.lst,BIOS ...

如果要bios/uefi共用,那也是以UEFI为主,兼容bios,毕竟bios在逐渐逝去。
菜单文件可以按UEFI规范放在 /EFI/grub,然后在bios引导中指定使用 /EFI/grub/menu.lst,这样做为过渡期做法。
新的东西建议还是适应新的方向,向前看。
回复

使用道具 举报

发表于 2020-10-30 17:56:52 来自手机 | 显示全部楼层
这个我有不同建议,三启用一个菜单文件,我同意 至于高级命令啥的,加一句启动环境判断即可解决;菜单文件路径最好另起名称,grub目录不合适,应该算是一个共用目录了。
回复

使用道具 举报

发表于 2020-10-30 18:19:29 | 显示全部楼层
本帖最后由 wintoflash 于 2020-10-30 18:45 编辑
2011yaya2007777 发表于 2020-10-30 16:49
UEFI规范好像没有规定菜单放在哪里吧。我觉得当务之急是完善启动任意磁盘(光盘)、启动任意分区的efi文件 ...

UEFI 本身没有这种规定。
我也觉得这个目前不重要。

有人偏爱内置菜单,但是不易修改。再说,现在是在保护模式,内存不能任意指定。内置菜单怎么编译进去,又如何修改,需有这方面知识和经验的人来完成。

我记得 grub2 好像是生成镜像的时候把动态加载模块(.mod)、memdisk、内置菜单 都是当作 "模块" 来看的。模块头部记录了类型之类的东西。有一个链表记录了各模块的地址。

我也很好奇 grub4dos efi 是怎么做的,估计以前那些直接读内存地址的菜单用法都不兼容了。比如
  1. write 0x307ff8 1  && configfile
  2. calc *50000=*0x8280
复制代码


BIOS 的 grub4dos 是一直在实模式下吗?
怎么把c语言代码编译成纯16位的?
回复

使用道具 举报

发表于 2020-10-30 18:21:53 | 显示全部楼层
权限不足,不让下载。
回复

使用道具 举报

发表于 2020-10-30 18:34:09 | 显示全部楼层
一直不喜欢grub2 这回好了 mbr和uefi 完美了,谢谢老铁。
回复

使用道具 举报

发表于 2020-10-30 18:38:31 | 显示全部楼层
比较建议菜单文件和 GRUB4DOS 的不使用相同的默认位置,但可通过 GRUB4DOS 内置菜单解决,这问题不是很大。
另外,GRUB4DOS 的外部命令是否都不能使用了?
回复

使用道具 举报

 楼主| 发表于 2020-10-30 19:03:41 来自手机 | 显示全部楼层
函数 Fn.xx 可以使用,注意跟随的参数是 64 位的。变量指针由 0x8304 gbwei
回复

使用道具 举报

 楼主| 发表于 2020-10-30 19:05:16 来自手机 | 显示全部楼层
手机编辑真麻烦!改变为0x8308.
回复

使用道具 举报

发表于 2020-10-30 19:21:29 | 显示全部楼层
这个帖子相当好。好好搞下去,成熟了也把玩下。
回复

使用道具 举报

发表于 2020-10-30 20:33:22 | 显示全部楼层
U盘分了两个区,前边时exfat分区存数据,后边有个fat16分区作为efi分区,用bootx64.efi启动,没写菜单,在命令行查看当前启动设备为hd1,hd0为台式机固态硬盘,(hd0,0)为台式机固态的efi分区,(hd0.1)是bug10单系统,尝试在命令行chainloader (hd0,0)/efi/boot/bootx64.efi;boot
然后有返回grub4dos命令行界面了。请问如何启动硬盘上的efi?需要设置root么?
回复

使用道具 举报

 楼主| 发表于 2020-10-30 20:43:57 来自手机 | 显示全部楼层
前面已经说了,启动实机上的磁盘、分区功能还为实现,抱歉<(_ _)>
回复

使用道具 举报

发表于 2020-10-30 21:21:10 | 显示全部楼层
2011yaya2007777 发表于 2020-10-30 16:49
UEFI规范好像没有规定菜单放在哪里吧。我觉得当务之急是完善启动任意磁盘(光盘)、启动任意分区的efi文件 ...

UEFI规范没有规定菜单放在哪里,但有规范efi文件的位置,如 /EFI/vendor_dir/ 或 /EFI/vendor_dir/Boot/
因此我建议相关的文件都放在这一位置。
例如:
\EFI\Microsoft\Boot\
\EFI\Xorboot\
\EFI\grub
以此类推。

当然,这些都是小问题,无关紧要,只是有人提出了建议,我就跟着发表而已。
我翘首期待的是启动 vhdx 和 wim.
回复

使用道具 举报

发表于 2020-10-31 09:06:00 | 显示全部楼层
有常用菜单示例不
回复

使用道具 举报

发表于 2020-10-31 11:11:05 | 显示全部楼层
围观  围观
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 17:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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