无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站Win To Go 极致利器(IXUNCIS固态U盘)祝贺无忧启动论坛创建21周年!
咪咕鱼:一个简洁清新可自定义的主页虚位以待广告联系 微信:wuyouceo QQ:184822951
楼主: wintoflash

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

    [复制链接]
发表于 2021-2-28 23:11:25 | 显示全部楼层
NTloader: BIOS/UEFI 下用 GRUB4DOS 启动 VHD/WIM
回复

使用道具 举报

发表于 2021-3-2 08:54:34 | 显示全部楼层
bios下测试ntloader启动win7.vhd失败,全屏蓝色(不是死机那种深蓝),瓦蓝色。没有任何提示,按键无反应。用C大的ntboot和您的grub2文件管理器启动该vhd正常。
回复

使用道具 举报

发表于 2021-3-2 10:03:36 | 显示全部楼层
牛笔,顶起!!!
回复

使用道具 举报

发表于 2021-3-31 08:15:55 | 显示全部楼层
谢谢分享!!!  谢谢分享!!!  谢谢分享!!!
回复

使用道具 举报

发表于 2021-3-31 17:04:37 | 显示全部楼层
谢谢分享,谢谢分享
回复

使用道具 举报

发表于 2021-4-5 07:47:38 | 显示全部楼层
移动硬盘,G4E第一启动,总出现bootmgrfw.efi找不到的错误
  1. title 启动 Win10 PE by ntloader
  2. uuid %?_BOOT%
  3. kernel /EFI/grub/ntloader uuid=%?_UUID% file=/BOOT/H3_10%arch%.WIM
  4. initrd /EFI/grub/initrd.lz1
复制代码

在前面有arch定义
  1. #判断32或64位
  2. calc *0x8272&0xff > nul ;; set arch=%@retval%
  3. if "%arch%"=="64" set IA=x64 || set IA=ia32
  4. if "%arch%"=="32" set arch=PE
复制代码
回复

使用道具 举报

发表于 2021-4-5 08:21:40 | 显示全部楼层
进命令行看了,没啥毛病
IMG_20210405_080031.jpg IMG_20210405_075600.jpg
回复

使用道具 举报

发表于 2021-4-5 08:47:20 | 显示全部楼层
将移动硬盘插入虚拟机中启动没毛病
usbefi.png Windows 10 x64-2021-04-05-08-36-36.png Windows 10 x64-2021-04-05-08-35-20.png
回复

使用道具 举报

发表于 2021-4-5 09:04:21 | 显示全部楼层

感谢楼主分享
回复

使用道具 举报

发表于 2021-4-5 09:05:16 | 显示全部楼层
又用G4D做一启ISO文件在虚拟机中进行测试,也不成功,这个不大好使啊。 Windows 10 x64-2021-04-05-09-00-58.png
回复

使用道具 举报

发表于 2021-4-5 11:01:25 | 显示全部楼层
hhh333 发表于 2021-4-5 09:05
又用G4D做一启ISO文件在虚拟机中进行测试,也不成功,这个不大好使啊。

这个只支持硬盘,不支持光盘
回复

使用道具 举报

发表于 2021-4-5 12:50:25 | 显示全部楼层
xbmc 发表于 2021-4-5 11:01
这个只支持硬盘,不支持光盘

上述移动硬盘找不到bootmgfw.efi又是哪么回事
回复

使用道具 举报

发表于 2021-4-5 18:02:34 | 显示全部楼层
xbmc 发表于 2021-4-5 13:45
不是找不到bootmgfw.efi,而是boot_params被分配到了内存0x3fffc000附近。部分uefi固件可能会向这个位置 ...

哦,用chainloder似乎没问题了,这年头跑路的确实多,债务危机严重啊
回复

使用道具 举报

发表于 2021-4-6 14:42:07 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-4-6 14:45 编辑
hhh333 发表于 2021-4-5 18:02
哦,用chainloder似乎没问题了,这年头跑路的确实多,债务危机严重啊

        你怕是误会了。w大跑路的意思,只是懒得开发了,哪里有什么债务危机。
回复

使用道具 举报

