无忧启动论坛

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

[原创] GRUB2 UEFI 下的磁盘仿真

    [复制链接]
31#
 楼主| 发表于 2019-11-5 21:11:29 | 显示全部楼层
liujun2000 发表于 2019-11-5 21:07
常      规UEFI ---bootx64.efi ---bootmgfw.efir----vhd-----WINLOAD.Efi
其他改版UEFI ---bootx64.efi-- ...

你把它理解成grub4dos的map就行了
回复

使用道具 举报

32#
 楼主| 发表于 2019-11-6 11:11:33 | 显示全部楼层
liuzhaoyzz 发表于 2019-11-6 10:53
能否map --mem --disk --type=HD vhd0这样?能否启动?
grub4dos用map --mem启动vhd,需要vhd里面 ...
能否map --mem --disk --type=HD vhd0这样?

可以。
grub4dos用map --mem启动vhd,需要vhd里面安装firadisk/winvblock/svbus这一类的驱动,因为grub4dos运行于实模式下,进入保护模式之后实模式下仿真的内存盘会失效,所以需要这一类的驱动来带入到保护模式下。而grub2是否直接运行于保护模式,还要不要类似的驱动呢?

需要。
这跟cpu的模式其实没有太大关系。跟操作系统/启动管理器的设计有关。
比如UEFI下,其他启动管理器/uefi shell读文件都是直接用SimpleFileSystemProtocol,grub2不用这一套。所以uefi固件的ntfs驱动grub2用不了,反之亦然。
回复

使用道具 举报

33#
 楼主| 发表于 2019-11-6 11:20:43 | 显示全部楼层
liuzhaoyzz 发表于 2019-11-6 11:15
您说的第一个问题grub2可以map --mem --disk --type=HD vhd0可以启动,是加载到内存盘,然后从内存盘启动的 ...

是的。操作系统想读内存盘,需要的这个驱动是操作系统的驱动。
回复

使用道具 举报

34#
 楼主| 发表于 2019-11-6 16:18:51 | 显示全部楼层
liaonf 发表于 2019-11-6 15:38
W大,WIM格式的PE如何启动?

wimboot命令。要自备bootmgfw.efi, bcd. boot.sdi
可以参考 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=413597
回复

使用道具 举报

35#
 楼主| 发表于 2019-11-6 16:24:24 | 显示全部楼层
liuzhaoyzz 发表于 2019-11-6 11:29
期望wintoflash大神更新grub filemanager以支持PE.iso的遍历,我试了下你修改的grub2里面的map --mem pe.is ...

grub2-filemanager/我修改的grub2一直都在github上发布。在Linux下,论坛上发帖并不方便,而且论坛有敏感词过滤系统,有些词莫名其妙。之前的帖子想编辑下,改改上面的代码,结果提示有非法词汇,研究了半天才发现led是敏感词,太蛋疼了。
另外,在论坛上发布就对国际友人不太友好。
https://github.com/a1ive/grub
https://github.com/a1ive/grub2-filemanager

我试了下你修改的grub2里面的map --mem pe.iso已经很稳定了啊

因为我还要让它支持32位UEFI,,时机成熟自然会更新。
回复

使用道具 举报

36#
 楼主| 发表于 2019-11-6 16:47:59 | 显示全部楼层
liuzhaoyzz 发表于 2019-11-6 16:38
led
我试了可以发送啊,难道对于windows和linux操作系统过滤的关键字还不同啊?

不同时间/日期 似乎过滤程度不一样。前段时间不是10.1嘛,可能严一些。
他们修改的是我写的适用于任意版本grub2的简化菜单。
https://github.com/a1ive/grub2-f ... /samples/grubfm.cfg
回复

使用道具 举报

37#
 楼主| 发表于 2019-11-7 16:56:15 | 显示全部楼层
ddsony 发表于 2019-11-7 16:37
楼主有x86 EFI 的grubia32.efi吗?

32位的map搞不定,目前放弃了。

点评

可惜了  详情 回复 发表于 2019-11-7 17:02
回复

使用道具 举报

38#
 楼主| 发表于 2019-11-7 18:00:12 | 显示全部楼层

