uefi单镜像p驱ramos关键性突破
本帖最后由 2012wuzhong 于 2018-12-29 10:08 编辑http://bbs.wuyou.net/forum.php?mod=viewthread&tid=410097&extra=page%3D2
uefi启动区有坛友wintoflash利用uefi提供的Ram Disk Protocol,编写一个 Application 实现了RamDisk创建,遗憾的是他无法启动内存盘上的bcd。经过试验发现使用带硬盘分区格式的img生成的内存盘,bootmgr能正确识别bcd。这个img可以成为p驱的镜像文件,这是实现单镜像p驱ramos一个关键性的突破,不过现在还存在很多问题,希望懂efi开发的坛友能助一臂之力。
2018/12/29
xorboot启动iso模式试验失败
1、uefi只认识iso中的软盘镜像,无mbr模式,可以ntfs格式(跟BIOS是否内嵌ntfs驱动有关);但是bootmgr.efi/winload.efi不认识该虚拟盘,启动提示找不到bcd。因此能uefi启动的iso,软盘镜像(Efisys.bin)只会存放\efi\boot\bootia32.efi以及bootx64.efi这两个启动文件。
2、iso中的光盘镜像必须udf格式,放入最小系统可以启动到start=1阶段,由于后续没有udf镜像驱动而导致蓝屏。目前p驱还不支持udf镜像,另外也没有渠道知道这个udf系统盘信息。
2018/12/27
mkramdisk.efi试验失败
1、软盘镜像,运行\efi\microsoft\boot\bootmgfw.efi,没有反应
2、硬盘镜像,能够识别bcd,但由于找不到winload.efi提示00e,指定其它分区的winload.efi,提示找不到system注册表。
3、使用存放在其它分区的bcd,启动分区指向内存盘,同样提示00e
4、使用内存盘上的bcd,启动分区指向其它分区,也会提示00e
5、可能是2.3.1版本过低的问题,ramdiskdxe需要load的,高版本已经内嵌了。 新的东西,大家赶快研究,我小白只能测试一下。 仔细地看了,支持... 这个能突破的话未来的uefi的ramos会更美好! http://bbs.wuyou.net/forum.php?mod=viewthread&tid=412017&extra=page%3D1
关于00e蓝屏,有大神遇到吗? 本帖最后由 2012wuzhong 于 2018-12-21 10:11 编辑
目前的试验结果如下:
使用带mbr的img生成的的内存盘,运行\efi\microsoft\boot\bootmgfw.efi
1、出现启动菜单,说明bootmgr.efi可以识别内存盘上的\efi\microsoft\boot\bcd,
2、但是识别不了\windows\system32\winload.efi,提示0x000000e错误。
3、如果将winload.efi定位到其它地方,启动提示缺少\windows\system32\config\system,说明winload.efi识别不了内存盘
猜测:
1、通过bcd传递内存盘信息,winload.efi识别不了
2、uefi提供的读内存盘和读存储设备的服务可能有差别,而winload.efi只采用了读存储设备的方式,因此无法读取内存盘上的文件。
3、试验的版本太低:2.3.1版本,需要加载ramdiskdxe.efi,winload.efi没有调用ramdiskdxe.efi提供的读内存盘服务
希望坛友在最新版本uefi继续试验。另外是否存在不用bcd来启动? 这个我只看各位大神发力 还是移植GRUB4DOS的MAP功能过来最好!~ 本帖最后由 dido0379 于 2019-4-22 17:58 编辑
关注进展。另外问一下为什么我用ramdiskdxe.efi加载的内存iso盘不能连接分区协议和文件系统协议,只有一个磁盘协议?
希望大家都来研究一下吧,工具
不懂想懂…… 楼上的mrd是在http://www.lab-z.com/stu132rd/上找来的,目前经过修改,配合ramdiskdxe,加载ISO文件后可以看见软件镜像fs1:,可以运行fs1上的bootmgfw.ef,几个handle看起来和xorboot的差不多了,但是devicepath等参数不一样,所以同一个ISO镜像,xorboot模拟出来可以启动到PE,ramdiskdxe模拟出来会找不到bcd,继续探索中 刚刚测试已经可以用RAMDISKDXE启动win10pe的iso文件,目前测试程序全是硬编码,还不能读配置文件或者命令行。有兴趣的可以试试 dido0379 发表于 2019-4-23 23:06
刚刚测试已经可以用RAMDISKDXE启动win10pe的iso文件,目前测试程序全是硬编码,还不能读配置文件或者命令行 ...
iso是没有意义的,要加载vdf,能启动才有用,不然都是扯淡 RamDisiImpl.h 第54行,改为光盘扇区大小
RamDiskProtocol.c第25,26行,我猜这个是让bootmgfw能够找到iso下bcd的关键
RamDiskBlockIo.c 第70行,改为只读,效果不明,没有进一步测试
硬盘镜像没有测试,应该需要进一步修改
mrd原来的程序中StartingAddr这个名称猜测和库中某个宏冲突,编译正常,但是打开ramdisk协议后会破坏内存镜像,不改就死活不行 dido0379 发表于 2019-4-24 10:12
RamDisiImpl.h 第54行,改为光盘扇区大小
RamDiskProtocol.c第25,26行,我猜这个是让bootmgfw能够找到is ...
大神你可以参考wintoflash大神的,W大写的那个是可以过bcd的,就是在winload.efi过不了,出显00e的代码, 我碰到过启动的时候00e的问题,说下我的场景,一个机械硬盘bootmgr、bcd,系统是安装在NVME SSD上面的,系统怎么都安装不上去,用winntsetup安装的时候,启动就显示00e错误。后来把bootmgr、bcd以及系统都安装在NVME SSD,启动就没有00e这个错误了。
再看下虎大在一楼的发帖,已经说的很清楚了,跨越硬盘(虚拟硬盘)启动就会发生盘00e的错误。解决的思路估计也是一样,bootmgr bcdwindows不能跨硬盘(虚拟硬盘),跨越了可能就会出错;当然也会有不出错的情况。 感谢分享 感谢分享 谢谢分享
页:
[1]