无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
 楼主| 发表于 2020-11-3 10:21:46 | 显示全部楼层
不要这一句map (hd0) (hd1),RAMOS也能够正常启动

BIOS 模式只能从 (hd0) 启动,你映射建立的虚拟磁盘是 (hd1),而要从虚拟磁盘启动,必须将两个磁盘的盘符对调。
UEFI 模式没有此限制。
回复

使用道具 举报

发表于 2020-11-3 10:44:23 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-3 10:47 编辑

虎大(2012wuzhong)曾经探索过UEFI-RAMOS,好像是0xc00000e错误。
uefi单镜像p驱ramos关键性突破 - RAMOS - 无忧启动论坛 - Powered by Discuz! http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411965

UEFI-RAMOS是一个系统工程,需要很多懂得相关知识的人才和大神齐心协力才能成事,包括引导器层面、驱动层面、操作系统底层等等。
回复

使用道具 举报

发表于 2020-11-3 11:54:59 | 显示全部楼层
本帖最后由 sunsea 于 2020-11-3 11:56 编辑
wintoflash 发表于 2020-11-2 21:57
这是最不麻烦的。
GRUB2 UEFI 的 map, wimboot, ntboot,GRUB4DOS BIOS 和 UEFI 下的 map, Syslinux ...

如果已经UEFI下做到了,那就非常好,我们只需要接着搞磁盘驱动那一层了——我觉得修改SVBus使其能够从UEFI环境变量或者其他什么可靠参数传递渠道读地址的方案成功概率是最大的。

确实大概我对这些技术进展落后了。

BIOS下grub4dos的map起效,是因为g4d接管了int13,所以bootmgr能顺利读盘。如果现在在UEFI环境下对bootmgfw.efi的仿真措施已经成熟,那就非常给力了。

胜利有望了……毕竟磁盘驱动这一层微软好歹已经有文档化的东西和接口,bootmgr/bootmgfw.efi这一层简直是摸黑操作。

这几天找找资料看看能不能hack一下SVBus之类的玩意……

点评

SVbus是开源的,如果你能够修改直接修改源代码,编译即可,不需要hack吧。  详情 回复 发表于 2020-11-3 14:05
回复

使用道具 举报

发表于 2020-11-3 12:06:34 | 显示全部楼层

支持支持
回复

使用道具 举报

发表于 2020-11-3 12:52:11 | 显示全部楼层
印象中imdisk
好像有一个功能可以映射指定内存地址区域作为磁盘的。

如果能用的话可能会简单一些。

另外由于驱动签名的问题,如果能用imdisk或Dokan驱动去实现的话会省事一些。

点评

目前只要确定bootmgfw.efi能够正确从g4d uefi中map的磁盘里正确读取bcd,SYSTEM等几个文件,那么剩下的事情非常简单,但是考虑到map还分非mem和mem,那么imdisk可能会比较麻烦,还是SVBus比较好,只需要hack一下获取  详情 回复 发表于 2020-11-3 13:55
回复

使用道具 举报

发表于 2020-11-3 13:07:40 | 显示全部楼层
好东西,先收藏
回复

使用道具 举报

发表于 2020-11-3 13:55:23 来自手机 | 显示全部楼层
chenall 发表于 2020-11-3 12:52
印象中imdisk
好像有一个功能可以映射指定内存地址区域作为磁盘的。



目前只要确定bootmgfw.efi能够正确从g4d uefi中map的磁盘里正确读取bcd,SYSTEM等几个文件,那么剩下的事情非常简单,但是考虑到map还分非mem和mem,那么imdisk可能会比较麻烦,还是SVBus比较好,只需要hack一下获取map信息的方式就好了……

签名问题应该可以通过bcd设置解决。
回复

使用道具 举报

发表于 2020-11-3 14:05:00 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-3 14:08 编辑
sunsea 发表于 2020-11-3 11:54
如果已经UEFI下做到了,那就非常好,我们只需要接着搞磁盘驱动那一层了——我觉得修改SVBus使其能够从UEF ...

