无忧启动论坛

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

世界上第一个基于primo单驱动+grub2/g4e制作的WIN7 8.1 10UEFI-RAMOS单镜像制作成功

    [复制链接]
481#
发表于 2021-1-31 09:25:44 | 只看该作者
liuzhaoyzz 发表于 2021-1-31 08:49
换用了:grub4dos-for_UEFI-2021-01-22,搭配你上面的语句,一把成功!g4e成功启动基于svbus驱动的vhd。
...
grub2怎么测试,我没看明白。

既然没问题,那就不用测试了。

你还是没有理解ntboot的作用啊。
ntboot 就三个功能:启动系统, 启动 VHD, 启动 WIM。
启动 VHD 功能和 bootmgfw.efi 直接启 VHD 是一样的,不是你们所说的 "内存系统"。
你在这里需要的是启动虚拟盘上的系统,所以要向 ntloader 传递虚拟盘上Windows所在分区的uuid。
ntboot启动系统,是直接加载winload,而不需要ESP分区,所以就不需要ntfs驱动了。

点评

你上面让我测试的,不是ntboot啊,是ntloader啊,语法也不同,我就搞迷糊了,grub2-ntboot远离我大概知道的。  详情 回复 发表于 2021-1-31 11:04
回复

使用道具 举报

482#
发表于 2021-1-31 09:45:53 | 只看该作者
本帖最后由 2011whp 于 2021-1-31 10:07 编辑

制作了个vhd:三杰LTSB   7GB vhd
     1.  winntsetup做的,挂svbus驱动
      2.  在主系统的bcd  添加 vhd启动项 安装完成

g4e2021-1-28 试验一:能启动
uuid (hd3,2)
kernel /ntloader uuid=%?% file=/winsvbus.vhd
initrd /initrd.lz1

g4e2021-1-28 试验二: 随然蓝屏了,估计是 svbus有问题
map --top (hd3,2)/winsvbus.vhd (hd)
uuid (hd-1,0)
kernel /ntloader uuid=%?%
initrd /initrd.lz1



题外问题:
    1.  这个vhd  用bcd启动时,总得重启一次,第二次不出bcd菜单,直接启动了
     2.  svbus朱玛   用 winntsetup 挂上,有没有安装成功的,(我一般是 dism++)
    3.  ntloader 停不下来,你们是么拍照的,难道是抢拍
    4.  那个 ?变量,是不是上一条命令的 返回结果,如果 UUID 命令后 插一条命令,在kernel前,是不是必然出错
     5.  折腾没动力了,附蓝屏拍照,看是不是 svbus驱动问题,道是出现过bcd菜单,




回复

使用道具 举报

483#
发表于 2021-1-31 10:12:51 | 只看该作者
@wintoflash

chainloader %x%/EFI/grub/ntloader uuid=%?_UUID% initrd=/EFI/grub/initrd.lz1

%?_UUID% 和 %?%  有什么不同  ,前者更通用

意思是:两个出口都可以?(chainloader  和 kernel )
回复

使用道具 举报

484#
发表于 2021-1-31 10:33:26 | 只看该作者
ntboot作用就 找设备(uuid关联)中的windows系统,自动写BCD,启动
                   找设备(uuid关联)中的vhd/wim文件,自动写BCD,启动
应该不用添加、修改什么BCD了呃,
回复

使用道具 举报

485#
 楼主| 发表于 2021-1-31 11:04:29 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-31 13:04 编辑
wintoflash 发表于 2021-1-31 09:25
既然没问题,那就不用测试了。

你还是没有理解ntboot的作用啊。

        你上面让我测试的,不是ntboot啊,是ntloader啊,语法也不同,我就搞迷糊了,grub2-ntboot原理我大概知道的。
回复

使用道具 举报

486#
发表于 2021-1-31 11:08:28 | 只看该作者
liuzhaoyzz 发表于 2021-1-31 11:04
你上面让我测试的,不是ntboot啊,是ntloader啊,语法也不同,我就搞迷糊了,grub2-ntboot远离我 ...

它叫什么名字,很重要吗?它的功能和ntboot一样,代码也差不多,就是ntboot。
回复

使用道具 举报

487#
发表于 2021-1-31 11:10:12 | 只看该作者
2011whp 发表于 2021-1-31 10:12
@wintoflash

chainloader %x%/EFI/grub/ntloader uuid=%?_UUID% initrd=/EFI/grub/initrd.lz1
%?_UUID% 和 %?%  有什么不同  ,前者更通用

这个我不知道。
两个出口都可以?(chainloader  和 kernel )

