无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: hilsonma
打印 上一主题 下一主题

[分享] grub2的自动菜单和多功启动(以cfg文件的方式仿造g4d的run/siso)

    [复制链接]
1#
发表于 2019-12-31 17:41:24 | 显示全部楼层
hilsonma 发表于 2019-12-31 16:16
会不会弄grub2模块,wintoflash的ntboot我觉得比wimboot好用,但好象不支持中文文件名,并且看他发的贴子 ...

为啥不支持中文?
因为文件路径转换成 bcd 里面的路径要进行编码转换。
这个不好做。


回复

使用道具 举报

2#
发表于 2020-1-1 15:02:37 | 显示全部楼层
逗我呢,g4d的NTBOOT本来就不支持中文名啊!




回复

使用道具 举报

3#
发表于 2020-1-1 15:28:20 | 显示全部楼层
wintoflash 发表于 2020-1-1 15:02
逗我呢,g4d的NTBOOT本来就不支持中文名啊!
  1. Windows操作系统内核中的字符表示为UTF-16小尾序,可以正确处理、显示以4字节存储的字符。但是Windows API实际上仅能正确处理UCS-2字符,即仅以2字节存储的,码位小于U+FFFF的Unicode字符。其根源是Microsoft C++语言把 wchar_t 数据类型定义为16比特的unsigned short,这就与一个 wchar_t 型变量对应一个宽字符、可以存储一个Unicode字符的规定相矛盾。
复制代码
回复

使用道具 举报

4#
发表于 2020-1-1 15:47:39 | 显示全部楼层
hilsonma 发表于 2020-1-1 15:38
不好意思,我没有试过ntboot,我试的是run。
我知道siso走的是wimboot,不知道run走的是wimboot还是ntbo ...

能否提供一下你用的run
里面应该有转码相关的东西。我以前记得,run里面是有gbk转码的,难道它是直接转换成了gbk?
另外就是bootice编辑bcd,设置中文wim名,能不能正常启动?
回复

使用道具 举报

5#
发表于 2020-1-1 16:42:30 | 显示全部楼层
hilsonma 发表于 2020-1-1 16:00
刚打包的时候发现也可以用7z解开run,里面有wimboot,但同样有一套bootmgr+bcd+sdi

稍后我试一下 ...

用的是wimboot
回复

使用道具 举报

6#
发表于 2020-1-1 16:45:23 | 显示全部楼层
hilsonma 发表于 2020-1-1 16:00
刚打包的时候发现也可以用7z解开run,里面有wimboot,但同样有一套bootmgr+bcd+sdi

稍后我试一下 ...

wimboot不需要处理路径。
原理与ntboot类似,但不相同。
ntboot是用虚拟盘上的bcd,启动硬盘上的wim
wimboot是用虚拟盘上的bcd,启动虚拟盘上的boot.wim
@:boot.wim:/xxx.wim,虚拟盘上的wim就是boot.wim
@:abcd.wim:/xxx.wim,虚拟盘上就是abcd.wim
grub2里面的vfat命令,可以帮助你理解。
回复

使用道具 举报

7#
发表于 2020-1-1 17:49:59 | 显示全部楼层
hilsonma 发表于 2020-1-1 17:11
稍后我去了解vfat。

看你的解释,我明白了:

wimboot是改名为 你 指定的文件名,而不是根据bcd去确定文件名的。
回复

使用道具 举报

8#
发表于 2020-1-1 18:33:52 | 显示全部楼层
hilsonma 发表于 2020-1-1 18:13
那样岂不是wimboot还要根据指定的文件名修改虚拟盘的bcd?那样不是很好吧,我想象中是在虚拟盘放一套启动 ...
那样岂不是wimboot还要根据指定的文件名修改虚拟盘的bcd?那样不是很好吧,我想象中是在虚拟盘放一套启动模板,使用的时候复制实际的wim文件到虚拟盘改名符合模板然后启动。

不修改bcd。文件名不符直接启动失败。
而ntboot则是在虚拟盘放bootmgr+bcd+sdi, 使用的时候修改虚拟盘的bcd以符合要启动的wim路径然后启动。
不知道我这样的理解是否对。

