jebbs 发表于 2014-12-9 11:13:31

2011niumao 发表于 2014-12-9 10:17
我把ISO文件解开到VHD上使用VBOX测试,可以使用grub2-efi,chainloader 方式启动到WINPE的那个bootx64. ...

这个问题应该是和我的同理的。如果有任何进展记得分享给我啊
我怀疑是chainloader的时候,后者所在的分区格式问题,GPT+FAT,这两个条件在ISO上一个也不满足

jebbs 发表于 2014-12-9 11:27:40

my9823 发表于 2014-12-9 10:29
俺们还是7-8年前的电脑,没办法折腾uefi

我是在虚拟机上折腾的。GRUB2 EFI已经完工了的,能引导EFI版的parted magic了,但无论如何,需要微软的bootx64.efi来读取BCD,引导WIM文件。但GRUB2交给微软引导时行不通

hxwgz 发表于 2014-12-9 13:58:00

本帖最后由 2012hxwgz 于 2014-12-9 14:15 编辑

grub2 环境下无法启动光盘上的BCD
uefiboot->gurb2.efi->efi shell.efi->cdboot.efi->bootmgr.efi->BCD
efi shell 是命令符环境,要实现自动引导 cdboot.efi,要自己创建文本文件 startup.nsh,作用类似autoexec.bat。
cdboot.efi 在安装盘\efi\microsoft\boot目录,bootmgr.efi在安装盘根目录。

光盘引导文件镜像
\efi\boot\    放grub2的启动文件
\   放cdboot.efi、startup.nsh

光盘根目录
bootmgr.efi
shell.efi

grub2环境用 chainloader 引导 shell.efi, 进入EFI Shell 环境,光盘的引导文件被识别为fs0,或fs1、fs2... (视磁盘fat卷的多少,如果不存在fat卷,则为fs0。),搜索并自动运行 startup.nsh ,如果不能自动启动,则需手动运行 cdboot.efi 。

jebbs 发表于 2014-12-9 16:37:16

本帖最后由 jebbs 于 2014-12-9 17:36 编辑

2012hxwgz 发表于 2014-12-9 13:58
grub2 环境下无法启动光盘上的BCD
uefiboot->gurb2.efi->efi shell.efi->cdboot.efi->bootmgr.efi->BCD
e ...
太好了~我查阅了很多资料,都快放弃了,你的回复终于给了一线曙光啊。
已经见到window boot manager了,手工操作的,但能确保EFI镜像以后每次都是fs0:吗?
还有,似乎已经到WIN文件载入过程了,但虚拟机显示“发生错误,导致虚拟CPU进入关闭状态”。。同一个WIM镜像,非GRUB2引导过来的环境中,启动是OK的。请问,有知道这个问题的成因吗?(原因是用错了.efi的版本,要用win8里提取出来的)
终于成功了,多谢 2012hxwgz!

hxwgz 发表于 2014-12-9 19:21:26

本帖最后由 2012hxwgz 于 2014-12-9 19:23 编辑

要确保fs0 则电脑的硬盘不能有FAT卷。另外可用startup.nsh进行控制启动卷,语法同CMD的批处理类似。进入EFI shell 后可用 help -b 来显示命令帮助.

jebbs 发表于 2014-12-10 08:45:20

2012hxwgz 发表于 2014-12-9 19:21
要确保fs0 则电脑的硬盘不能有FAT卷。另外可用startup.nsh进行控制启动卷,语法同CMD的批处理类似。进入EFI ...

startup.nsh 控制启动卷,能说得详细点吗?谢谢

jebbs 发表于 2014-12-10 09:25:27

本帖最后由 jebbs 于 2014-12-10 11:16 编辑

2012hxwgz 发表于 2014-12-9 19:21
要确保fs0 则电脑的硬盘不能有FAT卷。另外可用startup.nsh进行控制启动卷,语法同CMD的批处理类似。进入EFI ...
echo -off

set efiname64 "cdboot8pe64"
set efiname32 "cdboot8pe32"
echo Seach for "%efiname64%.efi"...
for %b in fs0 fs1 fs2 fs3 fs4 fs5 fs6 fs7 fs8 fs9
echo Seaching %b ...
if exist %b:\%efiname64%.efi then
echo %efiname64% found in %b:!
%b:
%efiname64%
if not %lasterror% == 0 then
%efiname32%
endif
exit
endif
endfor

以上是可行的~但 fs0 fs1 fs2 fs3 fs4 fs5 fs6 fs7 fs8 fs9这段不满意,有办法自动获取所有fs,而不用这里指定吗?
GRUB配置:menuentry "启动 Win8 PE (请注意选择版本)"{
echo "正在加载 Win8 PE,请等待...."
if [ "${grub_cpu}" == "x86_64" ]; then
search --file /grub2/uefi/shell64.efi --set=root
chainloader /grub2/uefi/shell64.efi
fi
if [ "${grub_cpu}" == "i386" ]; then
search --file /grub2/uefi/shell32.efi --set=root
chainloader /grub2/uefi/shell32.efi
fi
}

以上所有红字部分实现了到windows boot manager 前,32位和64位的自动选择。
目前GRUB2合盘后,WIN部分的启动效果与单独未合盘前几乎一致了,终于可以暂时告一段落,谢谢各位!尤其是2012hxwgz!

2011niumao 发表于 2014-12-10 18:47:06

jebbs 发表于 2014-12-10 09:25
echo -off

set efiname64 "cdboot8pe64"


如果合盘不太大,求分享成品 或者 给个模板ISO 嘿嘿...

青青草 发表于 2014-12-10 20:26:48

jebbs 发表于 2014-12-10 09:25
echo -off

set efiname64 "cdboot8pe64"


“32位和64位的自动选择”
在bios环境中,此方法好像失效。

jebbs 发表于 2014-12-11 08:48:21


补充:将cdboot8pe32.efi (原win版bootia32.efi)中的BCD用HEX编辑,将其中BCD改为B32,再将EFI的BCD复制一份,重命名为B32,B32中添加32位引导项,BCD中添加64位引导项,则WIN引导过程中也实现了32、64自动选择。

至此EFI引导部分已经完全自动化了。
页: 1 [2] 3
查看完整版本: GURB2 UEFI环境如何引导光盘上的非镜像PE系统