无忧启动论坛

标题: NTloader: BIOS/UEFI 下用 GRUB4DOS 启动 VHD/WIM [打印本页]

作者: wintoflash    时间: 2021-1-31 16:08
标题: NTloader: BIOS/UEFI 下用 GRUB4DOS 启动 VHD/WIM
本帖最后由 wintoflash 于 2023-6-19 20:30 编辑

适用范围:
BIOS, x64 UEFI, ia32 UEFI 均可使用。
支持 MBR 分区表主分区、GPT 分区表任意分区 (不支持 MBR 分区表逻辑分区)
支持 FAT, NTFS, exFAT 文件系统 (VHD 不能位于 FAT 分区,老版本 Windows VHD 只能位于 NTFS 分区)
文件路径最好是不带空格的英文字母/数字。带空格的话传递参数时用冒号":"代替空格。
命令行长度不得超过 511。
使用方法:
启动 Windows WIM/VHD
假设 WIM 或 VHD 位于 (hdx,y),路径为 /path/to/winpe.wim
  1. title Boot Windows NT6+ PE
  2. uuid (hdx,y)
  3. kernel /ntloader uuid=%?_UUID% file=/path/to/winpe.wim
  4. initrd /initrd.lz1
复制代码
  1. title Boot Windows NT6+ PE
  2. uuid (hdx,y)
  3. chainloader /ntloader initrd=/initrd.lz1 uuid=%?_UUID% file=/path/to/winpe.wim
复制代码

启动 Windows 系统
假设系统文件夹位于 (hdx,y)
  1. title Boot Windows NT6+ PE
  2. uuid (hdx,y)
  3. kernel /ntloader uuid=%?_UUID%
  4. initrd /initrd.lz1
复制代码
  1. title Boot Windows NT6+ PE
  2. uuid (hdx,y)
  3. chainloader /ntloader initrd=/initrd.lz1 uuid=%?_UUID%
复制代码

命令行选项:
  1. uuid=%?_UUID%
复制代码

指定 文件所在分区文件系统 UUID。
  1. file=/xxx.vhd
复制代码

指定 VHD / WIM 文件路径。空格用冒号 ":" 代替。
  1. testmode=1
复制代码

启用测试模式。
  1. hires=1
复制代码

强制使用最高分辨率。
  1. pae=Enable|Disable|Default
复制代码

配置 PAE。
  1. nx=OptIn|OptOut|AlwaysOff|AlwaysOn
复制代码

配置 DEP。
  1. loadopt=XXX
复制代码

设置 Windows 加载选项。
  1. winload=/Windows/System32/winload.efi
复制代码

指定 winload.exe/winload.efi 的路径。
  1. sysroot=/Windows
复制代码

指定 Windows 系统根目录。
  1. quite
复制代码

不显示调试信息。
  1. pause
复制代码

启动过程中暂停,以便记录调试信息。
下载:
ntloader.zip (2.92 MB, 下载次数: 2279)
源码:
https://github.com/grub4dos/ntloader (许可证:GPLv2+)
参考:
ipxe wimboot https://github.com/ipxe/wimboot
lznt1 压缩 https://github.com/you0708/lznt1
Linux/x86 Boot Protocol https://www.kernel.org/doc/html/latest/x86/boot.html
GRUB https://github.com/a1ive/grub
作者: sairen139    时间: 2021-1-31 16:19
非常好,支持W大!
作者: menhm    时间: 2021-1-31 16:22
正在找BIOS下用 GRUB4DOS 启动 WIM 。。。。。太好了。。。。
作者: 2011yaya2007777    时间: 2021-1-31 16:39
强大
作者: oym2016    时间: 2021-1-31 16:57
1月27日版 在Grub2 中正常引导 WIM和VHDx
menuentry "Windows 10 PE ntloader"    --class recovery {
     probe -s a -u (hd0,gpt1)
     linuxefi /ntloader uuid=$a file=/Sources/boot.wim
     initrdefi /initrd.lz
}   
用今天的替换后 均引导失败
menuentry "Windows 10 PE ntloader"    --class recovery {
     probe -s a -u (hd0,gpt1)
     linuxefi /ntloader uuid=$a file=/Sources/boot.wim
     initrdefi /initrd.lz1
}   