发表于 2021-4-6 15:23:05 | 显示全部楼层
liuzhaoyzz 发表于 2021-4-6 14:42
你怕是误会了。w大跑路的意思,只是懒得开发了,哪里有什么债务危机。

有的跑路是欠钱债,有的跑路是欠情债,W大可能是欠代码债
回复

使用道具 举报

发表于 2021-4-24 07:48:16 | 显示全部楼层
好东东支持了
回复

使用道具 举报

发表于 2021-5-1 21:46:13 来自手机 | 显示全部楼层
wintoflash 发表于 2021-2-2 18:36
看样子是 boot_params 被"黑恶势力"破坏了。目前暂时没有想好怎么解决,这个问题先放着吧。

怀疑是ntload要在原始启动的磁盘,在其他盘不行。
回复

使用道具 举报

发表于 2021-5-17 18:50:34 | 显示全部楼层
@ wintoflash
源代码缺少 bfd.h 头文件。
请教,initrd.lz1 是使用什么文件压缩、解压缩的?
回复

使用道具 举报

 楼主| 发表于 2021-5-17 19:52:08 | 显示全部楼层
2011yaya2007777 发表于 2021-5-17 18:50
@ wintoflash
源代码缺少 bfd.h 头文件。
请教,initrd.lz1 是使用什么文件压缩、解压缩的?
源代码缺少 bfd.h 头文件。

Ubuntu 的话需要安装 binutils-dev libiberty-dev 才能编译。这两个是efireloc需要的,用来生成PE格式文件。
请教,initrd.lz1 是使用什么文件压缩、解压缩的?

是自定义文件头+微软的LZNT1压缩,我在utils文件夹里面提供了一个python脚本,可以压缩或解压。
具体可以看这个脚本:https://github.com/a1ive/ntloader/blob/master/makepkg.sh
  1. find * | cpio -o -H newc > ../initrd.cpio
  2. cd ..
  3. python lznt1.py initrd.cpio initrd.lz1
复制代码


yaya 想接盘这个项目吗?我可以把权限给你。
回复

使用道具 举报

发表于 2021-5-17 20:05:39 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2021-5-17 20:16 编辑

我可不敢接盘。只是这几天测试启动wim文件,使用参数kernel函数,提示找不到efiboot....文件。使用chainloader函数,3个文件都在根目录,可以启动。如果两个外部命令在(3)/,wim文件在根目录,则提示找不到initrd.lz1文件。无法使用批处理尾随文件。由于你比较忙,只好自己硬着头皮研究一下。
回复

使用道具 举报

发表于 2021-5-17 20:12:27 | 显示全部楼层
wintoflash 发表于 2021-5-17 19:52
Ubuntu 的话需要安装 binutils-dev libiberty-dev 才能编译。这两个是efireloc需要的,用来生成PE格式 ...

老大,刚才试了一下32位EFI,启动不成功,出现Press any key to continue
  1. title 启动 Win8 PE by ntloader
  2. uuid %?_BOOT%
  3. #kernel /EFI/grub/ntloader uuid=%?_UUID% file=/BOOT/H3_8%arch%.WIM
  4. #initrd /EFI/grub/initrd.lz1
  5. chainloader /EFI/grub/ntloader initrd=/EFI/grub/initrd.lz1 uuid=%?_UUID% file=/BOOT/H3_8%arch%.WIM
复制代码
(此处%arch%=PE)
64位没问题,但看介绍32位与64位都是支持的。不清楚是怎么回事了
回复

使用道具 举报

 楼主| 发表于 2021-5-17 20:14:05 | 显示全部楼层
hhh333 发表于 2021-5-17 20:12
老大,刚才试了一下32位EFI,启动不成功,出现Press any key to continue
(此处%arch%=PE)
64位没问题 ...

chainloader只支持efi64。
kernel命令可以通吃bios/efi32/efi64。
回复

使用道具 举报

 楼主| 发表于 2021-5-17 20:14:49 | 显示全部楼层
2011yaya2007777 发表于 2021-5-17 20:05
我可不敢接盘。只是这几天测试启动wim文件,使用参数kernelq

