无忧启动论坛

标题: uefi单镜像p驱ramos关键性突破 [打印本页]

作者: 2012wuzhong    时间: 2018-12-17 21:35
标题: uefi单镜像p驱ramos关键性突破
本帖最后由 2012wuzhong 于 2018-12-29 10:08 编辑

http://bbs.wuyou.net/forum.php?m ... &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的,高版本已经内嵌了。
作者: 15126222223    时间: 2018-12-17 21:55
新的东西,大家赶快研究,我小白只能测试一下。
作者: levinsky    时间: 2018-12-18 08:55
仔细地看了,支持...
作者: sairen139    时间: 2018-12-18 18:02
这个能突破的话未来的uefi的ramos会更美好!
作者: 2012wuzhong    时间: 2018-12-20 09:46
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
关于00e蓝屏,有大神遇到吗?
作者: 2012wuzhong    时间: 2018-12-21 09:55
本帖最后由 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来启动?
作者: huiyao_zhou    时间: 2018-12-21 10:06
这个我只看各位大神发力
作者: 坏坏小生    时间: 2019-2-19 10:15
还是移植GRUB4DOS的MAP功能过来最好!~
作者: dido0379    时间: 2019-4-22 17:52
本帖最后由 dido0379 于 2019-4-22 17:58 编辑

关注进展。另外问一下为什么我用ramdiskdxe.efi加载的内存iso盘不能连接分区协议和文件系统协议,只有一个磁盘协议?
希望大家都来研究一下吧,工具

mrd.rar

1012.78 KB, 下载次数: 16, 下载积分: 无忧币 -2


作者: 进士小站    时间: 2019-4-22 18:11
不懂想懂……
作者: dido0379    时间: 2019-4-23 19:22
楼上的mrd是在http://www.lab-z.com/stu132rd/上找来的,目前经过修改,配合ramdiskdxe,加载ISO文件后可以看见软件镜像fs1:,可以运行fs1上的bootmgfw.ef,几个handle看起来和xorboot的差不多了,但是devicepath等参数不一样,所以同一个ISO镜像,xorboot模拟出来可以启动到PE,ramdiskdxe模拟出来会找不到bcd,继续探索中
作者: dido0379    时间: 2019-4-23 23:06
刚刚测试已经可以用RAMDISKDXE启动win10pe的iso文件,目前测试程序全是硬编码,还不能读配置文件或者命令行。有兴趣的可以试试

uefi直接启动iso文件.rar

50.83 KB, 下载次数: 29, 下载积分: 无忧币 -2


作者: 282198284    时间: 2019-4-24 00:09
dido0379 发表于 2019-4-23 23:06
刚刚测试已经可以用RAMDISKDXE启动win10pe的iso文件,目前测试程序全是硬编码,还不能读配置文件或者命令行 ...

iso是没有意义的,要加载vdf,能启动才有用,不然都是扯淡
作者: dido0379    时间: 2019-4-24 10:12
RamDisiImpl.h 第54行,改为光盘扇区大小
RamDiskProtocol.c  第25,26行,我猜这个是让bootmgfw能够找到iso下bcd的关键
RamDiskBlockIo.c   第70行,改为只读,效果不明,没有进一步测试

硬盘镜像没有测试,应该需要进一步修改
mrd原来的程序中StartingAddr这个名称猜测和库中某个宏冲突,编译正常,但是打开ramdisk协议后会破坏内存镜像,不改就死活不行

uefi启动iso镜像含源码.zip

86.1 KB, 下载次数: 29, 下载积分: 无忧币 -2


作者: 282198284    时间: 2019-4-24 13:39
dido0379 发表于 2019-4-24 10:12
RamDisiImpl.h 第54行,改为光盘扇区大小
RamDiskProtocol.c  第25,26行,我猜这个是让bootmgfw能够找到is ...

大神你可以参考wintoflash大神的,W大写的那个是可以过bcd的,就是在winload.efi过不了,出显00e的代码,
作者: liuzhaoyzz    时间: 2019-4-24 14:07
    我碰到过启动的时候00e的问题,说下我的场景,一个机械硬盘bootmgr、bcd,系统是安装在NVME SSD上面的,系统怎么都安装不上去,用winntsetup安装的时候,启动就显示00e错误。后来把bootmgr、bcd以及系统都安装在NVME SSD,启动就没有00e这个错误了。
    再看下虎大在一楼的发帖,已经说的很清楚了,跨越硬盘(虚拟硬盘)启动就会发生盘00e的错误。解决的思路估计也是一样,bootmgr bcd  windows不能跨硬盘(虚拟硬盘),跨越了可能就会出错;当然也会有不出错的情况。

作者: cntvic    时间: 2024-1-4 12:35
感谢分享
作者: ljy931116    时间: 2024-1-4 15:28
感谢分享
作者: cntvic    时间: 2024-1-4 16:49
谢谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3