mdy老大不知道有兴趣研究不。
我是觉得32位efi的价值不大。

点评

他兴趣很浓啊,正等着你的map版grub2改造升级他的MBROSTool EFⅠ启动呢?他纳闷为啥32,64还要分开处理。  详情 回复 发表于 2019-11-7 18:47
回复

使用道具 举报

39#
 楼主| 发表于 2019-11-7 18:51:53 | 显示全部楼层
本帖最后由 wintoflash 于 2019-11-7 18:54 编辑
ddsony 发表于 2019-11-7 18:47
他兴趣很浓啊,正等着你的map版grub2改造升级他的MBROSTool EFⅠ启动呢。他纳闷为啥32,64还要分开处理 ...


按理说不用分开处理,我也没有分开处理。但是编译出来之后32位的就不顶用。
我觉得有可能是内存对齐的问题。
map的主体代码在 https://github.com/a1ive/grub/tree/master/grub-core/map
图方便,用gnu-efi编译。
回复

使用道具 举报

40#
 楼主| 发表于 2019-11-8 18:43:02 | 显示全部楼层
ddsony 发表于 2019-11-7 18:47
他兴趣很浓啊,正等着你的map版grub2改造升级他的MBROSTool EFⅠ启动呢。他纳闷为啥32,64还要分开处理 ...

忽然发现github上的源码少了个Makefile,刚加上。
回复

使用道具 举报

41#
 楼主| 发表于 2019-11-9 19:19:01 | 显示全部楼层
本帖最后由 wintoflash 于 2019-11-9 19:26 编辑
liuzhaoyzz 发表于 2019-11-9 19:13
wintoflash大神,我这边实体机启动VHD失败啊?这个VHD用BCD启动正常。
用的一楼的所有模块。
grub.cfg:
...


VHD里面是单分区NTFS?

参考 http://bbs.wuyou.net/forum.php?m ... &fromuid=487838
如果单分区NTFS里面是一个完整的系统(有bootx64.efi等),需要先加载ntfs驱动,固件才能认识里面的bootx64.efi: efiload /ntfs.efi
回复

使用道具 举报

42#
 楼主| 发表于 2019-11-9 19:49:56 | 显示全部楼层
liuzhaoyzz 发表于 2019-11-9 19:31
VHD里面是NTFS单分区。似乎里面没有bootx64.efi,efiload ntfs.efi放在grub.cfg?ntfs.efi在哪里下载?放在 ...

你的这种vhd里面不是完整的系统啊,在BIOS下,这种应该是用NTBOOT启动的。那不能map
回复

使用道具 举报

43#
 楼主| 发表于 2019-11-9 20:42:19 | 显示全部楼层
liuzhaoyzz 发表于 2019-11-9 19:55
我把bootmgrfw.efi,建立个bcd放到里面可以启动吗?

不清楚
回复

使用道具 举报

44#
 楼主| 发表于 2019-11-9 20:57:52 | 显示全部楼层
回复

使用道具 举报

45#
 楼主| 发表于 2019-11-9 21:44:18 | 显示全部楼层
本帖最后由 wintoflash 于 2019-11-9 21:45 编辑
liuzhaoyzz 发表于 2019-11-9 21:12
加载了ntfs_x64.efi,用一楼的那些模块,grub2是从github-master刚下载的最新版,补齐了bootx64.efi,bootmg ...


你应当把这个看作grub4dos的map。
到这个阶段,map已经成功了(bootmgfw可以正常读取VHD)
剩下的事情与map无关了,也没法有关。
首先bootmgfw直启的VHD和完整的系统是不是有区别。
其次,需要有驱动。
这些,都是VHD里面的系统需要解决的。
我没用过Windows的VHD系统,也不会搞VHD系统,不清楚SVBUS之类的能不能用。
Linux是可以的。

点评

我想应该是版主的镜像太大了,这个bug只能等NTFS的驱动更新才行,不是map的事,也不是系统的事,是驱动的问题  详情 回复 发表于 2019-11-9 21:49
回复

使用道具 举报

46#
 楼主| 发表于 2019-11-9 21:59:05 | 显示全部楼层
