无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
781#
发表于 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启动失败是不是也是这个原因,就是“内存冲突”,天马行空,胡乱猜测的,高手勿笑。

回复

使用道具 举报

782#
 楼主| 发表于 2020-12-11 15:18:05 来自手机 | 只看该作者
Taviruni 说,有可能是WIN7,8只支持旧版本的UEFI,新的扩展函数不支持。
回复

使用道具 举报

783#
发表于 2020-12-11 15:56:50 | 只看该作者
在我的台式机上,(hd-1,1) 是 FAT32 的 ESP 分区,里面有传统 BIOS 和 EFI 启动的相关文件,G4E 直接 chainloader /efi/microsoft/boot/bootmgfw.efi 时,都会出现 BCD 错误而启动不了 Windows,但是如果只是 chainloader (hd-1)  却正常。而使用 chainloader (hd-1,1) 时,可以出来 BCD 菜单,但是选择启动菜单中的 Windows 系统时,会提示“可能是最近更改了硬件或软件”而启动不了。

另外,G4E 的硬盘排序似乎有些问题?我 SATA1 上挂的是 MBR 格式的 SSD,SATA2 挂的是 GPT 格式的机械硬盘,G4D 和 UEFI BIOS 都将 SSD 盘识别为 0,但是 G4E 总是将 SSD 识别为 1,机械盘才是 0。
回复

使用道具 举报

784#
发表于 2020-12-11 16:04:52 来自手机 | 只看该作者
本帖最后由 sunsea 于 2020-12-11 16:08 编辑

其实从头到尾最让我迷惑的还是为什么chainloader (hd1)就能正常启动直接加载哪怕是本地硬盘上的bootmgfw.efi文件就不行(不会报错,直接boot指令后黑屏死机,中间花一条线)……难道在UEFI时代了M$还只认0x80吗……
回复

使用道具 举报

785#
 楼主| 发表于 2020-12-11 16:34:16 来自手机 | 只看该作者
这个问题困扰我多时了,就是没有答案。

点评

感觉可以研究一下grub2怎么做的,人家直接set root=XXXX然后就chainloader bootmgfw.efi了就没出问题……  详情 回复 发表于 2020-12-11 16:50
在代码层次这两个有区别吗?  详情 回复 发表于 2020-12-11 16:37
回复

使用道具 举报

786#
发表于 2020-12-11 16:37:56 | 只看该作者
2011yaya2007777 发表于 2020-12-11 16:34
这个问题困扰我多时了,就是没有答案。

在代码层次这两个有区别吗?
回复

使用道具 举报

787#
发表于 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:




回复

使用道具 举报

788#
发表于 2020-12-11 16:50:26 来自手机 | 只看该作者
2011yaya2007777 发表于 2020-12-11 16:34
这个问题困扰我多时了,就是没有答案。

感觉可以研究一下grub2怎么做的,人家直接set root=XXXX然后就chainloader bootmgfw.efi了就没出问题……
回复

使用道具 举报

789#
 楼主| 发表于 2020-12-11 16:56:25 来自手机 | 只看该作者
在代码层次有区别。代码就是移植自GRUB2,当然做了一些调整。问题是没有看出本质区别。

点评

那就只能咨询一下wintoflash大佬了……真的非常迷惑  详情 回复 发表于 2020-12-11 17:02
回复

使用道具 举报

790#
发表于 2020-12-11 17:02:22 来自手机 | 只看该作者
本帖最后由 sunsea 于 2020-12-11 19:23 编辑
2011yaya2007777 发表于 2020-12-11 16:56
在代码层次有区别。代码就是移植自GRUB2,当然做了一些调整。问题是没有看出本质区别。

那就只能咨询一下 @wintoflash 大佬了……真的非常迷惑
回复

使用道具 举报

791#
发表于 2020-12-11 18:10:37 | 只看该作者
本帖最后由 2011whp 于 2020-12-12 19:06 编辑

那个 300M  svbus  imgpe  

img  
     没有碎片,不加  --mem  也能启动,识别为磁盘
     不会 人为制造 碎片,估计 有碎片 不加 --mem 也启动不了

后来把 boot.wim,加到 iso内(复制 到 U盘 有两个碎片)
    iso  不加 --mem  时 一直 在四格窗   那转圈
    iso   加  --mem   正常启动,识别为 光盘


点评

svbus是明确不支持碎片的,源代码就这样。  详情 回复 发表于 2020-12-11 18:18
回复

使用道具 举报

792#
发表于 2020-12-11 18:18:43 | 只看该作者
2011whp 发表于 2020-12-11 18:10
那个 300M  svbus  imgpe  

img  

svbus是明确不支持碎片的,源代码就这样。

点评

有碎片等于有“硬盘坏道”,我试过有碎片能认盘,但数据坏了不少。  详情 回复 发表于 2020-12-11 22:31
回复

使用道具 举报

793#
发表于 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
回复

使用道具 举报

794#
发表于 2020-12-11 18:52:17 | 只看该作者
本帖最后由 2011whp 于 2020-12-15 17:38 编辑
liuzhaoyzz 发表于 2020-12-11 18:21
好消息! g4e/grub2+svbus+win8.1RAMOS启动成功!vhd里面也是用的激活的FAT32+NTFS分区双分区方案,单分区 ...

