无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
61#
发表于 2020-12-9 23:14:37 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-10 09:58 编辑
wintoflash 发表于 2020-12-9 22:08
同一个VHD用之前的 RUNTIME_SERVICES_DATA不行,PERSISTENT_MEMORY 就可以?

同一个VHD,RUNTIME_SERVICES_DATA不行,RESERVED_MEMORY就可以。

哦,我那个帖子打错字了,不好意思。你看下yaya在714楼的那个帖子。

你有空的话更新grub2的map类型我来尝试下。另外发布grubx64.efi的时候,麻烦请把xz解压缩模块内置到里面。
回复

使用道具 举报

62#
发表于 2020-12-10 13:16:18 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-10 13:41 编辑
2011yaya2007777 发表于 2020-12-9 21:17
好消息,棒棒哒!关键是你搜索到精准的能定位问题的信息。

再反馈个问题,UEFI-WIN7+SVBUS,map --mem --top加载vhd没问题,过了100%,马上就启动提示出错,boot_image_handle not found

10GB固定大小的VHD,32GB内存。


title WIN7X64-SVBUS (/VHD/SXWIN7X64EN20181104.vhd)
find --ignore-floppies --ignore-cd --set-root /VHD/SXWIN7X64EN20181104.vhd
map --mem --top /VHD/SXWIN7X64EN20181104.vhd (hd)
chainloader (hd-1)



grub2也完成了加载进度,但直接返回到菜单了,grub2那个帖子我也反馈了。

boot_image_handle not found.jpg (32.4 KB, 下载次数: 169)

boot_image_handle not found.jpg
回复

使用道具 举报

63#
发表于 2020-12-10 15:47:45 | 显示全部楼层
2011yaya2007777 发表于 2020-12-10 15:04
你在前面加  debug=3 看看。
好像是加载虚拟磁盘出了错。
WIN7X64支持4gb以上内存吗?

晚上回去看看。

所有64位的系统,都支持4GB以上的内存啊。WIN7X64支持的。
回复

使用道具 举报

64#
发表于 2020-12-10 17:08:43 | 显示全部楼层
2011yaya2007777 发表于 2020-12-10 15:04
你在前面加  debug=3 看看。
好像是加载虚拟磁盘出了错。
WIN7X64支持4gb以上内存吗?

直接上图8GBVHD, 20GB内存,WIN7X64

QQ图片20201210170811.jpg (135.75 KB, 下载次数: 93)

QQ图片20201210170811.jpg
回复

使用道具 举报

65#
发表于 2020-12-10 17:16:03 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-11 14:06 编辑
sunsea 发表于 2020-12-10 16:26
请问谁目前有测试成功的PE ISO或者比较小尺寸的VHD之类的,能够发一下,以供测试?我这里Github 12-10版本 ...

16GB内存,随便一个WIN10都可以,要知道,原版WIN10关闭虚拟内存和休眠的情况下,安装后只有9GB不到。

驱动前面我在前面发的有啊。朱玛那个。656楼的
http://bbs.wuyou.net/forum.php?m ... 9576&fromuid=298214


https://cloud.189.cn/t/vyA7vqeuYBNf
微信扫描二维码即可下载。(免费的)

分享个更小的442MB WIN8.1.ESD,飞天舞做的,当时也是我们为了测试UEFI-RAMOS制作的,C盘安装之后只有1.9GB!

       忘了说了,这个esd第一次部署的时候BCD必须选择文本模式才能正常部署,bootice倒数第二个选项哪里。 不要勾选启用WIN8 Metro启动界面.jpg




2、文件名称: SXWIN7X64_20180417_noNET.esd
文件大小: 387.19 MB (405,993,262 字节)
MD5: 9FAE30ED513E1230078BADF560060192
不带.net的安装后C盘已用空间1.8GB,精简了WINSXS和.net,不支持msu更新。


下载地址1:https://cloud.189.cn/t/UvQF73QVbURz




回复

使用道具 举报

66#
发表于 2020-12-10 19:33:31 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-10 19:36 编辑
2011yaya2007777 发表于 2020-12-10 18:57
你执行 map --mem --top (hd0,1)/VHD/SX70211.vhd (hd) 后,执行一下 find ,看看虚拟盘在哪个驱动器,哪 ...