作者: wintoflash    时间: 2021-1-31 17:00
oym2016 发表于 2021-1-31 16:57
1月27日版 在Grub2 中正常引导 WIM和VHDx
menuentry "Windows 10 PE ntloader"    --class recovery {
  ...

grub2没必要用这个。直接用ntboot命令就行了。
作者: liuzhaoyzz    时间: 2021-1-31 17:14
wintoflash 发表于 2021-1-31 17:00
grub2没必要用这个。直接用ntboot命令就行了。

        看意思现在是推荐采用kernel语句?与chainloader语句有没有区别?
作者: acerken    时间: 2021-1-31 18:18
感谢分享,研究研究
作者: wintoflash    时间: 2021-1-31 18:31
oym2016 发表于 2021-1-31 16:57
1月27日版 在Grub2 中正常引导 WIM和VHDx
menuentry "Windows 10 PE ntloader"    --class recovery {
  ...

重新上传了文件,应该修复了这个问题,请重新下载测试。
作者: hilsonma    时间: 2021-1-31 19:11
liuzhaoyzz 发表于 2021-1-31 17:14
看意思现在是推荐采用kernel语句?与chainloader语句有没有区别?

我想是这样的:ntloader虽然叫loader,但其实是一个core.img,所以用kernel,如果这个core.img前面再加一个boot.img,那样才是用chainloader.
作者: wintoflash    时间: 2021-1-31 19:17
本帖最后由 wintoflash 于 2021-1-31 19:18 编辑
liuzhaoyzz 发表于 2021-1-31 17:14
看意思现在是推荐采用kernel语句?与chainloader语句有没有区别?

它有两个入口,既可以把它当作linux内核,也可以把它当作efi应用程序。
正常玩法就是从前面的口进 (linuxefi),initrd 是由启动管理器加载好的。
非得从后面的口进(chainloader)也行,只不过需要把initrd的路径告诉它,让它自己加载 initrd。

linuxefi 的另一好处是同时支持 x64 EFI 和 ia32 EFI。
作者: 14928806    时间: 2021-1-31 19:35
感谢分享
作者: 叮叮咚咚    时间: 2021-1-31 19:43
wintoflash 发表于 2021-1-31 19:17
它有两个入口,既可以把它当作linux内核,也可以把它当作efi应用程序。
正常玩法就是从前面的口进 (linu ...

也就是说,使用linuxefi可以启动ia32 efi的Linux系统?32位Windows可以启动吗?
作者: wintoflash    时间: 2021-1-31 20:14
叮叮咚咚 发表于 2021-1-31 19:43
也就是说,使用linuxefi可以启动ia32 efi的Linux系统?32位Windows可以启动吗?

不是
作者: 18958925900    时间: 2021-1-31 20:17
学习了。谢谢
作者: liuzhaoyzz    时间: 2021-1-31 22:00
本帖最后由 liuzhaoyzz 于 2021-1-31 22:22 编辑

用刚才下载的ntloader两个文件,搭配2021-1-22日的g4e,kernel ntloader启动基于svbus启动的vhd-ramos失败啊。
title WIN7X64-SVBUS (/VHD/SX70211.vhd)-kernel ntloader-1
debug 3
find --ignore-floppies --ignore-cd /EFI/grub/ntloader | set x=
echo x=%x%
find --ignore-floppies --ignore-cd --set-root /VHD/SX70211.vhd
map --mem --top /VHD/SX70211.vhd (hd)
uuid (hd-1,0)
kernel %x%/EFI/grub/ntloader uuid=%?_UUID%
initrd %x%/EFI/grub/initrd.lz1
pause pause1


等我用手机上传截图

IMG_20210131_215627.jpg (39.73 KB, 下载次数: 450)

IMG_20210131_215627.jpg

IMG_20210131_215637.jpg (53.63 KB, 下载次数: 454)

IMG_20210131_215637.jpg

作者: liuzhaoyzz    时间: 2021-1-31 22:21
本帖最后由 liuzhaoyzz 于 2021-1-31 22:22 编辑

我尝试直接启动vhd也失败,菜单如下,菜单有没有问题?
title WIN7X64-SVBUS (/VHD/SX70211.vhd)-kernel ntloader-3
debug 3
find --ignore-floppies --ignore-cd /EFI/grub/ntloader | set x=
echo x=%x%
find --ignore-floppies --ignore-cd --set-root /VHD/SX70211.vhd
uuid ()
kernel %x%/EFI/grub/ntloader uuid=%?_UUID% file=/VHD/SX70211.vhd
initrd %x%/EFI/grub/initrd.lz1
pause pause1


等我上传截图。

IMG_20210131_215714.jpg (32.89 KB, 下载次数: 448)

IMG_20210131_215714.jpg

IMG_20210131_215720.jpg (55.26 KB, 下载次数: 435)

IMG_20210131_215720.jpg

作者: wintoflash    时间: 2021-2-1 09:01
liuzhaoyzz 发表于 2021-1-31 22:21
我尝试直接启动vhd也失败,菜单如下,菜单有没有问题?
title WIN7X64-SVBUS (/VHD/SX70211.vhd)-kernel n ...

GRUB2 下linuxefi 启动试试。
作者: liuzhaoyzz    时间: 2021-2-1 09:57
本帖最后由 liuzhaoyzz 于 2021-2-1 09:59 编辑
wintoflash 发表于 2021-2-1 09:01
GRUB2 下linuxefi 启动试试。

刚才用uefi-grub2试了,结果一样。
uefi-grub2我只尝试了直接启动sx70211.vhd,没有尝试map --mem --rt这种,因为grub2好像是直接启动vd0的,能用probe -u (vd0,1) -s uuid获取仿真内存盘的uuid吗?我不知道。

menuentry "SX70211.vhd-svbus-ntloader" "/VHD/SX70211.vhd" {
search -n -s x -f /EFI/grub/ntloader
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
}


上面的菜单写的对吗?

01093952.png (6.56 KB, 下载次数: 440)

01093952.png

01094038.png (8.24 KB, 下载次数: 434)

01094038.png

作者: liuzhaoyzz    时间: 2021-2-1 10:02
哦,另外说下,g4e搭配chainloader ntloader 启动vhd、仿真磁盘,vdf都可以成功。
作者: 18958925900    时间: 2021-2-1 12:39
这个很好-不用管设么efi了。
作者: liuzhaoyzz    时间: 2021-2-1 17:15
本帖最后由 liuzhaoyzz 于 2021-2-1 17:16 编辑
wintoflash 发表于 2021-2-1 16:11
试试:


title WIN7X64-SVBUS (/VHD/SX70211.vhd)-kernel ntloader-1
debug 3
find --ignore-floppies --ignore-cd /EFI/grub/ntloader | set x=
echo x=%x%
find --ignore-floppies --ignore-cd --set-root /VHD/SX70211.vhd
map --mem --top /VHD/SX70211.vhd (hd)
uuid (hd-1,0)
kernel %x%/EFI/grub/ntloader uuid=%?_UUID%
initrd %x%/EFI/grub/initrd.lz1
pause pause1

启动vhd-ramos失败,等我上传截图

IMG_20210201_171036.jpg (40.65 KB, 下载次数: 443)

IMG_20210201_171036.jpg

IMG_20210201_171046.jpg (54.82 KB, 下载次数: 549)

IMG_20210201_171046.jpg

作者: liuzhaoyzz    时间: 2021-2-1 17:15
本帖最后由 liuzhaoyzz 于 2021-2-1 17:17 编辑
wintoflash 发表于 2021-2-1 16:11
试试:


title WIN7X64-SVBUS (/VHD/SX70211.vhd)-kernel ntloader-3
debug 3
find --ignore-floppies --ignore-cd /EFI/grub/ntloader | set x=
echo x=%x%
find --ignore-floppies --ignore-cd --set-root /VHD/SX70211.vhd
uuid ()
kernel %x%/EFI/grub/ntloader uuid=%?_UUID% file=/VHD/SX70211.vhd
initrd %x%/EFI/grub/initrd.lz1
pause pause1

直接启动vhd失败,等我上传截图

IMG_20210201_171117.jpg (30.05 KB, 下载次数: 432)

IMG_20210201_171117.jpg

IMG_20210201_171126.jpg (47.66 KB, 下载次数: 459)

IMG_20210201_171126.jpg

作者: 2011whp    时间: 2021-2-1 18:43
@liuzhaoyzz
为什么,我复现不了你的问题呢
我这边能启动啊



作者: wintoflash    时间: 2021-2-1 18:48
2011whp 发表于 2021-2-1 18:43
@liuzhaoyzz
为什么,我复现不了你的问题呢
我这边能启动啊

是的,他这个现象非常离谱,我到现在还没有想出来可能的原因。

作者: gnuxwy    时间: 2021-2-1 18:49
W大牛比,又出好货了。。。
下载回来抽空试玩下。。。

作者: chenall    时间: 2021-2-1 19:34
这个强,应该ipxe也能用吧
作者: liuzhaoyzz    时间: 2021-2-1 19:40
wintoflash 发表于 2021-2-1 18:48
是的,他这个现象非常离谱,我到现在还没有想出来可能的原因。

        用2021-1-31的g4e搭配这个最新版,直接启动vhd还是不行

IMG_20210201_193901.jpg (28.34 KB, 下载次数: 407)

IMG_20210201_193901.jpg

IMG_20210201_193912.jpg (51.21 KB, 下载次数: 432)

IMG_20210201_193912.jpg

作者: 2011whp    时间: 2021-2-1 19:49
是奇怪  @liuzhaoyzz

调调 g4e 分辨率,比如 1024(分辨率 经常成迷)
我的这边启动时,ntloader  把屏幕 清的  干净

记得,g4e刚发布时,我这机器,800分辨率 启动不了shell,  
作者: liuzhaoyzz    时间: 2021-2-1 22:20
2011whp 发表于 2021-2-1 19:49
是奇怪  @liuzhaoyzz

调调 g4e 分辨率,比如 1024(分辨率 经常成迷)

跟分辨率没什么关系吧。。。如果分辨率不对,g4e早就报错了。我的分辨率一直没动,没有关注过那些语句。
作者: wintoflash    时间: 2021-2-1 22:25
liuzhaoyzz 发表于 2021-2-1 22:20
跟分辨率没什么关系吧。。。如果分辨率不对,g4e早就报错了。我的分辨率一直没动,没有关注过那些语句。

应该和栈有关。明天改下试试。
作者: 18958925900    时间: 2021-2-1 22:40
给力,学习了。
作者: liuzhaoyzz    时间: 2021-2-1 22:42
wintoflash 发表于 2021-2-1 22:25
应该和栈有关。明天改下试试。

大神辛苦了,这个不着急,慢慢来吧,现在已经有grub2-ntboot保底了。
作者: wintoflash    时间: 2021-2-2 10:44
chenall 发表于 2021-2-1 19:34
这个强,应该ipxe也能用吧

ipxe没办法获得本地磁盘某分区的uuid吧。
作者: liuzhaoyzz    时间: 2021-2-2 12:01
wintoflash 发表于 2021-2-2 10:28
试试:

回去后试试看
作者: liuzhaoyzz    时间: 2021-2-2 13:42
wintoflash 发表于 2021-2-2 10:44
ipxe没办法获得本地磁盘某分区的uuid吧。

直接启动vhd,还是失败了。

IMG_20210202_134055.jpg (31.42 KB, 下载次数: 265)

IMG_20210202_134055.jpg

IMG_20210202_134103.jpg (46.47 KB, 下载次数: 268)

IMG_20210202_134103.jpg

作者: liuzhaoyzz    时间: 2021-2-2 15:14
wintoflash 发表于 2021-2-2 15:05
希望这个能打印点不一样的东西。

是不是其他地方有问题,我说的是用户侧,不是开发侧的问题?我这边是否有哪里不对的地方,比如菜单什么的?但我不知道倒底该怎么改进或者尝试。启动vhd还是不行。

IMG_20210202_151209.jpg (31.87 KB, 下载次数: 295)

IMG_20210202_151209.jpg

IMG_20210202_151221.jpg (55.42 KB, 下载次数: 300)

IMG_20210202_151221.jpg

作者: liuzhaoyzz    时间: 2021-2-2 16:52
wintoflash 发表于 2021-2-2 16:46

还失败

IMG_20210202_165153.jpg (34.23 KB, 下载次数: 284)

IMG_20210202_165153.jpg

IMG_20210202_165204.jpg (55.51 KB, 下载次数: 292)

IMG_20210202_165204.jpg

作者: liuzhaoyzz    时间: 2021-2-2 17:43
wintoflash 发表于 2021-2-2 17:19

还是不行

IMG_20210202_174228.jpg (31.14 KB, 下载次数: 285)

IMG_20210202_174228.jpg

IMG_20210202_174237.jpg (51.68 KB, 下载次数: 276)

IMG_20210202_174237.jpg

作者: wbs1997    时间: 2021-2-2 17:51

非常好,支持W大!
作者: 2011whp    时间: 2021-2-2 17:56
做了个 差分的 vhd系统,

表示  ntloader 能启动  ,也能回写进去
( bootmgfw 是支持差分的,分享下,只是本人没试过)
作者: 2011whp    时间: 2021-2-2 18:06
本帖最后由 2011whp 于 2021-2-2 18:09 编辑

@liuzhaoyzz

密集试验啊,开始怀疑机器本身了

能不能启动 深度livecd    或者你这台机有启动过linux的经历的话,就不试了附 :见示例菜单  第四项
http://bbs.wuyou.net/forum.php?m ... 1257&fromuid=413782

作者: 2048    时间: 2021-2-2 18:13
谢谢大佬的分享
作者: wintoflash    时间: 2021-2-2 18:36
liuzhaoyzz 发表于 2021-2-2 17:43
还是不行

看样子是 boot_params 被"黑恶势力"破坏了。目前暂时没有想好怎么解决,这个问题先放着吧。


作者: wintoflash    时间: 2021-2-2 19:25
v1.0.3 版本
支持的命令行长度从 255 改为 511
支持 BCD 解析,允许修改 winload 路径等参数。
支持 MBR 逻辑分区 (最多支持 32 个分区)。
支持在启动阶段伪造安全启动状态 (一般情况下不要使用)。

作者: liuzhaoyzz    时间: 2021-2-2 19:42
wintoflash 发表于 2021-2-2 18:36
看样子是 boot_params 被"黑恶势力"破坏了。目前暂时没有想好怎么解决,这个问题先放着吧。

      好奇地问下,为啥chainloader-ntloader-initrd就可以呢?同样是调用ntloader啊。  
作者: liuzhaoyzz    时间: 2021-2-2 19:47
2011whp 发表于 2021-2-2 18:06
@liuzhaoyzz

密集试验啊,开始怀疑机器本身了

        这与深度livecd没关系啊,我下载的深度livecd启动没问题。
作者: 2011whp    时间: 2021-2-2 19:56
按linux启动过程,第一步就是 分类 解析参数,

那个 no bootmgfw 的错误,我文件名 写错后  也出现过(或 启动分区时,多了指文件的参数)  

那这就成迷了
作者: chenall    时间: 2021-2-3 10:15
可以支持NT5(xp)吗?
作者: wintoflash    时间: 2021-2-3 10:30
chenall 发表于 2021-2-3 10:15
可以支持NT5(xp)吗?

不支持。BIOS 下的虚拟盘只有 bootmgr.exe 可以读取,不是像 GRUB4DOS 那样通用的 int13h 仿真磁盘。
作者: wintoflash    时间: 2021-2-3 11:12
chenall 发表于 2021-2-3 10:15
可以支持NT5(xp)吗?

启动 bootmgr.exe 是通过解析pe文件,找到入口,然后跳转进去。入口是这样的:
pe_entry (struct bootapp_descriptor *bootapp)
bootapp_descriptor 里面包含了 memory map,启动磁盘的签名和分区偏移,callback 函数用来调用 BIOS 中断 等东西。
不知道 NT5 的 setupldr.exe / osloader.exe 有没有类似的东西?
作者: 2011whp    时间: 2021-2-3 11:56
本帖最后由 2011whp 于 2021-2-3 17:33 编辑

这个,不是个别现象吧,现在是一进bootmgfw就出现四格窗了?



从esp分区 提取出来,自已 新建的bcd,菜单 是  原来的 黑白的菜单了,具体原因,见下面楼层

bootmgfw.efi  文件 修改日期为2020-12-11


作者: wintoflash    时间: 2021-2-3 15:35
2011whp 发表于 2021-2-3 11:56
这个,不是个别现象吧,现在是一进bootmgfw就出现四格窗了?

你是不是开了这个选项:


作者: 2011whp    时间: 2021-2-3 17:14
本帖最后由 2011whp 于 2021-2-3 17:38 编辑
wintoflash 发表于 2021-2-3 15:35
你是不是开了这个选项:

果然是 metro 选 项的作用 ,

以前bcd组织 wim 没出现过这事,

是bcd里的分区 启动  勾上 metro 以后,会提前出现 四格窗 ( 难道 四格窗的 意思 是开始用  系统分区windows 目录下的资源了)
作者: xiaohhl    时间: 2021-2-4 09:04
G4E下winload=\\Windows\\System32\\winload.efi和sysroot=\\Windows的双斜杠要改成单斜杠才能用——小白
作者: xiaohhl    时间: 2021-2-4 09:06
liuzhaoyzz 发表于 2021-2-1 10:02
哦,另外说下,g4e搭配chainloader ntloader 启动vhd、仿真磁盘,vdf都可以成功。

搭配initrd ntloader能成功吗?
作者: liuzhaoyzz    时间: 2021-2-4 10:55
xiaohhl 发表于 2021-2-4 09:06
搭配initrd ntloader能成功吗?

        答主请听题!
作者: 2011whp    时间: 2021-2-4 13:36
liuzhaoyzz 发表于 2021-2-4 10:55
答主请听题!

B75 主板附意  不能 initrd ntloader


b360主板  表示  能  initrd ntloader
作者: wintoflash    时间: 2021-2-4 15:43
2011whp 发表于 2021-2-3 17:14
果然是 metro 选 项的作用 ,

以前bcd组织 wim 没出现过这事,

显示 metro 界面的时候 Windows 已经加载一部分了,选择其他的启动选项,实际上是重启之后再进入的。

B75 主板附意  不能 initrd ntloader


你也遇到 liuzhaoyzz 电脑上那样的问题了?
作者: wintoflash    时间: 2021-2-4 15:53
v1.0.4 版本
支持使用自定义启动 logo (UEFI Win8+)。(实体机上图片位置暂时有点问题)
支持 winload、sysroot 路径中的斜杠 ('/') 自动转换成反斜杠 ('\')
作者: wintoflash    时间: 2021-2-4 15:55
xiaohhl 发表于 2021-2-4 09:04
G4E下winload=\\Windows\\System32\\winload.efi和sysroot=\\Windows的双斜杠要改成单斜杠才能用——小白

现在可以直接用斜杠了,内部自动转换成反斜杠
winload=/Windows/System32/winload.efi
作者: liuzhaoyzz    时间: 2021-2-4 18:36
2011whp 发表于 2021-2-4 13:36
B75 主板附意  不能 initrd ntloader



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

作者: 2011whp    时间: 2021-2-4 19:20
本帖最后由 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方式,没人报错)


作者: 2011whp    时间: 2021-2-4 20:49
本帖最后由 2011whp 于 2021-2-5 18:39 编辑
wintoflash 发表于 2021-2-4 20:05
试试这个打印的调试信息

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


作者: liuzhaoyzz    时间: 2021-2-4 22:24
本帖最后由 liuzhaoyzz 于 2021-2-5 08:19 编辑
wintoflash 发表于 2021-2-4 20:05
试试这个打印的调试信息

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

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

04221827.png

作者: liuzhaoyzz    时间: 2021-2-5 08:21
2011whp 发表于 2021-2-4 19:20
试验的g4e菜单
debug 3
find --ignore-floppies --ignore-cd /ntloader | set x=

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


作者: liuzhaoyzz    时间: 2021-2-5 10:18
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。
作者: liuzhaoyzz    时间: 2021-2-5 10:29
wintoflash 发表于 2021-2-5 10:20

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

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

05102621.png

作者: 2011whp    时间: 2021-2-5 11:32
本帖最后由 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 与这个没关系
作者: wintoflash    时间: 2021-2-5 14:59
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 的内存。



作者: liuzhaoyzz    时间: 2021-2-5 15:51
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窗口敲命令,我有点发蒙。

作者: wintoflash    时间: 2021-2-5 16:06
本帖最后由 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 命令行那里,随便输入什么都行,没必要那么认真,那不是重点。
作者: liuzhaoyzz    时间: 2021-2-5 17:02
wintoflash 发表于 2021-2-5 16:06
当然有办法暂停,read和getkey都可以。
但是调试的时候不要这样用。必须手动逐条执行,以便观察情况。
...

        哦,getkey这个命令,你好像在哪里说过,我又忘了。这些命令记不住。
作者: liuzhaoyzz    时间: 2021-2-5 17:20
wintoflash 发表于 2021-2-5 16:06
当然有办法暂停,read和getkey都可以。
但是调试的时候不要这样用。必须手动逐条执行,以便观察情况。
...

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

直接上图。

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

05171442.png

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

05171620.png

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

05171626.png

作者: wintoflash    时间: 2021-2-5 17:35
liuzhaoyzz 发表于 2021-2-5 17:20
上面的菜单,我逐条输入命令,本来CTRL+ALT+F12,我按错了,按成了CTRL+ALT+DELETE,白搞了!

直接上 ...

老哥,你这内存地址都没敲对。。。
作者: dkzzlf    时间: 2021-2-5 17:38
感谢楼主分享
作者: liuzhaoyzz    时间: 2021-2-5 20:01
本帖最后由 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, 下载次数: 307)

IMG_20210205_200040.jpg

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

IMG_20210205_200013.jpg

作者: liuzhaoyzz    时间: 2021-2-5 21:30
本帖最后由 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驱动。



作者: xiaohhl    时间: 2021-2-6 17:41
发现个小问题,UEFI的WIN10,低设虚拟内存256M,XorBoot和WINNT6都能正常引导。G4E+NTLOADER设置
作者: xiaohhl    时间: 2021-2-6 17:43
(接上)
title 启动 Windows 系统
uuid (hd0,2)
kernel /efi/grub/ntloader uuid=%?_UUID% winload=\Windows\System32\winload.efi sysroot=\Windows
initrd /efi/grub/initrd.lz1

会提示要设虚拟内存。
作者: wintoflash    时间: 2021-2-6 19:43
xiaohhl 发表于 2021-2-6 17:43
(接上)
title 启动 Windows 系统
uuid (hd0,2)

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



作者: lusir401    时间: 2021-2-7 00:20
本帖最后由 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也是艰难的进入桌面了。




作者: wuwuzz    时间: 2021-2-7 11:00
kernel命令启动wim/vhd,没有问题。
===================================================
chainloader命令启动,则问题较多:

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

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

参考下图:








作者: 2011whp    时间: 2021-2-7 11:35
本帖最后由 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的分区映射

作者: liuzhaoyzz    时间: 2021-2-7 11:54
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




作者: 2011whp    时间: 2021-2-7 12:16
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 可能有些问题
作者: wuwuzz    时间: 2021-2-7 12:47
liuzhaoyzz 发表于 2021-2-7 11:54
第三个图片,应该改成initrd=/efi/grub/initrd.lz1即可。就不会出错了!482楼,http://wuyou.net/for ...

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



作者: wuwuzz    时间: 2021-2-7 12:52
本帖最后由 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命令情形中。
作者: liuzhaoyzz    时间: 2021-2-7 13:28
wuwuzz 发表于 2021-2-7 12:47
原始菜单就是比葫芦画瓢抄你的,要错就是相同的错,嗯,把initrd前面的%x%去掉,
chainloader可以成功了 ...

是两种情况都成功了吗?你的截图有同分区、不同分区的情况。
作者: 2011whp    时间: 2021-2-7 13:33
本帖最后由 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的分区映射

作者: wuwuzz    时间: 2021-2-7 14:52
liuzhaoyzz 发表于 2021-2-7 13:28
是两种情况都成功了吗?你的截图有同分区、不同分区的情况。

ntloader/initrd.lz1、wim/vhd都放到一个分区里,ntloader/initrd.lz1就没必要再指定%x%了吧?

实验了一下,和多分区一样,chainloader的话,initrd前的%x%要去掉才行。




作者: wuwuzz    时间: 2021-2-7 14:56
本帖最后由 wuwuzz 于 2021-2-7 15:51 编辑
2011whp 发表于 2021-2-7 13:33
1   跟 ntfs驱动 没关系,ntloader内部能读 ntfs分区 (好几个案例,不出这个问题)
      你是不是把   ...

双分区的话,ntloader/initrd.lz1放在FAT,像WIM/VHD这样的大文件才放NTFS上。

单分区,还没细分,待测试。


作者: dos时代菜鸟    时间: 2021-2-7 15:19
测试 ,g4d 下 ntloader 可以启动 wim 和 本地系统,硬盘是 sata组的 raid0,可以跨区引导启动,

如果 vhd 是经由 具有 wimboot 特性的 wim 做的指针,似乎就不能被启动了,还是需要另外设置些什么?
这种用 wimboot 特性的 wim 做的 vhd 指针,来启动 vhd 系统的方案,多出现在 较早期的 Win10 平板和 固态硬盘上。
作者: wintoflash    时间: 2021-2-7 15:52
lusir401 发表于 2021-2-7 00:20
我按照启动WINDOWS的方式,直接指定WINDOWS7X64所在分区,启动后过了Windows徽标后就蓝屏了。

win7 UEFI 要用特殊的 bootmgfw.efi 文件,这个还没有搞。
作者: wintoflash    时间: 2021-2-7 15:56
wuwuzz 发表于 2021-2-7 11:00
kernel命令启动wim/vhd,没有问题。
===================================================
chainloader ...

ntloader 本身不支持任何文件系统,它只能通过 UEFI 固件提供的 Simple File System Protocol 读 initrd 文件。
所以把它当 EFI 应用程序启动时,它和 initrd 文件必须放在同一分区,且要保证 UEFI 固件支持这个分区。
如果把它当 linux 内核用,那么 initrd 是由 grub4dos 加载到内存的,所以两个文件无论放在哪都行。
作者: wintoflash    时间: 2021-2-7 15:57
dos时代菜鸟 发表于 2021-2-7 15:19
测试 ,g4d 下 ntloader 可以启动 wim 和 本地系统,硬盘是 sata组的 raid0,可以跨区引导启动,

如果 v ...

能不能发个启这种系统的 bcd 文件,我研究一下。
如果有个体积小的vhd能测试一下,那就更好了。
作者: liuzhaoyzz    时间: 2021-2-7 16:06
wuwuzz 发表于 2021-2-7 14:52
ntloader/initrd.lz1、wim/vhd都放到一个分区里,ntloader/initrd.lz1就没必要再指定%x%了吧?

实验了 ...

看wintoflash大神的例子里面说的,chainloader+ntloader+initrd=/efi/grub/initrd.lz1,initrd=后面永远不能加分区号。

kernel+ntloader+initrd方案,initrd后面最好加上分区号。

        

作者: liuzhaoyzz    时间: 2021-2-7 16:14
wintoflash 发表于 2021-2-7 15:56
ntloader 本身不支持任何文件系统,它只能通过 UEFI 固件提供的 Simple File System Protocol 读 initrd  ...

从这段话的意思来看:
1、chainloader+ntloader+initrd=/efi/grub/initrd.lz1方案中,ntloader和initrd.lz1一般地都要放在FAT32/ESP分区,部分主板内置了ntfs.efi驱动的,可能可以放在NTFS分区。

2、kernel+ntloader+initrd方案,ntloader和initrd.lz1似乎可以随意放置,只要指明他所在的分区号即可,比如(hd1,0)这样子的。

综上所述,kernel+ntloader+initrd方案似乎兼容性更好。
        

作者: dos时代菜鸟    时间: 2021-2-7 16:15
wintoflash 发表于 2021-2-7 15:57
能不能发个启这种系统的 bcd 文件,我研究一下。
如果有个体积小的vhd能测试一下,那就更好了。

G.7z (19.84 KB, 下载次数: 14)

感觉 bcd 设置上 跟正常的 vhd 没啥区别,但是 wim + vhd 所在的分区上 可能有标记,标记 很可能是在 system volume information 文件夹中的 某个文件里。
因为 Wim+ vhd 太大了,没法上传,只能先把 bcd 给你看看了。



作者: dos时代菜鸟    时间: 2021-2-7 16:42
用这个 启动 本地系统 win10  不支持休眠 么?




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