无忧启动论坛

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

[原创] NTloader: BIOS/UEFI 下用 GRUB4DOS 启动 VHD/WIM

    [复制链接]
61#
 楼主| 发表于 2021-2-4 15:55:02 | 只看该作者
xiaohhl 发表于 2021-2-4 09:04
G4E下winload=\\Windows\\System32\\winload.efi和sysroot=\\Windows的双斜杠要改成单斜杠才能用——小白

现在可以直接用斜杠了,内部自动转换成反斜杠
winload=/Windows/System32/winload.efi
回复

使用道具 举报

62#
发表于 2021-2-4 18:36:30 来自手机 | 只看该作者
2011whp 发表于 2021-2-4 13:36
B75 主板附意  不能 initrd ntloader



       怎么感觉你的回帖里面,很多错别字,有时候不知道你想要表达的是什么意思,你是大陆的吧?
你用的是什么菜单?
回复

使用道具 举报

63#
发表于 2021-2-4 19:20:23 | 只看该作者
本帖最后由 2011whp 于 2021-2-4 20:09 编辑
liuzhaoyzz 发表于 2021-2-4 18:36
怎么感觉你的回帖里面,很多错别字,有时候不知道你想要表达的是什么意思,你是大陆的吧?
你用 ...

试验的g4e菜单
debug 3
find --ignore-floppies --ignore-cd /ntloader | set x=
echo x=%x%
find --ignore-floppies --ignore-cd --set-root /src/boot.wim
uuid ()
kernel %x%/ntloader uuid=%?_UUID% file=/src/boot.wim
initrd %x%/initrd.lz1
pause pause1


b75主板的电脑 ,不能启动,和你情况一样

b360主板的电脑,可以启动
意思是同一个u盘,内容也一样,在不同电脑上,前者不能启动,后者能启动

说明:
    1.  按 wintoflash 原理,有的电脑是 能行得通的,有的电脑 行不通
    2.   bios   g4e的kernel   ntloader  三者关系,当然从 wintoflah 角度 只能怀疑 后两者
    3.   如果,不发布 上面菜单的 用法的话 ,就没有问题了(chailoader方式,没人报错)

回复

使用道具 举报

64#
发表于 2021-2-4 20:49:27 | 只看该作者
本帖最后由 2011whp 于 2021-2-5 18:39 编辑
wintoflash 发表于 2021-2-4 20:05
试试这个打印的调试信息

可以启动了   B75主板电脑也能了

回复

使用道具 举报

65#
发表于 2021-2-4 22:24:30 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-5 08:19 编辑
wintoflash 发表于 2021-2-4 20:05
试试这个打印的调试信息

还是不行,回头截图
截图模块果然很好用,现在的截图很清晰了。

04221827.png (5.25 KB, 下载次数: 457)

04221827.png
回复

使用道具 举报

66#
发表于 2021-2-5 08:21:34 | 只看该作者
2011whp 发表于 2021-2-4 19:20
试验的g4e菜单
debug 3
find --ignore-floppies --ignore-cd /ntloader | set x=

        看你的菜单,你是用来启动pe.wim,不是xxx.vhd啊?前面你说可以启动xxx.vhd是吗?

回复

使用道具 举报

67#
发表于 2021-2-5 10:18:26 | 只看该作者
wintoflash 发表于 2021-2-5 10:07
执行完 kernel /ntloader XXXX, initrd /initrd.lz1 之后,chainloader到grub2,执行hexdump mem:3fffc00 ...

       这个做不到啊。执行完 kernel /ntloader XXXX, initrd /initrd.lz1 之后,按任何键系统都会直接重启,没有办法再chainloader到grub2。
回复

使用道具 举报

68#
发表于 2021-2-5 10:29:49 | 只看该作者

哦,明白了!boot之前先chainloader %x%/EFI/boot/grubx64.efi即可。
直接上图。

05102621.png (6.92 KB, 下载次数: 472)