本帖最后由 wintoflash 于 2019-11-10 07:49 编辑
liuzhaoyzz 发表于 2019-11-9 21:52
明白你的意思了。grub2已经把能做的事情都做了,比如仿真vhd,比如仿真vhd到内存,缺乏的是让windows识别gr ...


不过我在研究NTBOOT。如果移植到UEFI下,还能曲线救国。
缺乏像firadisk/winvblock/svbus的这样一个驱动,我还以为grub2已经提供了呢

任何除了bootmgr之外的第三方引导器基本上都不可能自己提供windows的驱动。这个在技术上做不到。
就算vboot,也是分了两部分,还是要装windows驱动。

点评

以后可能实现Map VHDX吗?  详情 回复 发表于 2019-11-10 11:05
回复

使用道具 举报

47#
 楼主| 发表于 2019-11-10 11:32:51 | 显示全部楼层
ddsony 发表于 2019-11-10 11:05
以后可能实现Map VHDX吗?

这个不太可能吧。grub4dos也不支持吧。
我的这个动态vhd支持是抄的vboot的开源部分,vboot是抄的VirtualBox的代码。
vboot的闭源部分貌似有什么支持差分VHD,vmdk之类的技术,可能支持vhdx吧。除此之外我也没见过什么关于vhdx的。

点评

g4d是支持vhdx的,我试过。  详情 回复 发表于 2019-11-10 15:24
回复

使用道具 举报

48#
 楼主| 发表于 2019-11-12 21:28:48 | 显示全部楼层
ddsony 发表于 2019-11-12 21:23
下图所示的Map屏显如何屏蔽掉?

不能屏蔽.

点评

那太碍眼了吧,这是Map模块的输出吗?  详情 回复 发表于 2019-11-12 21:32
回复

使用道具 举报

49#
 楼主| 发表于 2019-11-12 21:40:24 | 显示全部楼层
是的.
多显示点信息总是好的

点评

mapCдɡ  详情 回复 发表于 2019-11-12 22:52
是的,容易排错。  详情 回复 发表于 2019-11-12 21:45
回复

使用道具 举报

50#
 楼主| 发表于 2019-11-13 08:06:42 | 显示全部楼层
ddsony 发表于 2019-11-12 22:52
特殊需求,需要屏蔽。