SVbus是开源的,如果你能够修改直接修改源代码,编译即可,不需要hack吧。

目前只要确定bootmgfw.efi能够正确从g4d uefi中map的磁盘里正确读取bcd,SYSTEM等几个文件,那么剩下的事情非常简单,但是考虑到map还分非mem和mem,那么imdisk可能会比较麻烦,还是SVBus比较好,只需要hack一下获取map信息的方式就好了……

确实这一块是比较难的,bootmgfw.efi都是黑盒子。

签名问题应该可以通过bcd设置解决。
驱动签名问题不难,有驱动签名工具,论坛里就有分享的,对于WIN10的话,用的BCD方案解决肯定不合适。



点评

说的就是直接改源码。有时间我去看看M$有没有在核心模式下读UEFI环境变量的。然后请yaya设计一下信息传递格式。  详情 回复 发表于 2020-11-3 14:11
回复

使用道具 举报

发表于 2020-11-3 14:11:04 来自手机 | 显示全部楼层
本帖最后由 sunsea 于 2020-11-3 14:14 编辑
liuzhaoyzz 发表于 2020-11-3 14:05
SVbus是开源的,如果你能够修改直接修改源代码,编译即可,不需要hack吧。




说的就是直接改源码。有时间我去看看M$有没有在核心模式下读UEFI环境变量的。然后请yaya设计一下信息传递格式。

非常好,M$有现成的API,ExGetFirmwareEnvironmentVariable,有时间我去试着改SVBus之类的驱动吧。

点评

答主厉害啊!静候佳音了!  详情 回复 发表于 2020-11-3 14:15
回复

使用道具 举报

发表于 2020-11-3 14:15:05 | 显示全部楼层
sunsea 发表于 2020-11-3 14:11
说的就是直接改源码。有时间我去看看M$有没有在核心模式下读UEFI环境变量的。然后请yaya设计一下信息传 ...

        答主厉害啊!静候佳音了!

点评

有个小小的问题,ExGetFirmwareEnvironmentVariable这个核心API只在Win8和以后有,也就意味着win7不受支持。不过这应该不是个大问题吧?  详情 回复 发表于 2020-11-3 14:21
过奖了过奖了,目前我还不知道bootmgfw.efi那头彻底搞定了没有,希望如此。  详情 回复 发表于 2020-11-3 14:16
回复

使用道具 举报

发表于 2020-11-3 14:16:27 来自手机 | 显示全部楼层
liuzhaoyzz 发表于 2020-11-3 14:15
答主厉害啊!静候佳音了!

过奖了过奖了,目前我还不知道bootmgfw.efi那头彻底搞定了没有,希望如此。
回复

使用道具 举报

发表于 2020-11-3 14:21:00 来自手机 | 显示全部楼层
liuzhaoyzz 发表于 2020-11-3 14:15
答主厉害啊!静候佳音了!

有个小小的问题,ExGetFirmwareEnvironmentVariable这个核心API只在Win8和以后有,也就意味着win7不受支持。不过这应该不是个大问题吧?

点评

1、对于早点的电脑,一般地可以支持LEGACY BIOS启动,制作XP、WIN7系统的RAMOS制作肯定没问题。 2、对于较新电脑的电脑,很多都是支持安装WIN10的,随着微软的垄断与强推,新硬件对于WIN7的支持越来越差,上WIN10基  详情 回复 发表于 2020-11-3 14:38
回复

使用道具 举报

发表于 2020-11-3 14:38:44 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-3 15:09 编辑
sunsea 发表于 2020-11-3 14:21
有个小小的问题,ExGetFirmwareEnvironmentVariable这个核心API只在Win8和以后有,也就意味着win7不受支 ...

1、对于早点的电脑,一般地可以支持LEGACY BIOS启动,制作XP、WIN7系统的RAMOS制作肯定没问题。
2、对于较新电脑的电脑,很多都是支持安装WIN8 10的,随着微软的垄断与强推,新硬件对于WIN7的支持越来越差,驱动越来越难找,上WIN10基本上是没有选择的选择。
所以无论从哪个方面来说,能实现UEFI下WIN8、WIN10-RAMOS就不错了。
回复