都可以。当efi文件启动,要指定initrd的路径,且要保证两者在同一个fat分区。
回复

使用道具 举报

488#
发表于 2021-1-31 11:22:27 | 只看该作者
本帖最后由 2011whp 于 2021-1-31 11:28 编辑
liuzhaoyzz 发表于 2021-1-31 11:04
你上面让我测试的,不是ntboot啊,是ntloader啊,语法也不同,我就搞迷糊了,grub2-ntboot远离我 ...

从技术上讲,就是自动化下面的 三个启动项
至于,还支持 g4e的map盘分区,是附加功能

对于  grub205 移植的 ntboot,只能用于 grub205


现在新的  ntloader 是 更通用的,给别的基于grub的引导器用的
  目前能用的:
        1.  g4e
         2.  grub204
        3.  grub205  (ntboot模块 仍然有效)
        4.  将来 出现的引导器

回复

使用道具 举报

489#
 楼主| 发表于 2021-1-31 11:28:01 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-31 13:05 编辑
2011whp 发表于 2021-1-31 09:45
制作了个vhd:三杰LTSB   7GB vhd
     1.  winntsetup做的,挂svbus驱动
      2.  在主系统的bcd  添加 ...
ntloader 停不下来,你们是么拍照的,难道是抢拍


在菜单里面前年加上debug 3,该暂停的地方加pause语句即可。前面有例子啊。

那个 ?变量,是不是上一条命令的 返回结果,如果 UUID 命令后 插一条命令,在kernel前,是不是必然出错


估计会出错,我觉得%?_UUID%引用更好。

回复

使用道具 举报

490#
发表于 2021-1-31 11:45:28 | 只看该作者
本帖最后由 2011whp 于 2021-1-31 15:04 编辑
liuzhaoyzz 发表于 2021-1-31 11:28
ntloader 停不下来,你们是么拍照的,难道是抢拍

在菜单里面前年加上debug 3,该暂停的地方加pause语 ...

试了一通   
  ? 变量,好像是  UUid命令 专用的输出 变量

echo %?_UUID%  什么也不显示,(这个哪里的,与具体电脑有关?)