我回家了,在家里电脑上,只有一个分区的,就只有(hd2,0)

刚才我试了WIN8.1.VHD,也是类似的结果,boot_image_handle not found

IMG_20201210_193151.jpg (47.15 KB, 下载次数: 92)

IMG_20201210_193151.jpg
回复

使用道具 举报

67#
发表于 2020-12-11 12:09:31 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-11 18:24 编辑

基于svbus驱动+grub4dos或grub2制作的UEFI-WIN10RAMOS和BIOS-WIN10RAMOS教程 - RAMOS - 无忧启动论坛 - Powered by Discuz! http://bbs.wuyou.net/forum.php?m ... 1&extra=#pid4192803
回复

使用道具 举报

68#
发表于 2020-12-11 12:11:17 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-13 10:33 编辑
2011yaya2007777 发表于 2020-12-11 07:44
liuzhaoyzz:你把WIN81.VHD里的大文件都去除,体积不要改变,然后用其他工具压缩,发上来,我研究一下。

这个已经是极限了啊,这是飞天舞做的,如果再精简,估计windows都不能启动了,esd需要用winntsetup安装到本机vhd里面。


NTFS分区可以用NTFS压缩减小体积。
回复

使用道具 举报

69#
发表于 2020-12-11 14:19:27 | 显示全部楼层
2011yaya2007777 发表于 2020-12-11 12:20
因为失败在chainloader,所以不需要启动windows,可能与vhd结构有关,我瞎猜。

vhd单分区我成功启动了的啊。你看734楼。http://wuyou.net/forum.php?mod=r ... &fromuid=298214
实在是费解,WIN10-RAMOS可以启动,WIN7 8-RAMOS失败。
回复

使用道具 举报

70#
发表于 2020-12-11 14:24:27 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-11 19:27 编辑
2011whp 发表于 2020-12-11 12:39
试:   硬改 img护展名 为 vhd  

bcd不出菜单

肯定是有差别的呀,结合当时上下文环境的语意,我的意思是说,0xc0000225和0xc0000017这样子的错误与img或者vhd格式关系不大,后来的事实也证明,应该是efi环境想要抢占某片内存地址,windows loader说这是它的地盘,不让用导致启动失败。

不知道WIN7 WIN8-RAMOS启动失败是不是也是这个原因,就是“内存冲突”,天马行空,胡乱猜测的,高手勿笑。

回复

使用道具 举报

71#
发表于 2020-12-11 16:49:44 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-13 10:34 编辑
2011yaya2007777 发表于 2020-12-11 13:28
加载了一个光盘镜像,还有一个软盘镜像,就是启动分区,或者叫启动软盘。

Good News!我搞定了g4e+UEFI-WIN7-RAMOS了!但是grub2+UEFI-WIN7-RAMOS仍然失败,我去grub2那个帖子贴个图。
UEFI-WIN8-RAMOS回家再试。


多出来3个盘符,外国网友也是这么说的:




果然如yaya和Wintoflash所说,国外网友也是这么建议的,VHD内部最好采用双分区,我的VHD内部是MBR分区格式,激活的FAT32分区+NTFS分区,对于WIN10似乎VHD内只要一个分区即可,但是对于WIN7,必须要双分区,本人亲测!


1、如果原来VHD内部是单分区,可以进入PE,挂载该VHD,用傲梅分区助手在硬盘前部划分出一个分区出来,创建一个新的FAT32分区,然后格式化,然后用bcdboot修复引导,bcdboot %windisk%:\windows /s %bootdisk%: /l zh-CN /f %bootmode%,注意windows所在的盘符,要选择VHD的NTFS所在分区的那个盘符。 一键修复引导.rar (577 Bytes, 下载次数: 2)

然后删除NTFS分区里面的EFI和boot目录,(改个名字也可以),否则对于WIN7、WIN8,grub4dos UEFI版本加载的时候仍然会出现” boot_image_handle not found”的错误。


2、分区调整好之后,还要调整VHD内部的BCD,(VHD的FAT32/ESP)\EFI\Microsoft\Boot\BCD,手工选择启动磁盘和启动分区,启动分区就是VHD内部的那个NTFS分区:



2、VHD内部的启动分区调整好之后,还要调整VHD外部的BCD,否则用bootmgfw.efi启动vhd的时候会提示0xc000000f错误,(主硬盘FAT32/ESP)\EFI\Microsoft\Boot\BCD:




回复

使用道具 举报

72#
发表于 2020-12-11 18:21:13 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-11 18:23 编辑

好消息! g4e/grub2+svbus+win8.1RAMOS启动成功!vhd里面也是用的激活的FAT32+NTFS分区双分区方案,单分区方案就是不行!WIN10单分区就可以啊,邪门!

32GB内存=vhd占用6GB+Windows使用了1.6GB+剩余可用24.3GB

点评

单分区估计用efishell下load ntfs_x64.efi或grub2环境efiload ntfs_x64.efi一下就可以 关键貌似efishell下并不能启动g4e。。  详情 回复 发表于 2020-12-11 22:30
估计 win10 的 winload 已经 不回向 检测引导 从哪来了, 而win8以下 有回向检测, 不管对错,咱先圆满现实  详情 回复 发表于 2020-12-11 18:52
回复

使用道具 举报

73#
发表于 2020-12-11 18:55:18 | 显示全部楼层
2011whp 发表于 2020-12-11 18:52
估计 win10 的 winload  已经 不回向 检测引导  从哪来了,
    而win8以下 有回向检测,  不管对错,咱 ...

svbus驱动目前已经通杀+win7 8 10-UEFI-RAMOS!就看看大家的电脑怎么样,还有没有其他的问题,需要更广泛的测试。
回复

使用道具 举报

74#
发表于 2020-12-12 13:54:36 | 显示全部楼层
江南一根葱 发表于 2020-12-11 22:30
单分区估计用efishell下load ntfs_x64.efi或grub2环境efiload ntfs_x64.efi一下就可以
关键貌似efishell ...

g4e与efishell来回切换总感觉有点绕弯儿。

ntfs_x64.efi,感觉上有点当年的NTFS2DOS.exe那样,让DOS识别NTFS分区内的文件。

点评