使用道具 举报

发表于 2020-11-3 18:57:53 | 显示全部楼层
非常好!支持uefi了!
回复

使用道具 举报

发表于 2020-11-3 19:42:25 | 显示全部楼层
大好,支持。
回复

使用道具 举报

发表于 2020-11-3 20:04:03 | 显示全部楼层
这个不错,感谢分享
回复

使用道具 举报

发表于 2020-11-3 20:32:28 | 显示全部楼层
本帖最后由 babyshin 于 2020-11-3 21:06 编辑

求大神打包一个可以run UEFI的版本给下载

我加载memdisk
或是run COM执行档都无法顺利 (黑屏)
是因为UEFI环境的关系吗

回复

使用道具 举报

发表于 2020-11-3 20:57:42 | 显示全部楼层
gmy 发表于 2020-11-3 09:11
怎么写入启动项,写个简单教程吧

跟其他UEFI启动项是一样的操作。我知道的两个工具一个是bootice里的 UEFI / 启动项管理,另一个是DiskGenius里的 工具 / 设置UEFI BIOS启动项。

但这两个工具只是提供了功能,能不能起作用还要取决于主板的UEFI固件。
有的主板自动识别,不支持手动;而有的主板不自动识别,需要手动添加。
需要手动添加的我接触过的是dell,在UEFI设置里添加。
自动添加的我接触过的是联想电脑和技嘉主板,都是自动识别 \EFI\Microsoft\Boot\bootmgfw.efi 为 Windows Boot Manager, 技嘉主板在找不到  \EFI\Microsoft\Boot\bootmgfw.efi 的情况下还会识别 \EFI\boot\bootx64.efi 为UEFI OS.

所以,怎么写入启动项要视乎主板固件。
一般情况下我会将efi 文件替换为  \EFI\Microsoft\Boot\bootmgfw.efi
遇到需要手动添加的,我就将efi文件放在路径如 \EFI\grub\g4d.efi ,然后将 \EFI\grub\g4d.efi 添加为 UEFI G4d 启动项。
回复

使用道具 举报

发表于 2020-11-4 09:21:40 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-4 09:49 编辑
2011yaya2007777 发表于 2020-10-29 19:09
/menu.lst
/grub/menu.lst
/boot/grub/menu.lst

1、反馈个问题,yaya在57楼81楼说的菜单搜索顺序似乎不对,优先级似乎是:
/boot/grub/menu.lst
/grub/menu.lst
/menu.lst
因为我这几个目录都有menu.lst文件,在测试字体文件unifont.hex的时候发现,只要
/boot/grub/menu.lst菜单不对,就无法正确加载字体,导致启动失败,即必须优先修改/boot/grub/menu.lst才行。请yaya检查下。
这有点不符合逻辑,逻辑上应该从根目录到子目录:
/menu.lst
/grub/menu.lst
/boot/grub/menu.lst


2、另外我有个疑问,为什么图形模式下,连基本的26个英文字母和阿拉伯数字都不能正常显示,还需要字体unifont.hex的支持?按道理上来说不应该啊!前面也有网友也碰到类似的问题,都是因为字体文件导致的。


回复

使用道具 举报

 楼主| 发表于 2020-11-4 10:58:39 | 显示全部楼层

菜单搜索顺序似乎不对

原先就这样。菜单可以放在这3个地址,没有考虑顺序问题。如果你3个地址都放置了菜单,那就有个顺序问题。不过这都是在测试时才可能发生的事情。
原代码:
        find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
        find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
        find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
我倾向于菜单放在 /UEFi/GRUB/menu.lst

为什么图形模式下,连基本的26个英文字母和阿拉伯数字都不能正常显示,

在BIOS的图形模式,不加载字体文件的话,数字及英文字体取自BIOS。怎么从UEFI模式取字体,还不清楚。