find /**  | set x=  这个新用法,有效


g4e 的命令行,是忽略大小写的( 我想菜单里,也忽略大小写吧)
回复

使用道具 举报

491#
 楼主| 发表于 2021-1-31 11:46:47 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-31 11:50 编辑
2011whp 发表于 2021-1-31 11:45
试了一通   
  ? 变量,好像是  UUid命令 专用的输出 变量



       %?%获取的是上一个命令的返回结果啊,g4d readme里面有哦

uuid执行之后,结果就到了%?_UUID%中,注意UUID必须大写!

find /**  | set x=  这个新用法,我是从大葱哪里学来的。

手机打字不易啊!
回复

使用道具 举报

492#
发表于 2021-1-31 11:57:21 | 只看该作者
本帖最后由 2011whp 于 2021-1-31 12:02 编辑
liuzhaoyzz 发表于 2021-1-31 11:46
%?%获取的是上一个命令的返回结果啊,g4d readme里面有哦

uuid执行之后,结果就到了%?_UUID% ...

echo %?_UUID%

全大写后,果然有效
%?%获取的是上一个命令的返回结果, 我也觉得应该是这样
(不过 g4e好像改过了,目前的作用就是 等效于 %?_UUID% )
回复

使用道具 举报

493#
发表于 2021-1-31 16:13:11 | 只看该作者
NTloader 正式发布了,我已经删掉了在这个帖子里面上传的旧版文件。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=423940
源码也公开了,具体原理你们看一下就知道了。

点评

关于chainloader ntloader模式启动windows系统,有个小建议。 title WIN7X64-SVBUS (/VHD/SX70211.vhd)-chainloader ntloader-2 debug 3 find --ignore-floppies --ignore-cd /EFI/grub/ntloader | set x= echo  详情 回复 发表于 2021-1-31 22:33
好的,晚点再详细试试看,现在在外面。  详情 回复 发表于 2021-1-31 17:06
回复

使用道具 举报

494#
发表于 2021-1-31 16:37:00 | 只看该作者
有什么好处,哪位老大科普一下
回复

使用道具 举报

495#
 楼主| 发表于 2021-1-31 17:06:42 来自手机 | 只看该作者
wintoflash 发表于 2021-1-31 16:13
NTloader 正式发布了,我已经删掉了在这个帖子里面上传的旧版文件。
http://bbs.wuyou.net/forum.php?mod= ...

        好的,晚点再详细试试看,现在在外面。
回复

使用道具 举报

496#
发表于 2021-1-31 18:48:01 | 只看该作者
给力
回复

使用道具 举报

497#
 楼主| 发表于 2021-1-31 22:33:55 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-1 10:30 编辑
wintoflash 发表于 2021-1-31 16:13
NTloader 正式发布了,我已经删掉了在这个帖子里面上传的旧版文件。
http://bbs.wuyou.net/forum.php?mod= ...

关于chainloader ntloader模式启动windows系统,有个小建议。
我用的最新版的ntloader和g4e。今天你在那个帖子发布的。
title WIN7X64-SVBUS (/VHD/SX70211.vhd)-chainloader ntloader-2
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)
chainloader %x%/EFI/grub/ntloader uuid=%?_UUID% initrd=/EFI/grub/initrd.lz1
pause pause1


chainloader %x%/EFI/grub/ntloader uuid=%?_UUID% initrd=/EFI/grub/initrd.lz1这一句中,initrd=/EFI/grub/initrd.lz1如果改成initrd=%x%/EFI/grub/initrd.lz1就会报错,本来initrd=%x%/EFI/grub/initrd.lz1就应该是对的,可是反而initrd=/EFI/grub/initrd.lz1是对的,这不符合逻辑。

按照g4d这么多年的习惯逻辑,find --set-root之后,如果没有注明盘符的文件夹,都会被视为root,
initrd=/EFI/grub/initrd.lz1这一语句应该等效于initrd=()/EFI/grub/initrd.lz1,一对空括号()表示root设备。
可是结合前面的菜单例子,root通过find --set-root已经指向了/VHD/SX70211.vhd所在的NTFS盘符(hd1,1)了,所以理应当用initrd=%x%/EFI/grub/initrd.lz1才对,/EFI/grub/initrd.lz1在我的FAT32分区(hd1,0),x=(hd1,0),结果用了initrd=%x%/EFI/grub/initrd.lz1反而出错了。这不符合g4d g4e历来对于root设备的定义习惯和逻辑,同一个菜单出现了对于root设备“二义性”的双标定义,让人迷惑,恳请大神修改。

直接上图。

IMG_20210131_223836.jpg (30.53 KB, 下载次数: 214)

IMG_20210131_223836.jpg

IMG_20210131_223855.jpg (52 KB, 下载次数: 185)

IMG_20210131_223855.jpg
回复

使用道具 举报

498#
发表于 2021-2-1 09:02:46 | 只看该作者
liuzhaoyzz 发表于 2021-1-31 22:33
关于chainloader ntloader模式启动windows系统,有个小建议。
我用的最新版的ntloader和g4e。今天你在那 ...
这不符合g4d g4e历来对于root设备的定义习惯和逻辑,同一个菜单出现了对于root设备“二义性”的双标定义,让人迷惑,恳请大神修改。

你的想法不对。
initrd=xxx 是传递给 efi 文件的参数,与 grub2/grub4dos 无关。是 efi 文件负责解析,加载的。

点评

initrd=/EFI/grub/initrd.lz1的确是传递给kernel的参数,我好奇的是这个参数只有“路径”,并没有“盘符”,以上图的(hd1,0)为例,kernel是怎么知道这个/EFI/grub/initrd.lz1是位于哪个“盘符”的呢?我猜测是ntload  详情 回复 发表于 2021-2-1 10:20
回复

使用道具 举报

499#
 楼主| 发表于 2021-2-1 10:20:27 | 只看该作者
wintoflash 发表于 2021-2-1 09:02
你的想法不对。
initrd=xxx 是传递给 efi 文件的参数,与 grub2/grub4dos 无关。是 efi 文件负责解析 ...

initrd=/EFI/grub/initrd.lz1的确是传递给kernel的参数,我好奇的是这个参数只有“路径”,并没有“盘符”,以上图的(hd1,0)为例,kernel是怎么知道这个/EFI/grub/initrd.lz1是位于哪个“盘符”的呢?我猜测是ntloader做了默认取值,默认地把ntloader所在的“盘符”(hd1,0),当作/EFI/grub/initrd.lz1所在的“盘符”(hd1,0),用户侧就不用输入initrd.lz1的“盘符”了,不需要initrd=(hd1,0)/EFI/grub/initrd.lz1这样子,只要initrd=/EFI/grub/initrd.lz1这样子。看起来ntloader替用户侧省了件事情。是这样的吗?










回复

使用道具 举报

500#
发表于 2021-2-1 11:40:32 | 只看该作者
本帖最后由 2011whp 于 2021-2-1 12:32 编辑
liuzhaoyzz 发表于 2021-2-1 10:20
initrd=/EFI/grub/initrd.lz1的确是传递给kernel的参数,我好奇的是这个参数只有“路径”,并没有“盘符 ...

理论:环井类命令(引导器出口命令)工作原理
    1. 初始化 一些环境
    2. 调入 第一个参数指定的  一个程序到内存
    3. 其余空格分隔的参数:做简单的字符窜转义 组合为一个大字符窜(大字符窜内 仍有空格分隔)
        initrd也是继续添加参数 的意思
    4. 控制权转移到 (本例是 ntloader)

环井命令举例:
   diskpart list disk
   或者 g4e外部命令  /fat mkdir /new

你的关键 误会点:所有参数组成的大字符窜 是 g4e用的
    实际上是 ntloader 用的 (ntloaerr执行时,已出了g4e了),
    ntloader 内部怎么认设备 不是用的g4e设备规范
    所以参数值 怎么写 是ntloader决定的,所以 相对路径是正确的
    (为了 稳定,最好 ntloader 和 initrd.lz1 在一个分区上,程序本身能容错除外)

kernel 转义时,不认双引号(只此一条命令)
http://bbs.wuyou.net/forum.php?m ... &fromuid=413782
回复

使用道具 举报

501#
发表于 2021-2-1 11:45:20 | 只看该作者
liuzhaoyzz 发表于 2021-2-1 10:20
initrd=/EFI/grub/initrd.lz1的确是传递给kernel的参数,我好奇的是这个参数只有“路径”,并没有“盘符 ...
我猜测是ntloader做了默认取值,默认地把ntloader所在的“盘符”(hd1,0),当作/EFI/grub/initrd.lz1所在的“盘符”(hd1,0),用户侧就不用输入initrd.lz1的“盘符”了,不需要initrd=(hd1,0)/EFI/grub/initrd.lz1这样子,只要initrd=/EFI/grub/initrd.lz1这样子。看起来ntloader替用户侧省了件事情。是这样的吗?

不是。
那我问你几个问题:
(hd1,1) 表示的是第几块硬盘的第几分区?
在 GRUB2 和 GRUB4DOS 下同一个分区的盘符是一样的吗?
为什么要传递 VHD/WIM/OS 所在分区的 UUID 而不是直接传递包括盘符的完整路径?
如果把 initrd.lz1 和 ntloader 文件放在 exFAT 或者其他非 FAT 分区,ntloader通过什么魔法来加载 initrd 文件?

GRUB4DOS / GRUB 2 的盘符在其他环境下没有任何意义,它不能和各分区一一对应。

点评

传递 VHD/WIM/OS 所在分区的 UUID 而不是直接传递包括盘符的完整路径,这个我完全理解。但我说的不是这个啊,我说的是initrd=/EFI/grub/initrd.lz1,他的盘符不是通过uuid传递给kernel的,initrd.lz1所在的  详情 回复 发表于 2021-2-1 12:36
回复

使用道具 举报

502#
 楼主| 发表于 2021-2-1 12:36:52 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-1 12:56 编辑
wintoflash 发表于 2021-2-1 11:45
不是。
那我问你几个问题:
(hd1,1) 表示的是第几块硬盘的第几分区?

        传递 VHD/WIM/OS 所在分区的 UUID 而不是直接传递包括盘符的完整路径,这个我完全理解。但我说的不是这个啊,我说的是initrd=/EFI/grub/initrd.lz1,他的盘符不是通过uuid传递给kernel的,initrd.lz1所在的盘符和 VHD/WIM/OS 所在的盘符不一定是同一个盘符,我的理解用的ntloader文件所在盘符来传递给kernel,但你又说不是,我就不理解了。虽然不理解,但chainloader-ntloader-initrd.lz1的确成功了。我只是很好奇和纳闷。

同样是ntloader调用环境,为啥kernel-ntloader-ininrd (hdx,y)/initrd.lz1的前面需要(hdx,y),我试了如果没有(hdx,y)就会出错;为啥chainloader-ntloader-initrd.lz1的前面又不需要(hdx,y)?

回复

使用道具 举报

503#
发表于 2021-2-1 14:00:29 | 只看该作者
本帖最后由 2011whp 于 2021-2-1 14:02 编辑
liuzhaoyzz 发表于 2021-2-1 12:36
传递 VHD/WIM/OS 所在分区的 UUID 而不是直接传递包括盘符的完整路径,这个我完全理解。但我说的 ...

如果,如你所说,

那证明  initrd 命令的机制  第一个参数指定的文件是 加载内存 换成 句柄或变量形式(转换参数形式 还在g4e里)
  加到  参数里  (如果,这样,ntloaer  initrd.lz 可任意 放置)

至于 chainloader 肯定是 字符窜 传参数的,所以没必要 加盘符,估计 ntloader能 捕获到 自身是从哪 个盘符(指efi标准分区名) 读入的,用这个盘符的吧,(要做容错的话,只能搜,但搜就会有二义性,结论 就是ntloader initrd.lz同盘符存放最好)
回复

使用道具 举报

504#
发表于 2021-2-6 03:43:18 | 只看该作者
liuzhaoyzz 发表于 2020-12-22 09:22
我已经有个初步的想法了,primo驱动试用版限期是一个月。以后发布教程的时候,直接以试用版或者正 ...

挺怕你们商业化,不过商业化也不可怕,就怕各种限制没得玩,说句实在的,这里面的氛围圈子真的挺好,就目前,挺好玩的一个论坛大神都在无私奉献输出
回复

使用道具 举报

505#
 楼主| 发表于 2021-2-6 17:33:10 | 只看该作者
7568168 发表于 2021-2-6 03:43
挺怕你们商业化,不过商业化也不可怕,就怕各种限制没得玩,说句实在的,这里面的氛围圈子真的挺好,就目 ...

你怕是误会了!一键批处理从芈员外写出来以后,一直都是开源免费的!我改了几个版本,也一直都是开源的,并没有用bat2exe转换为exe程序,我也没有想要靠这个挣钱,现在和将来。
商业化,是底层的primo驱动,这个驱动一直都是商业化运作!
firadisk/winvblock/svbus是开源免费的驱动。
回复

使用道具 举报

506#
发表于 2021-2-6 20:32:56 | 只看该作者
感谢分享
回复

使用道具 举报

507#
发表于 2021-2-8 09:42:06 | 只看该作者
本帖最后由 yiyu2012 于 2021-2-8 10:01 编辑

感谢分享!一键没成功,但分析bat按提示手动成功了。说下bat兼容性问题:1.运行脚本一键删除原来所有的primo盘符(幸亏有备份),能否设定个字符串手动存储剩余盘符,放bat首段加强兼容性以避免删除操作;2.FancyRd删除Group和Tag兼容性更高,至少在我的电脑上win7-win10均是删除后成功的,win10不删蓝屏;3.引导镜像大小设置比较保守,且bat段前无提示,像我,软件安装多了software涨到300m了,第一次制作就失败了,复制过去config没有文件。
请教个问题,grub4dos引导镜像大小是有限制的么?我一个镜像2500m无论如何整理碎片都提示文件碎片无法启动的,加上了map mem才行。primo设置文件备份在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ROOT\SYSTEM\0001\Device Parameters\Repository下,vdf智能镜像分区表只有个大小信息,其他全靠注册表信息模拟,同一个智能盘,序号改大点离线导入(比如说24)可以全系统通用,不过导入后还需要进入下目标系统热备份下SYSTEM文件。大佬能否提供个专门制作启动镜像的脚本,再加上注释(想桃吃)。之前看不太懂,最终离线导入注册表进的维护系统用的克隆指针的方式才成功的,就是比较麻烦。

回复

使用道具 举报

508#
发表于 2021-2-8 09:55:26 来自手机 | 只看该作者
使用blocklist命令检查一下镜像到底有没有碎片,有几个,超过限制没有。另外镜像是不是压缩格式,是不是动态vhd。
回复

使用道具 举报

509#
发表于 2021-2-8 10:13:45 | 只看该作者
本帖最后由 yiyu2012 于 2021-2-8 13:42 编辑
2011yaya2007777 发表于 2021-2-8 09:55
使用blocklist命令检查一下镜像到底有没有碎片,有几个,超过限制没有。另外镜像是不是压缩格式,是不是动 ...

是改mgr制作的vdf小启动完整镜像,之前用的O&O Defrag整理全盘碎片,这软件看碎片数量显示0的。是完整镜像没进行复制操作,现在可以了。
回复

使用道具 举报

510#
 楼主| 发表于 2021-2-10 09:01:26 | 只看该作者
yiyu2012 发表于 2021-2-8 09:42
感谢分享!一键没成功,但分析bat按提示手动成功了。说下bat兼容性问题:1.运行脚本一键删除原来所有的prim ...

        遇到问题反馈请尽可能提供相关信息,详见http://bbs.wuyou.net/forum.php?m ... &fromuid=298214

3.引导镜像大小确实很保守,因为怕有人的引导镜像大了撑爆了,一般地大概300MB左右,默认1GB。启动镜像脚本,你自己从一键里面提取即可。

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-29 13:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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