这个是对的。

修改 bcd 并没有你想象的那么容易。目前所有 bcd 编辑器都只是调用 bcdedit。
回复

使用道具 举报

9#
发表于 2020-1-1 18:57:30 | 显示全部楼层
本帖最后由 wintoflash 于 2020-1-1 20:04 编辑


试试,utf-8的中文路径应该可以了。

但是,win7以前的有些系统下起的中文名不是utf-8的,这样会造成无法预料的问题,不管了。




回复

使用道具 举报

10#
发表于 2020-1-1 20:07:20 | 显示全部楼层
本帖最后由 wintoflash 于 2020-1-1 20:14 编辑
hilsonma 发表于 2020-1-1 19:43
把wim复制到虚拟盘的时候就改名成跟虚拟盘中bcd原先指定的文件名呀,这样不会文件名不符。

所以,你可以用注册表编辑器打开bcd看一下,是不是一脸懵逼。
而且,就算是注册表,也不是那么好解析的。
目前Windows下,也都是要通过 regedit 或者 windows api 查看注册表的。
第三方的解析注册表软件存在,但是非常复杂。

目前 wimboot 里面只是有将.efi替换.exe的修改,是暴力实现的。

因为大多数人用的都是 Windows,别说 bootloader/操作系统开发了,就算是 Windows 程序开发,也接触的不多,会把很多东西看作想当然的。
在grub里面,就算是算长整数的除法取余,都可能需要汇编来实现。在C语言学习里面习以为常的 printf 都不存在。在显示屏上输出个小数都费劲。

回复

使用道具 举报

11#
发表于 2020-1-2 10:47:07 | 显示全部楼层
本帖最后由 wintoflash 于 2020-1-2 10:53 编辑
hilsonma 发表于 2020-1-2 10:14
试了最新发布的grub2,wimboot比原来略快,不过相差不到1秒;
ntboot比原来略慢,相差也不到1秒;
同版nt ...

1)为了兼容以前的脚本。不能更新了,原来的脚本就不能用了。
2)wimboot 最主要的用途是修改wim,这个你没有用到,所以觉得可以改。我不会设计没用的东西,就连命令中的@,也是有用的,只不过我没有公开。
3)要给将来可能出现的改进留空间

回复

使用道具 举报

12#
发表于 2020-1-2 11:09:17 | 显示全部楼层
本帖最后由 wintoflash 于 2020-1-2 11:10 编辑
hilsonma 发表于 2020-1-2 10:58
明白了,谢谢解答。

刚试了不带efi参数的ntboot,结果是不行的。是不是并没有内置bootmgfw.efi ,如果 ...

默认加载路径是/efi/microsoft/boot/bootmgfw.efi
不能内置bootmgfw.efi,有版权问题。
这个在我主页grub2手册里面有写的。https://a1ive.github.io/grub2_zh.html
回复

使用道具 举报

13#
发表于 2020-1-2 13:04:30 | 显示全部楼层
liuzhaoyzz 发表于 2020-1-2 11:57
想问下wintoflash大神,是不是新版grub2,启动中文iso,不再需要用
strconv --gbk --set=file "(http)/i ...

这个跟网启的没有关系。
网启的是软件内部编码的问题,必须转。
回复

使用道具 举报

14#
发表于 2020-1-9 09:44:18 | 显示全部楼层
hilsonma 发表于 2020-1-1 19:56
是呀,但这个模块我从来没有成功过,可能是我的vhd镜像的问题,搞不懂。
后来用ntboot就成功了。