点评

我记得HII Protocol之类的可以取字体。你可以到uefi spec上查一下。  详情 回复 发表于 2020-11-4 12:22
BIOS下的grub4dos,菜单优先级的确是: /menu.lst /boot/grub/menu.lst /grub/menu.lst 优先搜索的是根目录,找到的也是根目录下的menu.lst。 但是UEFI下的菜单搜索顺序真的不同,我在实体机和虚拟机都测试  详情 回复 发表于 2020-11-4 12:08
回复

使用道具 举报

发表于 2020-11-4 12:08:26 | 显示全部楼层
2011yaya2007777 发表于 2020-11-4 10:58
原先就这样。菜单可以放在这3个地址,没有考虑顺序问题。如果你3个地址都放置了菜单,那就有个顺序问题 ...


BIOS下的grub4dos,菜单优先级的确是:
/menu.lst
/boot/grub/menu.lst
/grub/menu.lst
优先搜索的是根目录,找到的也是根目录下的menu.lst。

但是UEFI下的菜单搜索顺序真的不同,我在实体机和虚拟机都测试过了。
        
回复

使用道具 举报

发表于 2020-11-4 12:19:48 来自手机 | 显示全部楼层
可惜grub2和grub4dos在uefi环境都不支持proxydhcp,不过ipxe支持,可以传递参数给grub2,g4d的efi文件支持接受参数么
回复

使用道具 举报

发表于 2020-11-4 12:22:00 | 显示全部楼层
2011yaya2007777 发表于 2020-11-4 10:58
原先就这样。菜单可以放在这3个地址,没有考虑顺序问题。如果你3个地址都放置了菜单,那就有个顺序问题 ...
怎么从UEFI模式取字体

我记得HII Protocol之类的可以取字体。你可以到uefi spec上查一下。
回复

使用道具 举报

发表于 2020-11-4 19:40:36 | 显示全部楼层
首先,向yaya、wintoflash的伟大工作致敬!

其次,补充汇报map iso的问题。
34#、49# w大已经提到了,这里更具体地延伸说一下。grub2 map没有根治,g4d下更重了。
(样例均为同方、海尔笔记本实机测试,AMI aptio系UEFI,我不信任虚拟机)

一、当机器本身就有PE光盘(SATA或USB光驱,均使用MS的boot*.efi),此时,g4d再map U盘上
的其他PE ISO, map可以成功,但chainloader是失败的,fail to load image,boot命令启动
的是光驱里的内容。
g4d1cd.jpg


grub2下为解决类似问题,提出2个途径:

1、map -x。我追踪了一下,w大在2020年5月提出了map -x (cd?)命令,虽然L版报告虚拟机测试成功,
但我用2020年5月版在实机上测试无效,因为USB-CD被识别成了(hd?),即使用map -x (hd?)也不能解决
问题。所以放弃。
map-x1.jpg


2、改造PE ISO,使用mkisofs重做,以grub2的boot*.efi代替ms的boot*.efi,然后用wimboot启动wim。
这个可以成功。但此改造后的ISO,在g4d下map启动无效。map、chainloader、boot均无出错提示,但就是
不能进入grub2菜单。
grub2cd1.jpg



二、U盘量产USB光驱的附加问题
CD+DISK,光驱在前时,DISK上的g4d不能顺利启动到menu,直接进入g4d shell状态,原因不明。
DISK+CD,光驱在后时,DISK上的g4d可以启动到menu。


点评

grub2下面wintoflash添加map -x (cd?)命令之后,我测试过挂载个光驱map --mem pe.iso启动可以成功,但我从没有尝试过量产。你说的map -x (hd?)也不能解决,怎么之前没见你在grub2的那个帖子反馈过?有反馈wi  详情 回复 发表于 2020-11-5 08:07
回复

使用道具 举报

发表于 2020-11-4 20:12:54 | 显示全部楼层
感謝大大分享學習中
回复

使用道具 举报

发表于 2020-11-4 20:25:06 | 显示全部楼层
备用
回复