不绕弯,那直接编译efi格式的pe,岂不是更合适  详情 回复 发表于 2020-12-12 14:40
暂时,避开 bootmgfw 问题 (uefi shell 只是 intel 的官方样品,实际少用,偶尔 见过个 刷Bios的应用,uefi区讨论得也不多) bootmgfw 能在 ntfs分区上运行的, shell下秒启, grub2 下会黑一会(估计是  详情 回复 发表于 2020-12-12 14:31
回复

使用道具 举报

75#
发表于 2020-12-12 17:44:37 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-12 17:45 编辑
2011yaya2007777 发表于 2020-12-12 16:38
liuzhaoyzz :
vhd 搞两个分区,其中 fat32 分区放置什么文件?

J:\>tree /f >c:\1.txt
卷 FAT32 的文件夹 PATH 列表
卷序列号为 00000200 0EA7:15BE
J:.
└─EFI
    ├─Microsoft
    │  ├─Boot
    │  │  │  boot.stl
    │  │  │  bootmgfw.efi
    │  │  │  bootmgr.efi
    │  │  │  memtest.efi
    │  │  │  BCD
    │  │  │  
    │  │  ├─zh-CN
    │  │  │      bootmgfw.efi.mui
    │  │  │      bootmgr.efi.mui
    │  │  │      memtest.efi.mui
    │  │  │      
    │  │  ├─Fonts
    │  │  │      chs_boot.ttf
    │  │  │      msyhn_boot.ttf
    │  │  │      msyh_boot.ttf
    │  │  │      segmono_boot.ttf
    │  │  │      segoen_slboot.ttf
    │  │  │      segoe_slboot.ttf
    │  │  │      wgl4_boot.ttf
    │  │  │      
    │  │  └─Resources
    │  │      │  bootres.dll
    │  │      │  
    │  │      ├─en-US
    │  │      └─zh-CN
    │  │              bootres.dll.mui
    │  │              
    │  └─Recovery
    │          BCD
    │         
    └─Boot
            bootx64.efi
里面的文件估计大部分都可以精简,主要就是bootx64.efi,BCD,我不知道ttf字体文件是否必须,BCD如果不用zh-cN的话,估计字体都可以省略。
这些文件都是从vhd文件里面提取的(VHD先挂载),用bcdboot命令提取,参数太多我记不住,我写了个批处理,windows所在的盘符选择VHD第二个分区,这样子可以确保启动成功率,有些时候如果提取的文件不配套,启动可能也会有问题的。
bcdboot %windisk%:\windows /s %bootdisk%: /l zh-CN /f %bootmode%

一键修复引导.rar

577 Bytes, 下载次数: 13, 下载积分: 无忧币 -2

回复

使用道具 举报

76#
发表于 2020-12-13 12:18:19 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-13 12:19 编辑
2011yaya2007777 发表于 2020-12-12 16:38
liuzhaoyzz :
vhd 搞两个分区,其中 fat32 分区放置什么文件?

启动vhd-ramos的时候,能否优先搜索FAT32/ESP分区里面的bootx64.efi,如果找不到再找NTFS分区里面的bootx64.efi?


对于g4e,我发现如果优先查找NTFS里面的bootx64.efi会出错,提示“boot_image_handle not found”,就是VHD里面双分区FAT32/NTFS,似乎会优先查找
NTFS分区里面的bootx64.efi?

回复

使用道具 举报

77#
发表于 2020-12-13 13:57:25 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-13 13:59 编辑
2011yaya2007777 发表于 2020-12-13 12:34
既然是双分区,可否去除ntfs分区的bootx64.efi?


        我试过可以删除NTFS的bootx64.efi,RAMOS可以正常启动,但我觉得如果能够从源代码级别确立个优先权更好。但是没法用find的办法了吧,因为map --mem --top xxx.vhd之后,直接就启动了,控制权在g4e内部了。
回复

使用道具 举报

78#
发表于 2020-12-13 15:25:27 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-13 15:53 编辑
2011yaya2007777 发表于 2020-12-13 14:29
嗷,不能搜索查找了。可以 chainloadet (hd-1,n),其中n是fat32分区号。


       哦,明白了。一般地FAT32是第一个分区,那就是chainloader (hd-1,0) 了吧。

哦,刚才试了下chainloader (hd-1,0),还是不行,提示boot_image_handle not found.把NTFS分区\EFI文件夹改名字才行。

grub2似乎不需要把NTFS分区的EFI改名字。
回复

使用道具 举报

79#
发表于 2020-12-13 16:19:20 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2020-12-13 15:57
不一定是第一分区。vol命令看一看,应当可以认定。

       map之后我用ls (hd2,0)/这样的命令看了,确实是第一个分区,当时调整分区的时候,我从NTFS分区的前年划分出了一个FAT32分区的。
回复

使用道具 举报

80#
发表于 2020-12-16 17:25:28 来自手机 | 显示全部楼层
xianglang 发表于 2020-12-16 15:23
使用 G4E 2020-12-15 版本,使用以下菜单项成功启动单 NTFS 分区 VHD 格式的 Windows 7 RAMOS!至此,G4E  ...

       好消息!很好的反馈,之前我也是这样子想的,我估计加载这个驱动,就不需要双分区了。

点评

不过磁盘性能,SVBUS 比 PRIMO 差很多啊!而且传统 BIOS 下也比 UEFI 下稍快一些(传统 BIOS 下测速时,开了同花顺和国信通达信两个股票软件下测试的,会有所影响。) [attachimg]470860[/attachimg] [attachimg  详情 回复 发表于 2020-12-17 10:07
回复

使用道具 举报

81#
发表于 2020-12-17 10:32:43 | 显示全部楼层
xianglang 发表于 2020-12-17 10:07
不过磁盘性能,SVBUS 比 PRIMO 差很多啊!而且传统 BIOS 下也比 UEFI 下稍快一些(传统 BIOS 下测速时, ...

        是的,svbus驱动速度跟primo驱动速度没法比,正版primo6.3.1速度是svbus速度的4倍多。
回复

使用道具 举报

82#
发表于 2020-12-18 07:34:43 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-18 14:45 编辑
2011yaya2007777 发表于 2020-11-2 11:04
bios 版本就可以实现上述功能。测试了一下,uefi 版本同样可以实现。
vdf静态:map xxx.vdf (hd)
vdf动 ...

        我试过了直接map vdf,vdf里面内置了primo驱动,删除了svbus驱动,不带mem的这种,启动到BCD这里,如果采用NTFS单分区就会报0xc0000225错误。

如果采用激活的FAT32+NTFS双分区,则会报0xc000000f错误。这样子的问题跟我们在
697等楼层预想的结果一样,我们已经困扰在UEFI-RAMOS-BCD加载这个环节上很多年了。primo驱动启动原理在183楼

用grub2最新版直接map vdf结果一样,加不加--rt结果一样。
我不知道这个vdf是动态还是静态的,怎么看?

晚点我把菜单贴上来。
1.g4e菜单
title WIN7X64-primo (/vdf/SX7.vdf)
load /EFI/grub/ntfs_x64.efi
find --ignore-floppies --ignore-cd --set-root /vdf/SX7.vdf
map /vdf/SX7.vdf (hd)
chainloader (hd-1)

2、grub2菜单
menuentry "SX7.vdf" "/vdf/SX7.vdf" {
        efiload /EFI/grub/ntfs_x64.efi
        search --no-floppy --set --file $2
        map $2
}
晚点我会在再次上传个小点的vdf在wintoflash大神的grub2那个帖子,用于启动测试,之前上传的没有EFI引导文件,不便于测试。因为vdf是面向机器的,不同的电脑驱动不同,即使在我的电脑成功启动,在你的电脑也不能启动,所以vdf只能用于g4e/grub2加载测试。我现在在外面,手机回帖。

根据前面的
705楼微软知识库,是否是map的磁盘类型微软不认识?能否像707楼那样子改下类型让我测试下?(我不懂瞎问的,不知道与--mem是否一样)

从之前svbus-VHD-RAMOS成功的经验来看,g4e/grub2需要在底层磁盘驱动层面进行对接,svbus是开源的,primo驱动是闭源的商业软件(收费软件),这是个问题。primo驱动位于前期SCSI class group服务组启动,通过磁盘签名来查找vdf所在的磁盘,然后把vdf加载到内存中,g4e/grub2需要获得怎样的接口以确保能够顺利与primo驱动对接,我可以去primo驱动官方论坛发个帖子咨询下他们,看看他们是否愿意提供相关的接口,我不能很明确地表达在与之对接方面的需求,sunsea可能表达下?

有没有这种可能,直接map启动模式根本不需要g4e/grub2与primo驱动对接?因为直接map模式下g4e/grub2根本不需要创建内存盘,创建内存盘是由primo驱动加载vdf之后创建的。

当前似乎不是卡在g4e/grub2与primo驱动对接的这个环节上,似乎卡在直接map后bootmgfw.efi,BCD,Winload.efi这些引导前期相关文件不能识别g4e/grub2仿真磁盘的这个环节上。这个需要有懂得启动流程的高手帮忙看看,甚至需要反汇编下bootmgfw.efi,看他做了哪些事情。

我分析,可能的原因是,g4e/grub2 map xxx.vdf之后,在UEFI环境仿真出来的磁盘,在进入windows保护模式后,没有被分配一个盘符,而BCD中加载winload.efi需要采用盘符+路径的方式才能正常找到winload.efi并加载。但是为什么vdf里面的BCD能够被正常找到并加载?没道理呀?

我为什么有这个推测呢?因为用diskgenius加载vdf以后,似乎vdf里的分区就是没有被分配盘符的,而vhd文件加载后直接就分配了盘符,BCD指向的是系统盘的winload.efi,所以能够启动。primo几年前说会支持保存为vhd格式,但是几年过去了保存为vhd格式这个功能一直没有被开发出来。

另外,一个vdf文件放在ssd上面,用g4e加载显示有碎片(忘了截图),我用wincontig整理后显示没有碎片,但是g4e仍然无法直接map,提示有碎片,但我在g4e环境下用blocklist查看该文件,却没有反馈结果。

IMG_20201218_005722.jpg (50.19 KB, 下载次数: 90)

IMG_20201218_005722.jpg

IMG_20201218_011055.jpg (49.19 KB, 下载次数: 86)

IMG_20201218_011055.jpg

IMG_20201218_004322.jpg (63.72 KB, 下载次数: 86)

IMG_20201218_004322.jpg

点评

Primo的东西不知道不清楚,但是g4e的用户群也不会给他带来多少利润…… 其实我现在在怀疑都UEFI时代了bootmgfw.efi还只认0x80……不知道有没有类似的办法能够类似于g4d时代的这段代码一样: 来正确传递磁盘相  详情 回复 发表于 2020-12-18 11:58
回复

使用道具 举报

83#
发表于 2020-12-20 21:03:24 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-21 08:08 编辑

世界上第一个基于primo单驱动+grub2制作的UEFI-WIN8.1RAMOS单镜像制作成功 - RAMOS - 无忧启动论坛 - Powered by Discuz! http://wuyou.net/forum.php?mod=v ... 3&page=1#pid4199357

primo单驱动+g4e启动制作的UEFI-WIN8.1RAMOS失败,提示0xc000000e。


grub2成功!同一个vdf!
回复

使用道具 举报

84#
发表于 2020-12-20 21:37:09 | 显示全部楼层
artour 发表于 2020-12-20 21:32
看了半天,不知道怎么用。 GRUB4DOS 之前 是根目录放三个文件,menu.lst,grldr.mbr,grldr,修改下menu.ls ...

https://cloud.189.cn/t/A3QzEvJvymAf
看下这个

点评

请问是什么? 模块吗? 怎么打不开网页呢?  详情 回复 发表于 2020-12-20 21:40
回复

使用道具 举报

85#
发表于 2020-12-21 14:44:21 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-21 21:28 编辑

再来个报告好消息!成功搞定了g4e启动的WIN7-Primo-UEFI-RAMOS,单镜像模式。

G4E启动WIN8-PRIMO-UEFI-RAMOS成功!

也就是说g4e和grub2都可以启动同一个vdf!




回复

使用道具 举报

86#
发表于 2020-12-22 19:52:10 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-22 19:57 编辑

好消息!g4e/grub2成功启动WIN10-PRIMO-UEFI-RAMOS!

但是g4e/grub2直接map有碎片的文件好像都不行。g4d提示too many fragments,grub2好像是直接返回主菜单了。
回复

使用道具 举报

87#
发表于 2020-12-22 20:22:38 | 显示全部楼层
2011yaya2007777 发表于 2020-12-22 20:02
g4d好像支持16个以下的碎片。SVBus不支持碎片,PRIMO支持碎片吗?

支持含有碎片的文件仿真 - GRUB4DOS - 无忧启动论坛 - Powered by Discuz! http://wuyou.net/forum.php?mod=viewthread&tid=327458
本帖最后由 2011yaya2007777 于 2015-5-17 11:26 编辑
支持含有碎片的文件仿真。最多 32 段碎片。

说明是最多支持32个碎片,但是实际好像不行,wincontig看了ssd上面有3个碎片好像都不行,所以实战上来讲,我都是直接复制粘贴以消除碎片。

primo支持碎片是什么意思?primo是把vdf数据直接加载到SCSI内存盘中,这个内存盘的地址可能不一定是一个连续块,而且可以跨越高低位内存的分界线。关于这个我可以去romex官网发个帖子问下,我不是很确定。

回复

使用道具 举报

88#
发表于 2020-12-23 09:07:29 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-23 14:06 编辑
2011yaya2007777 发表于 2020-12-22 20:37
我是不明白svbus与primo的作用和运行机理。既然primo是加载到内存,那为什么不使用--mem,而直接map。是你 ...

一、svbus搭配g4e/grub2有两种模式,直接map和map --mem。
1、在直接map模式下,要求被仿真的镜像必须在硬盘上连续存放,这是g4e/grub2引导器要求的
(可以进行优化,这正是你们大神做的,这个是我们期望的)
2、在map --mem模式下,要求仿真占用的内存必须连续存放,这是g4e/grub2引导器设计的(可以进行优化,这个不是必须,加内存条增大高位内存即可)。
g4e/grub2的map似乎工作于保护模式,windows工作于保护模式下,svbus的作用就是让g4e/grub2在保护模式下仿真出来的虚拟磁盘/内存盘,在进入windows之后,继续有效。试想下,如果g4e/grub2在保护模式下仿真出来的虚拟磁盘/内存盘在windows下没有驱动,肯定会7B蓝屏。之前sunsea已经说了原理了,你可以回看下他的帖子。
所以,svbus是否支持“碎片”,这个问题感觉问得不对,因为无论是直接map文件,还是map --mem文件到内存,都是由g4e/grub2这样的引导器所做的,也是g4e/grub2所要求或者初始设计的,到不了svbus这个层面,svbus只是个磁盘驱动,该磁盘驱动的作用就是让windows认识g4e/grub2虚拟磁盘/内存盘,windows下面,任何硬件都需要提供驱动,当然大部分硬件驱动windows已经涵盖了。

二、primo驱动,搭配g4e/grub2的磁盘仿真,但是其原理不同,这个组合之下,内存盘是由primo创建的,不是由g4e/grub2创建的。在UEFI环境下,g4e/grub2直接map模式仿真出一个虚拟磁盘→windows从这个虚拟磁盘启动→加载primo驱动→primo驱动把vdf直接加载到内存→完成后续windows启动流程。
g4e/grub2直接map模式似乎要求镜像文件必须连续存放,有碎片似乎不行,这是g4e/grub2引导器初始设计的,可以在引导器层面解决。
primo所申请的内存我估计不一定要求连续(这个我不确定,我可以去romex官网发个贴子问下)。

g4d最大支持32个碎片的map,grub2据wintoflash大神说多少个碎片都正常加载,但是实战来讲似乎g4e有32个以下的碎片都不行,grub2没有充分测试。因为对于最终用户来说,复制粘贴重命名的办法消除碎片,属于没什么技术含量傻瓜操作,反馈问题就需要懂得g4e/grub2那些命令了,能力不够(或者偷懒!),反馈问题都不知道该怎么反馈。


三、primo驱动不需要用map --mem模式,主要是因为需要占用启动内存,grub4dos_UEFI或者grub2_UEFI用EFI_RESERVED_MEMORY类型的map --mem –top xxx.vhd (hd0)加载vhd到内存,在windows下这个内存区域还是处于被占用的状态,这个磁盘windows无法被当做内存使用,也无法释放,因为它已经变成了一个磁盘,你看下我用svbus做的uefi-ramos的截图中,32GB内存=vhd占用6GB+Windows使用了1.6GB+剩余可用24.3GB,任务管理器中,使用中1.6GB+剩余可用24.3GB=25.9GB,根本就不等于32GB,但在正常的windows系统下,任务管理器中总内存=使用内存+剩余可用内存。内存去哪里了?windows不知道,这块区域是g4e/grub2向UEFI固件申请的内存块,然后带入windows的保护模式,被认为是“保留内存块”,如果没有svbus驱动的加持,这块内存连磁盘都不是,也不能当作内存使用,相当于白白地浪费掉了;但如果有svbus加持,那么不就变成了svbus驱动的UEFI-RAMOS了吗?svbus这样子从UEFI固件仿真底层带上来的驱动,肯定比不上windows保护模式下primo驱动的速度。我们现在不是要svbus驱动为主的驱动啊,我们要的是更好更快的primo驱动啊。

svbus-uefi-win8.1-ramos.jpg (175.54 KB, 下载次数: 112)

svbus-uefi-win8.1-ramos.jpg

点评

uefi下grub2对文件是否连续没有任何要求,只要是个grub2下能看到的文件就行。只不过一些文件没办法或者不方便随机读取(比如网络上的文件或者压缩文件),所以对于这类文件,建议直接加载到内存。 bios下理论上也  详情 回复 发表于 2020-12-23 09:36
回复

使用道具 举报

89#
发表于 2020-12-23 09:44:35 | 显示全部楼层
wintoflash 发表于 2020-12-23 09:36
uefi下grub2对文件是否连续没有任何要求,只要是个grub2下能看到的文件就行。只不过一些文件没办法或者 ...

谢谢斧正!看样子我误会了
回复

使用道具 举报

90#
发表于 2020-12-23 10:39:53 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-24 08:04 编辑
2011yaya2007777 发表于 2020-12-23 10:16
修改了 G4E 外部命令模板,再测试一下。我这里正常。要使用里边那个 BOOTX64.EFI,是配套的。
另外我想 ...

romex官网已经回复了,primo申请的内存没有连续性要求。他的回复不是很详细,我理解应该是内存不要求连续,可用即可。请问下primo内存盘占用的内存,是否连续? - Romex Software 中文论坛 [url=请问下primo内存盘占用的内存,是否连续? - Romex Software 中文论坛 https://forum.romexsoftware.com/zh-cn/viewtopic.php?f=34&t=5165&p=10263#p10263
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-2 08:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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