这两天大概看了一下 firadisk 的源码,发现它只能识别 BIOS 下的仿真盘。(相关讨论见https://github.com/a1ive/grub/issues/24)
所以 UEFI 下用 map 启动 VHD 最大的问题就是, 没有能用的 Windows 驱动。


回复

使用道具 举报

15#
发表于 2020-1-9 13:35:27 | 显示全部楼层
pky317 发表于 2020-1-9 12:42
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411365
不知这个是否有可以借鉴的地方

看源码,SvBus的原理也差不多。获取 GRUB4DOS map 出来的盘靠的是 int13h 相关的东西。
这种东西在 UEFI 下根本不存在。至于能不能模拟出来那就不好说了。如果能模拟出来的话,UEFI下都能模拟 BIOS 了。
回复

使用道具 举报

16#
发表于 2020-1-13 19:39:39 | 显示全部楼层
wangziqiang 发表于 2020-1-13 19:09
返回上一层时,总是回到根目录,还望再次指导.图见63楼

菜单上写了,按ESC返回上一层。
回复

使用道具 举报

17#
发表于 2020-1-15 08:44:36 | 显示全部楼层
PM里面没法发图。补图。


回复

使用道具 举报

18#
发表于 2020-1-15 12:54:43 | 显示全部楼层
hilsonma 发表于 2020-1-15 12:39
已更新。
但是没有筛选,如要筛选可自行添加。
仿照之前筛选$开头文件一样,改成比对扩展名,不符合第 ...

tr命令可以转换大小写.要加tr模块.
回复

使用道具 举报

19#
发表于 2020-1-26 15:49:06 | 显示全部楼层
hilsonma 发表于 2020-1-26 12:51
纯粹是个人偏好。
我优先使用体积小的。
我把我下载过的PE的都试用了,发现有体积更小的就选用更小的, ...

据说,如果用这个体积比较小的boot.sdi,启动某些有多个卷的wim,会出问题。
回复

使用道具 举报

20#
发表于 2020-3-12 17:35:49 | 显示全部楼层
(楼上是土耳其语)
回复

使用道具 举报

21#
发表于 2020-3-12 18:21:14 | 显示全部楼层
awengers44 发表于 2020-3-12 15:34
Merhaba; Ustalara sormak istiyorum grub2 file manager v6 ya adapte edilen clean.sh, cong, congset.sh ...

Belki "@江南一根葱 " yardım istemelisiniz
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=403890
回复

使用道具 举报

22#
发表于 2020-3-12 18:53:28 | 显示全部楼层
hilsonma 发表于 2020-3-12 18:35
不知道ta的意思是不是想把我的函数方法用到 江南一根葱 的grubfm.
我尝试自动翻译看到的意思是 想把我的 ...

好像是想让葱哥给grubfm v7添加网启之类的功能,反正网启不关咱们的事。
回复

使用道具 举报

23#
发表于 2020-3-14 10:39:05 | 显示全部楼层
hilsonma 发表于 2020-3-14 10:25
没有用到 ls 命令,查找文件用的是 search 命令。
有关此函数坛友 2010sya 在尝试安全启动下使用,但启 ...
有关此函数坛友 2010sya 在尝试安全启动下使用,但启动PE时出现0xc0000000f,大概是无法支持安全启动。

???
这都哪跟哪啊,“此函数”指的是什么?
回复

使用道具 举报

24#
发表于 2020-3-14 11:04:49 | 显示全部楼层
本帖最后由 wintoflash 于 2020-3-14 11:57 编辑
hilsonma 发表于 2020-3-14 10:56
你终于出现了,我指的是这个贴子的run.cfg 定义的run命令
现在 2010sya 在试我另一个贴子中的启动方案ht ...

你更新grub2到最新版本,wimboot/ntboot就支持sb了

“安全启动下启动自己生成的grub2” 和 “安全启动下用wimboot启动pe” 是两码事。
安全启动下启动自己生成的grub2,合法的方式就是 shim+mok导入证书。
钻漏洞的方式是用卡巴斯基的 efi(已被微软通过系统更新堵死)。

安全启动下用wimboot/ntboot启动pe,这个最近才得到解决。
微软的bootmgfw.efi,不知道通过什么方法,只要判断安全启动是开启的,就拒绝从wimboot/ntboot生成的虚拟盘上启动。
但是较早版本win7 的bootmgfw.efi 没有这个判断,所以可以用。(但是微软对win7的支持已经终止了,现在再用会出问题)。
前几天我想出了一个办法,“欺骗” bootmgfw.efi,让它认为安全启动是关闭的,这样就能正常启动了。你更新到新版本,自然就解决了。

回复

使用道具 举报

25#
发表于 2020-3-14 13:03:06 | 显示全部楼层
hilsonma 发表于 2020-3-14 12:44
你的方法是在哪个模块实现的,是不是sbpolicy?这几句能不能省:
sbpolicy --install
efiload $prefix/ ...
可以用哪个版本的bootmgfw.efi?是不是除了win7的都可以,还是只能用win10的?

都可以。一般都是越新越好。
你的方法是在哪个模块实现的,是不是sbpolicy?这几句能不能省:
sbpolicy --install
efiload $prefix/drivers/CrScreenshotDxe.efi
efiload $prefix/drivers/EfiGuardDxe.efi


你用grub-mkimage生成efi,会自动处理依赖关系。现在wimboot依赖sbpolicy。
当然不需要。
CrScreenshotDxe.efi 是截屏驱动。
EfiGuardDxe.efi 是破解windows驱动签名验证的。
sbpolicy命令本身是用于禁用shim及固件对chainload操作的验证。但是你如果在grub2之前用过卡巴斯基套装或者 Super-UEFIinSecureBoot-Disk 的 preloader,那就不需要。不过加了也不影响。

我没有安全启动的电脑,所以无法测试。

用 vmWare/qemu 测试也一样。这个没啥不好理解的,自己把各种组合都试一下,自然就明白了。
回复

使用道具 举报

26#
发表于 2021-6-28 13:34:39 | 显示全部楼层
hilsonma 发表于 2021-6-28 13:30
我试过不论哪个方式都有可能出错,特别是win10的vhdx,grub2引导基本都出错.
后来在本论坛一贴提示说要 ...

ntboot启vhdx报什么错误?
回复

使用道具 举报

27#
发表于 2021-6-28 14:39:29 | 显示全部楼层
hilsonma 发表于 2021-6-28 14:09
我碰到的是Windows无法更新计算机的启动配置。
这个应该只能用微软自身引导才能解决。

你还没完成安装,就用ntboot启动,那当然不行了。
在安装的阶段 Windows 是会向硬盘写bcd等引导文件的。
bios下,Windows 一般会直接向第一个硬盘 (0x80) 写文件。grub2 ntboot启动时,boomgr所在的硬盘是最后一个硬盘。一般情况下第一硬盘都可以写入,所以你感觉不出问题。
但是在uefi下,bootmgfw.efi是会记录自己的设备路径的。grub2 ntboot启动时,bootmgfw.efi位于虚拟磁盘上,系统启动后这个磁盘就不存在了,当然会报错。
回复

使用道具 举报

28#
发表于 2021-6-30 09:45:25 | 显示全部楼层
2011wolfsina 发表于 2021-6-29 22:40
感觉与vhdx关系不大,启动wim也是出错。奇怪的是运行mentest.efi他显示的路径居然是\boot\memtest.efi.是 ...
但是我用GPT硬盘BCD引导和U盘GrubFMMultiArch.iso或GrubFMx64.efi引导都能正常进入Win8.1x64EIE.vhdx系统(用winsetup安装的Win8.1x64EIE精简版,里面有windows分区和esp分区)。

你用的 GRUB2 版本太低了。这个应该是刚弄出 ntboot 时候的版本。
查了下grubfm源代码,vhdx好像是用map启动的?

你没有找对地方。vhdx是用 ntboot 启动的。
你的vhd是双分区的带ESP的,可以用map
我的都是单分区的不带ESP的,你做一个这样的试试看能不能用map引导,我没有试过,都是用ntboot的。

不行。vhd里面必须安装 SVBus 驱动才能识别虚拟盘。另外,vhdx 不能 map。
回复

使用道具 举报

29#
发表于 2022-6-7 09:35:16 | 显示全部楼层
gues1688 发表于 2022-6-7 00:26
正常不推荐把代码写在同一行,因为这样的代码不便于阅读。但因为是在命令行,只能写一行代码。所以写成上 ...

应该是 expr -s x $x+1
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-21 23:04

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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