使用道具 举报

发表于 2020-11-5 08:07:51 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-5 08:15 编辑
wuwuzz 发表于 2020-11-4 19:40
首先,向yaya、wintoflash的伟大工作致敬!

其次,补充汇报map iso的问题。

        grub2下面wintoflash添加map -x (cd?)命令之后,我虚拟机测试过挂载个光驱map --mem pe.iso启动可以成功,实体机现在有光驱的很少了,有光驱也不会在里面放一张光盘影响启动,所以实体机我没有测试过,应该没问题,我只是本着求真务实的目的在虚拟机进行了几次测试。量产优盘我也没有尝试过,你说的map -x (hd?)也不能解决,怎么之前没见你在grub2的那个帖子反馈过?有反馈wintoflash才能做针对性地改进啊!
回复

使用道具 举报

发表于 2020-11-5 10:47:45 | 显示全部楼层
本帖最后由 wuwuzz 于 2020-11-5 11:07 编辑

哈,原因很简单,巧合。要不是L版你,事情还进展不到测试map -x呢,
我之前压根就不知道新增了这个选项。
==================================================================
w大在2019年底(还是2020年初?)宣布过grub2 map项目中止,帖子不再更新,
并给了github接手地址。自那以后,我就没再关注过原贴。要不是L版你在
这个帖子里谈到grub2 map iso,给了链接,我又心血来潮点链接翻原贴,偶然
发现w大回复说增加了map -x,我还不知道这个事呢!(w大的回复似乎是在最初
宣布项目中止后?) 而且连新版下载在哪也不知道,也多亏你分流了2020年5月版,
否则,连下载测试都成问题! map -x测试是现炒现卖!
======================================================================
正好yaya和w大都在,且还在考虑要不要增加g4d unmap,反馈在这里也是一样的。
map -x,实体机测试当然有问题,见上面例子。
==========================================================================
深究map iso主要还是考虑适应量产U盘环境。(实体SATA/USB光驱插光盘只是为了测试)
而量产CD+DISK,然后又map DISK上的iso情形较常见,这个时候回避不了已有光盘的
情况。

至于更复杂的U盘量产多光驱(CD+CD+CD+...+DISK)的情况,也依赖于g4d/grub2光盘
引导成功,才能充分发挥作用。
==========================================================================
当然,说到底,这也没什么大不了的,毕竟最低保底办法,改造iso能解决。
主要还是追求完美,g4d for UEFI出来了,不由自主地想看看能不能把以前的遗憾实现啊~

点评

哦,原来是这样子的。但是改造iso解决的办法,不是根本解决问题之道。还是从引导器层面解决更好,不然还要规避这样子的问题,比如就有人有真实光驱。  详情 回复 发表于 2020-11-5 14:38
又试了下,ventoy 的 hook LocateHandle 的方法可行。 我昨天可能是喝多了。  详情 回复 发表于 2020-11-5 13:23
回复

使用道具 举报

发表于 2020-11-5 11:09:47 | 显示全部楼层
量产属于特殊情况,个人认为没必要折腾

很久很久前折腾过一段时间量产,同一u盘,同一量产工具,不同时间量产,量产出同样的cdrom数量,但兼容性每次也是不一样的,认到的设备也不一样

现在我已经0量产了。
回复

使用道具 举报

发表于 2020-11-5 11:24:40 | 显示全部楼层
江南一根葱 发表于 2020-11-5 11:09
量产属于特殊情况,个人认为没必要折腾

很久很久前折腾过一段时间量产,同一u盘,同一量产工具,不同时 ...

呃,量产那是固件范畴,是另外一个庞大的话题,就是因为它,我的知识结构、对事情的看法
才脱胎换骨,不应在此讨论。用它只是作为营造USB光驱环境的工具,为map iso提供测试平台,
为g4d、grub2测试服务。

点评

我指的是量产出的cdrom并不能营造真实USB光驱环境 还是有区别的  详情 回复 发表于 2020-11-5 13:03
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 15:41

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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