那你自己改代码吧,把grub-core/map/*.c和grub-core/commands/efi/map.c里面printf的语句都注释掉,然后编译。
挺多的,比较麻烦。
回复

使用道具 举报

51#
 楼主| 发表于 2019-11-14 16:10:18 | 显示全部楼层
现在32位UEFI下map模块也能正常工作了,感兴趣的可以下载。

点评

虽然没有32位的测试环境,但为这又一新增功能点赞  详情 回复 发表于 2019-11-14 17:17
好消息,下载,下载。  详情 回复 发表于 2019-11-14 16:43
回复

使用道具 举报

52#
 楼主| 发表于 2019-11-15 06:59:15 | 显示全部楼层
wuwuzz 发表于 2019-11-15 06:40
首先,感谢楼主的辛勤劳动,开发了优秀的MAP功能;

其次,报告BUG。(64位)MAP U盘上的ISO,如果

能否提供这个iso给我测试一下?
体积大不方便上传的话可以只提供“ISO壳“,就是删掉里面的wim之类的,只保留引导.
回复

使用道具 举报

53#
 楼主| 发表于 2019-11-15 10:41:49 | 显示全部楼层
wuwuzz 发表于 2019-11-15 10:26
楼主,你好!

不需这样麻烦。两个ISO都是本坛PE区xmzhqw的

那不用找链接了。
路径是没问题的,只是uefi固件没有成功启动里面的efi文件。
另外我看到你用的应该是旧版本的grub2
回复

使用道具 举报

54#
 楼主| 发表于 2019-11-15 11:02:47 | 显示全部楼层
wuwuzz 发表于 2019-11-15 10:49
用的是顶楼前几天(11.07?)发布的grub2。
(不支持32位的那个),我看现在编辑日期还是11.07,
难道附 ...

一楼帖子没有任何附件啊,老版本的早就删了,你从哪里下载到的?
现在的下载链接是github上的啊,下载之后执行批处理生成efi的。https://github.com/aIive/builds/archive/master.zip
国内镜像:https://gitee.com/a1ive/builds/repository/archive/master.zip
-----------------------------
虽然说最新版估计也不能解决你的问题。

-----------------------------
这个问题不太好解决,不过还是有可能解决的。

回复

使用道具 举报

55#
 楼主| 发表于 2019-11-19 14:48:16 | 显示全部楼层
本帖最后由 wintoflash 于 2019-11-19 14:49 编辑
wuwuzz 发表于 2019-11-16 08:15
换用20191114新版grub2测试,没成功。换U盘也是这个结果。
USB CD环境下的就不上图了,SATA CD环境如下图 ...

研究了一下,发现VmWare还有我的电脑上
如果有两个或多于两个光盘(不论是虚拟的还是真实的)
好像UEFI只能访问第一个光盘里面的内容。
在虚拟机里面,我测试了以下情况:
SATA CD + SATA CD 认不出第二个盘里面的内容,不论怎么调整,也根本没办法直接从第二个盘启动。

SATA CD + map CD  无法读取第二个盘里面的内容

map CD + map CD  同上

在实体机,我测试了以下情况:

map CD + map CD  同上

也就是说UEFI固件只支持一个光盘。

话说你的USB CD 和SATA CD是不是在同一台电脑上同时存在的,能不能访问这两个CD的内容?

如果UEFI固件都是只支持一个光盘,那估计就没辙了。


回复

使用道具 举报

56#
 楼主| 发表于 2019-11-20 08:28:30 | 显示全部楼层
wuwuzz 发表于 2019-11-20 07:36
为方便测试对比,营造了3光驱环境做实验:

第1 USBCD  装经典Win10PE V16

辛苦了。
这个测试说明:
光盘本身是可以访问的。
光盘的eltorito启动区是访问错误的。

那这就麻烦了。因为bootmgfw.efi是需要读eltorito的。
似乎除了在启动的时候不插光盘,没有其他的解决办法。

如果有时间,还可以进行下面的测试:
在grub命令行输入shell,进入uefi shell,在shell里面尝试启动光盘上的efi文件。


回复

使用道具 举报

57#
 楼主| 发表于 2019-11-20 14:27:50 | 显示全部楼层
NTBOOT移植成功。

点评

强!  详情 回复 发表于 2019-11-20 15:01
太强了,神速. 以后就多了一个选择. 再问一下是BIOS和EFI下的GRUB2都能用吗  详情 回复 发表于 2019-11-20 14:40
回复

使用道具 举报

58#
 楼主| 发表于 2019-11-20 17:41:53 | 显示全部楼层
adef 发表于 2019-11-20 11:02
uefi下多cd-rom启动好像是有点啥问题。试了两个U盘各有一个usb-cdrom,uefi下单独启动都正常。如果同时插上 ...

BOOTMGR is missing 应该是 Legacy-BIOS 的报错吧

点评

之所以说奇怪,是因为选的uefi启动项,应该跟bootmgr没啥关系,而且bootmgr本身也存在。。。  发表于 2019-11-20 22:18
回复

使用道具 举报

59#
 楼主| 发表于 2019-11-20 17:42:25 | 显示全部楼层
wuwuzz 发表于 2019-11-20 12:53
shell状态下,能够看到不同的bootx64.efi
fs1:\efi\boot\bootx64.efi
fs2:\efi\boot\bootx64.efi

那就无解了
回复

使用道具 举报

60#
 楼主| 发表于 2019-11-20 17:44:58 | 显示全部楼层
ddsony 发表于 2019-11-20 15:01
强!VHDX有搞头了。顺带问一下:动态vhd和vhdx能够在深度隐藏分区map出来的虚拟盘里被ntboot启动吗?
好 ...

那要看你是怎么隐藏的。
首先,bootmgfw.efi要能读到vhd,
其次,里面的Windows要能读到自己。
具体能不能,不清楚。反正UD那种肯定不行
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-5 23:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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