kernelq是啥?
回复

使用道具 举报

发表于 2021-5-17 20:31:04 | 显示全部楼层
本帖最后由 hhh333 于 2021-5-17 20:46 编辑
wintoflash 发表于 2021-5-17 20:14
chainloader只支持efi64。
kernel命令可以通吃bios/efi32/efi64。

呵呵,确实,通过了,64位也通过了,原来的要用chainloader形式才能过,难道新的g4e进步了?

回复

使用道具 举报

发表于 2021-5-17 21:05:48 | 显示全部楼层
hhh333 发表于 2021-5-17 20:31
呵呵,确实,通过了,64位也通过了,原来的要用chainloader形式才能过,难道新的g4e进步了?

呵呵,又回到实机状态测试,还是老毛病,只能chainloader,不能kernel,奈何?
回复

使用道具 举报

发表于 2021-5-17 21:21:21 | 显示全部楼层
good
回复

使用道具 举报

发表于 2021-5-18 08:48:04 | 显示全部楼层
本帖最后由 mygamexxx 于 2021-5-18 08:50 编辑
hhh333 发表于 2021-5-17 21:05
呵呵,又回到实机状态测试,还是老毛病,只能chainloader,不能kernel,奈何?

我感觉是 NTloader 可能必须放在原始的root,才能用kernel。只是猜测,因为这样试了kernel没问题。
title 启动WIM格式WIN10PE-X64\n启动/img/10PE.WIM
find --set-root /img/10PE.WIM
uuid ()
find --ignore-floppies --ignore-cd --set-root /efi/ntload/ntloader
kernel /EFI/ntload/ntloader uuid=%?_UUID% file=/img/10pe.wim
initrd /EFI/ntload/initrd.lz1


我用这个菜单没问题,ntloader 放在原始的root盘。


回复

使用道具 举报

发表于 2021-5-18 09:41:23 | 显示全部楼层
mygamexxx 发表于 2021-5-18 08:48
我感觉是 NTloader 可能必须放在原始的root,才能用kernel。只是猜测,因为这样试了kernel没问题。
titl ...

我的本来WIM和这些工具都在一个分区啊,这个算不算原始root?
启动WIM我觉得还是wimboot灵活些,而且硬盘、光盘、网盘通吃,g4e中不知要如何使用
回复

使用道具 举报

发表于 2021-5-18 10:16:54 | 显示全部楼层
本帖最后由 mygamexxx 于 2021-5-18 13:23 编辑
hhh333 发表于 2021-5-18 09:41
我的本来WIM和这些工具都在一个分区啊,这个算不算原始root?
启动WIM我觉得还是wimboot灵活些,而且硬 ...

我试过ntloader放在G4E所在的启动分区(hd0,0),.wim 文件在(hd0,1),kernel正常。
G4E所在的启动分区(hd0,0),ntloader 和 .wim 文件在(hd0,1),重新测试了一下,kernel是正常的。
回复

使用道具 举报

 楼主| 发表于 2021-5-18 20:06:57 | 显示全部楼层
2011yaya2007777 发表于 2021-5-17 20:05
我可不敢接盘。只是这几天测试启动wim文件,使用参数kernel函数,提示找不到efiboot....文件。使用chainloa ...

chainloader 方式,initrd 要和 ntloader 位于同一 ESP 分区 (UEFI 固件可读的分区)。
使用参数kernel函数,提示找不到efiboot....文件

据我所知,出毛病的电脑,一般固件都把 initrd 和 boot_params 分配到 0x3fffc000 附近。你可以改一下 g4e,让它分配到低一些的位置,比如 0x2fffc000。
https://github.com/chenall/grub4 ... e2/builtins.c#L5913
  1. initrdefi_mem = allocate_pages_max (0x3fffffff, BYTES_TO_PAGES(size));
复制代码

https://github.com/chenall/grub4 ... e2/builtins.c#L6018
  1. linuxefi_params = allocate_pages_max (0x3fffffff, BYTES_TO_PAGES(16384));
复制代码


我的电脑上不会出现这个问题,所以我没法调试。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2022-7-6 18:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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