05102621.png
回复

使用道具 举报

69#
发表于 2021-2-5 11:32:57 | 只看该作者
本帖最后由 2011whp 于 2021-2-5 11:36 编辑
liuzhaoyzz 发表于 2021-2-5 08:21
看你的菜单,你是用来启动pe.wim,不是xxx.vhd啊?前面你说可以启动xxx.vhd是吗?

前面  是启动的vhd   (24层:http://wuyou.net/forum.php?mod=r ... &fromuid=413782  )

是为了  复现你的问题  在B360主板的电脑 上 启动vhd的,(菜单是  按e键后   编辑成vhd的)

现在我这边  B75主板的电脑 ,也能启动wim了,所以没法试了 (我一般 都是试 wim)

(我这有两台 电脑, 相当于两个人 发生的案例)


另说:
   上次 在 B360主板试时,bios为  纯UEFI ,后来试时  改成 uefi+cms,也能的
    说明,ntloader 与这个没关系
回复

使用道具 举报

70#
 楼主| 发表于 2021-2-5 14:59:22 | 只看该作者
liuzhaoyzz 发表于 2021-2-5 10:29
哦,明白了!boot之前先chainloader %x%/EFI/boot/grubx64.efi即可。
直接上图。

还是纯用grub2测试更方便。 linuxefi.zip (2.31 KB, 下载次数: 23)
rmmod linuxefi
insmod /xxx/linuxefi.mod
linuxefi /ntloader XXXX
会打印这样的信息:"kernel_mem = XXXX kernel_params = XXXX cmdline = XXXX",这就是对应的内存地址。

然后用 hexdump 命令查看一下 kernel_params 和 cmdline 的内存。


回复

使用道具 举报

71#
发表于 2021-2-5 15:51:13 | 只看该作者
wintoflash 发表于 2021-2-5 14:59
还是纯用grub2测试更方便。
rmmod linuxefi
insmod /xxx/linuxefi.mod


menuentry "SX70211.vhd-svbus-ntloader-2" "/VHD/SX70211.vhd" {
search -n -s x -f /EFI/grub/ntloader
rmmod linuxefi
insmod /EFI/grub/linuxefi.mod
search --no-floppy --set --file $2
probe -u ($root) -s uuid
linuxefi ($x)/EFI/grub/ntloader uuid=$uuid file=/VHD/SX70211.vhd
initrdefi ($x)/EFI/grub/initrd.lz1
}

grub2有没有类似g4e的那种pause暂停命令?
面对黑黑的grub2窗口敲命令,我有点发蒙。
回复

使用道具 举报

72#
 楼主| 发表于 2021-2-5 16:06:11 | 只看该作者
本帖最后由 wintoflash 于 2021-2-5 16:07 编辑
liuzhaoyzz 发表于 2021-2-5 15:51
menuentry "SX70211.vhd-svbus-ntloader-2" "/VHD/SX70211.vhd" {
search -n -s x -f /EFI/grub/ntloa ...

当然有办法暂停,read和getkey都可以。
但是调试的时候不要这样用。必须手动逐条执行,以便观察情况。
按 tab 补全命令或路径,也不是很麻烦。
linux 命令行那里,随便输入什么都行,没必要那么认真,那不是重点。
回复

使用道具 举报

73#
发表于 2021-2-5 17:02:27 | 只看该作者
wintoflash 发表于 2021-2-5 16:06
当然有办法暂停,read和getkey都可以。
但是调试的时候不要这样用。必须手动逐条执行,以便观察情况。
...

        哦,getkey这个命令,你好像在哪里说过,我又忘了。这些命令记不住。
回复

使用道具 举报

74#
发表于 2021-2-5 17:20:15 | 只看该作者
wintoflash 发表于 2021-2-5 16:06
当然有办法暂停,read和getkey都可以。
但是调试的时候不要这样用。必须手动逐条执行,以便观察情况。
...

上面的菜单,我逐条输入命令,本来CTRL+ALT+F12,我按错了,按成了CTRL+ALT+DELETE,白搞了!

直接上图。

05171442.png (7.2 KB, 下载次数: 491)

05171442.png

05171620.png (10.55 KB, 下载次数: 439)

05171620.png

05171626.png (4.23 KB, 下载次数: 493)

05171626.png
回复

使用道具 举报

75#
 楼主| 发表于 2021-2-5 17:35:37 | 只看该作者
liuzhaoyzz 发表于 2021-2-5 17:20
上面的菜单,我逐条输入命令,本来CTRL+ALT+F12,我按错了,按成了CTRL+ALT+DELETE,白搞了!

直接上 ...

老哥,你这内存地址都没敲对。。。
回复

使用道具 举报

76#
发表于 2021-2-5 17:38:21 | 只看该作者
感谢楼主分享
回复

使用道具 举报

77#
发表于 2021-2-5 20:01:10 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-5 20:43 编辑
wintoflash 发表于 2021-2-5 17:35
老哥,你这内存地址都没敲对。。。


换了台电脑,WIN8.1启动了!72楼的菜单,grub2+kernel+ntloader+initrd+vhd+svbus启动的。

WIN10也启动了!
WIN7英文版也启动了!

IMG_20210205_200040.jpg (77.74 KB, 下载次数: 383)

IMG_20210205_200040.jpg

IMG_20210205_200013.jpg (64.71 KB, 下载次数: 395)

IMG_20210205_200013.jpg
回复

使用道具 举报

78#
发表于 2021-2-5 21:30:07 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-5 21:32 编辑
wintoflash 发表于 2021-2-5 17:35
老哥,你这内存地址都没敲对。。。

华硕台式机:主板原生集成了ntfs.efi,支持全部是NTFS的分区UEFI启动。

1、g4e2021-1-16-kernel-ntloader-initrd-vhd+svbus,启动WIN7.VHD成功。()
title WIN7X64-SVBUS (/VHD/sx7en.vhd)-kernel-ntloader-initrd-hd
find --ignore-floppies --ignore-cd /EFI/grub/ntloader | set x=
echo x=%x%
find --ignore-floppies --ignore-cd --set-root /VHD/sx7en.vhd
uuid ()
kernel %x%/EFI/grub/ntloader uuid=%?_UUID% file=/VHD/sx7en.vhd
initrd %x%/EFI/grub/initrd.lz1
pause pause1

2、g4e2021-1-16-kernel-ntloader-initrd-mem+svbus,启动WIN7.VHD-svbus失败,7B蓝屏。
title WIN7X64-SVBUS (/VHD/sx7en.vhd)-kernel-ntloader-initrd-mem
debug 3
find --ignore-floppies --ignore-cd /EFI/grub/ntloader | set x=
echo x=%x%
find --ignore-floppies --ignore-cd --set-root /VHD/sx7en.vhd
map --mem --top /VHD/sx7en.vhd (hd)
uuid (hd-1,0)
kernel %x%/EFI/grub/ntloader uuid=%?_UUID%

initrd %x%/EFI/grub/initrd.lz1
pause pause1


3、g4e2021-1-16-kernel-ntloader-initrd-vhd+svbus,启动WIN10.VHD成功。()
title UEFIltsb-svbus(/VHD/UEFIltsb-svbus.vhd)-kernel-ntloader-initrd-hd
debug 3
find --ignore-floppies --ignore-cd /EFI/grub/ntloader | set x=
echo x=%x%
find --ignore-floppies --ignore-cd --set-root /VHD/UEFIltsb-svbus.vhd
uuid ()
kernel %x%/EFI/grub/ntloader uuid=%?_UUID% file=/VHD/UEFIltsb-svbus.vhd

initrd %x%/EFI/grub/initrd.lz1
pause pause1

4、g4e2021-1-16-kernel-ntloader-initrd-mem+svbus,启动WIN10.VHD-ramos失败,蓝屏,好像svbus没有生效。
title UEFIltsb-svbus(/VHD/UEFIltsb-svbus.vhd)-kernel-ntloader-initrd-mem
debug 3
find --ignore-floppies --ignore-cd /EFI/grub/ntloader | set x=
echo x=%x%
find --ignore-floppies --ignore-cd --set-root /VHD/UEFIltsb-svbus.vhd
map --mem --top /VHD/UEFIltsb-svbus.vhd (hd)
uuid (hd-1,0)
kernel %x%/EFI/grub/ntloader uuid=%?_UUID%

initrd %x%/EFI/grub/initrd.lz1
pause pause1


前面截图出错的是一台联想笔记本,主板原生没有集成ntfs.efi驱动。


回复

使用道具 举报

79#
发表于 2021-2-6 17:41:48 | 只看该作者
发现个小问题,UEFI的WIN10,低设虚拟内存256M,XorBoot和WINNT6都能正常引导。G4E+NTLOADER设置
回复

使用道具 举报

80#
发表于 2021-2-6 17:43:20 | 只看该作者
(接上)
title 启动 Windows 系统
uuid (hd0,2)
kernel /efi/grub/ntloader uuid=%?_UUID% winload=\Windows\System32\winload.efi sysroot=\Windows
initrd /efi/grub/initrd.lz1

会提示要设虚拟内存。
回复

使用道具 举报

81#
 楼主| 发表于 2021-2-6 19:43:05 | 只看该作者
xiaohhl 发表于 2021-2-6 17:43
(接上)
title 启动 Windows 系统
uuid (hd0,2)

256MB内存启Win10,不是没事找事吗。
另外你这 winload 和 sysroot 都是默认路径,没必要加这两个参数。


回复

使用道具 举报

82#
发表于 2021-2-7 00:20:28 | 只看该作者
本帖最后由 lusir401 于 2021-2-7 00:32 编辑

我按照启动WINDOWS的方式,直接指定WINDOWS7X64所在分区,启动后过了Windows徽标后就蓝屏了。


uuid (hd0,2)
kernel /efi/grub/ntloader uuid=%?_UUID%
initrd /efi/grub//initrd.lz1

或者
uuid (hd0,0)
chainloader /efi/grub//ntloader initrd=/efi/grub//initrd.lz1 uuid=%?_UUID%

但是启动PE正常,Windows10X64也是艰难的进入桌面了。



回复

使用道具 举报

83#
发表于 2021-2-7 11:00:26 | 只看该作者
kernel命令启动wim/vhd,没有问题。
===================================================
chainloader命令启动,则问题较多:

1、在UEFI不支持NTFS时,chainloader后出现“不能打开simple文件系统”错误
如先加载ntfs_x64.efi驱动,再chainloader,则出现“不能获得initrd大小”错误。

2、无论UEFI是否支持NTFS,当ntloader与wim/vhd不在同一分区时,
chainloader后,出现“不能打开initrd.lz1”错误。

参考下图:







回复

使用道具 举报

84#
发表于 2021-2-7 11:35:16 | 只看该作者
本帖最后由 2011whp 于 2021-2-7 11:46 编辑
wuwuzz 发表于 2021-2-7 11:00
kernel命令启动wim/vhd,没有问题。
===================================================
chainloader ...

用户侧  菜单 排错

你的情况一:参数 uuid  file=  共同确定 wim文件位置( uuid 是 wim所在分区吗?)
你的情况二:initrd= 参数数 要用相对的 ,且,ntloader 和  initrd.lz1 在同一分区

(另注意下 : 参数顺序,按 官方的顺序,理论上来说 无所谓顺序)(直接,搜 winpe.wim  用标识 文件,又多了一个疑点)


ntloader 相当于,又进了另一个引导器,只能传递参数,分区对应关系变了,不是g4e的分区映射
回复

使用道具 举报

85#
发表于 2021-2-7 11:54:51 | 只看该作者
wuwuzz 发表于 2021-2-7 11:00
kernel命令启动wim/vhd,没有问题。
===================================================
chainloader ...



第三个图片,应该改成initrd=/efi/grub/initrd.lz1即可。就不会出错了!
482楼,http://wuyou.net/forum.php?mod=r ... &fromuid=298214


499楼,http://wuyou.net/forum.php?mod=r ... &fromuid=298214


501楼,http://wuyou.net/forum.php?mod=r ... &fromuid=298214



回复

使用道具 举报

86#
发表于 2021-2-7 12:16:31 | 只看该作者
lusir401 发表于 2021-2-7 00:20
我按照启动WINDOWS的方式,直接指定WINDOWS7X64所在分区,启动后过了Windows徽标后就蓝屏了。

可能是  win 要锁定  esp分区 ,然后找不到吧,

你的情况,应该是先装的win7,后装的win 10吧(你用bootice 再把win7 win10添加到bcd)

另你的 bootmgfw.efi 有多大,win10的 1.5MB,win7的要小些

win7 处在UEFI技术过渡期,预置到里面的uefi 可能有些问题
回复

使用道具 举报

87#
发表于 2021-2-7 12:47:10 | 只看该作者
liuzhaoyzz 发表于 2021-2-7 11:54
第三个图片,应该改成initrd=/efi/grub/initrd.lz1即可。就不会出错了!482楼,http://wuyou.net/for ...

原始菜单就是比葫芦画瓢抄你的,要错就是相同的错,嗯,把initrd前面的%x%去掉,
chainloader可以成功了。


回复

使用道具 举报

88#
发表于 2021-2-7 12:52:17 | 只看该作者
本帖最后由 wuwuzz 于 2021-2-7 12:59 编辑
2011whp 发表于 2021-2-7 11:35
用户侧  菜单 排错

你的情况一:参数 uuid  file=  共同确定 wim文件位置( uuid 是 wim所在分区吗? ...

跟标识文件、位置啥的没关系,例子中的内容都放在同一分区。
换个支持NTFS的UEFI,相同菜单就能成功。


initrd的问题,ntloader 用kernel命令加载,initrd有%x%也是可以的。
问题只是出在chainloader命令情形中。
回复

使用道具 举报

89#
发表于 2021-2-7 13:28:48 | 只看该作者
wuwuzz 发表于 2021-2-7 12:47
原始菜单就是比葫芦画瓢抄你的,要错就是相同的错,嗯,把initrd前面的%x%去掉,
chainloader可以成功了 ...

是两种情况都成功了吗?你的截图有同分区、不同分区的情况。
回复

使用道具 举报

90#
发表于 2021-2-7 13:33:36 | 只看该作者
本帖最后由 2011whp 于 2021-2-7 17:11 编辑
wuwuzz 发表于 2021-2-7 12:52
跟标识文件、位置啥的没关系,例子中的内容都放在同一分区。
换个支持NTFS的UEFI,相同菜单就能成功。
...

1   跟 ntfs驱动 没关系,ntloader之后的 initrd.lz1 内置的bootmgfw 能读 ntfs分区 (好几个案例,不出这个问题)
      你是不是把  ntloader  和  initrd.lz1 这两个文件  放到 ntfs分区了,这样的话,只能加上 load ntfs.efi了,因为 g4e 加的驱动是给bios加上了, 在后续引导器内仍有效(当然 这时,bios 原生支持ntfs更好了,加驱动也省了)


2.   kernel 后的 initrd 是命令  g4e 用后面的那个文件,当然要 g4e定位读取
     chainloader 只有第一个参数 ntloader 是 g4e 用的,后面全是参数,只作机械传递(initrd= 只是参数形式)


    ntloader 相当于,又进了另一个引导器,只能传递参数,分区对应关系变了,不是g4e的分区映射
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 09:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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