估计 win10 的 winload  已经 不回向 检测引导  从哪来了,
    而win8以下 有回向检测,  不管对错,咱先圆满现实
   

点评

svbus驱动目前已经通杀+win7 8 10-UEFI-RAMOS!  详情 回复 发表于 2020-12-11 18:55
回复

使用道具 举报

795#
发表于 2020-12-11 18:55:18 | 只看该作者
2011whp 发表于 2020-12-11 18:52
估计 win10 的 winload  已经 不回向 检测引导  从哪来了,
    而win8以下 有回向检测,  不管对错,咱 ...

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

使用道具 举报

796#
发表于 2020-12-11 21:03:38 | 只看该作者
又有G4E玩了啊,大半年没搞这个了,又忘得差不多了。
回复

使用道具 举报

797#
发表于 2020-12-11 22:30:58 | 只看该作者
liuzhaoyzz 发表于 2020-12-11 18:21
好消息! g4e/grub2+svbus+win8.1RAMOS启动成功!vhd里面也是用的激活的FAT32+NTFS分区双分区方案,单分区 ...

单分区估计用efishell下load ntfs_x64.efi或grub2环境efiload ntfs_x64.efi一下就可以
关键貌似efishell下并不能启动g4e。。

点评

g4e与efishell来回切换总感觉有点绕弯儿。 ntfs_x64.efi,感觉上有点当年的NTFS2DOS.exe那样,让DOS识别NTFS分区内的文件。  详情 回复 发表于 2020-12-12 13:54
试了,efi shell 下能启动 g4e (你说的情况,估计是g4e不支持递归,内存中不能有两个 g4e)  详情 回复 发表于 2020-12-12 08:06
回复

使用道具 举报

798#
发表于 2020-12-11 22:31:47 | 只看该作者
sunsea 发表于 2020-12-11 18:18
svbus是明确不支持碎片的,源代码就这样。

有碎片等于有“硬盘坏道”,我试过有碎片能认盘,但数据坏了不少。
回复

使用道具 举报

799#
发表于 2020-12-12 08:06:40 | 只看该作者
本帖最后由 2011whp 于 2020-12-12 14:11 编辑
江南一根葱 发表于 2020-12-11 22:30
单分区估计用efishell下load ntfs_x64.efi或grub2环境efiload ntfs_x64.efi一下就可以
关键貌似efishell ...

试了,efi shell 下能启动 g4e




回复

使用道具 举报

800#
 楼主| 发表于 2020-12-12 09:21:55 | 只看该作者
wintoflash :
你看看我修改的这个Makefile.in-i386,在你的电脑环境可否编译成功。
或者把你修改成功的发过来。

file.rar.txt

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

点评

可以。  详情 回复 发表于 2020-12-12 09:51
回复

使用道具 举报

801#
发表于 2020-12-12 09:51:47 | 只看该作者
2011yaya2007777 发表于 2020-12-12 09:21
wintoflash :
你看看我修改的这个Makefile.in-i386,在你的电脑环境可否编译成功。
或者把你修改成功的发 ...

可以。
回复

使用道具 举报

802#
发表于 2020-12-12 11:49:24 | 只看该作者
真心支持,要是支持nvram的读取就好了
回复

使用道具 举报

803#
发表于 2020-12-12 12:11:43 | 只看该作者
感谢大佬的开发!
回复

使用道具 举报

804#
发表于 2020-12-12 13:15:40 | 只看该作者
感谢,如果可以读取nvram的数据就更好的
回复

使用道具 举报

805#
发表于 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
回复

使用道具 举报

806#
发表于 2020-12-12 14:31:39 | 只看该作者
本帖最后由 2011whp 于 2020-12-12 18:53 编辑
liuzhaoyzz 发表于 2020-12-12 13:54
g4e与efishell来回切换总感觉有点绕弯儿。

ntfs_x64.efi,感觉上有点当年的NTFS2DOS.exe那样,让DOS识 ...


bootmgfw 能在  ntfs分区上运行的,

shell下秒启, grub2 下会黑一会(估计是 bootmgfw 程序内,也自带ntfs驱动)
最近 遇到怪事,  U盘 有两个 fat分区      chainloader  (hd2)     bootmgfw也出错( 选择困难症


回复

使用道具 举报

807#
发表于 2020-12-12 14:40:43 | 只看该作者
liuzhaoyzz 发表于 2020-12-12 13:54
g4e与efishell来回切换总感觉有点绕弯儿。

ntfs_x64.efi,感觉上有点当年的NTFS2DOS.exe那样,让DOS识 ...

不绕弯,那直接编译efi格式的pe,岂不是更合适
回复

使用道具 举报

808#
 楼主| 发表于 2020-12-12 16:38:58 | 只看该作者
liuzhaoyzz :
vhd 搞两个分区,其中 fat32 分区放置什么文件?
回复

使用道具 举报

809#
发表于 2020-12-12 17:36:13 | 只看该作者
2011yaya2007777 发表于 2020-12-12 16:38
liuzhaoyzz :
vhd 搞两个分区,其中 fat32 分区放置什么文件?

FAT32 分区应该就是存放EFI启动相关的文件的分区,我使用 G4E + SVBUS 做的系统,就是这样的操作。
回复

使用道具 举报

810#
发表于 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

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2026-2-22 06:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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