无忧启动论坛

标题: g4d有没办法在用wimboot启动wim的时候分行写initrd语句啊? [打印本页]

作者: 江南一根葱    时间: 2019-12-5 09:50
标题: g4d有没办法在用wimboot启动wim的时候分行写initrd语句啊?


我插入的文件有点多,于是就超长了,如果换到下一行,貌似就不会被执行。写起来很不方便,grub2是可以分行写的,老旧机器用grub2有点勉强

作者: wintoflash    时间: 2019-12-5 10:04
本帖最后由 wintoflash 于 2019-12-5 10:06 编辑


批处理好像是用 ^ 续行的,你试试



作者: 2011cuisheng    时间: 2019-12-5 10:26
希望可以帮到你

grub4dos-help.chm

583.58 KB, 下载次数: 35, 下载积分: 无忧币 -2


作者: 江南一根葱    时间: 2019-12-5 12:43
试了都不行啊,看来没戏了
作者: 527104427    时间: 2019-12-5 13:23
每行都加个 initrd 行不行?
作者: 江南一根葱    时间: 2019-12-5 14:36
527104427 发表于 2019-12-5 13:23
每行都加个 initrd 行不行?

最早试的,,不行啊
作者: yjqd    时间: 2019-12-5 15:16
grub4dos好像没有没办法在用wimboot启动wim的时候分行写initrd
作者: yjqd    时间: 2019-12-5 15:33
不知yaya或chenall有没有时间增加分行写initrd语句的功能
作者: chenall    时间: 2019-12-5 19:23
这样PE应该我喜欢的类型,,

我想要一个最小化的PE启动镜像,就像之前我弄的模块化PE 1.X那样.

默认启动是最小化的只包括必要的核心文件, 其它的功能可以自由组合扩展.

不过个人没有太多精力^_^,,就等看看能不能捡个现成的来用.

这个启动wimboot的功能是我添加上去的, 应该是有办法修改支持的,不行的话再加个命令好了.

我这些天抽空再看看能不能实现,好久没有看GRUB4DOS的代码,估计生疏了.
作者: 江南一根葱    时间: 2019-12-5 21:34
chenall 发表于 2019-12-5 19:23
这样PE应该我喜欢的类型,,

我想要一个最小化的PE启动镜像,就像之前我弄的模块化PE 1.X那样.

最小化pe我是直接原pe里砍掉program files目录,再另把目录7z高压缩打包自解压,
然后wimboot进去或等到桌面再提取的,7z释放出来垃圾电脑也很快
要是分行写能实现就方便多了
稍期待一下  

作者: yjqd    时间: 2019-12-6 11:14
chenall来了,分行写initrd语句有希望了
作者: wintoflash    时间: 2019-12-10 10:48
chenall 发表于 2019-12-5 19:23
这样PE应该我喜欢的类型,,

我想要一个最小化的PE启动镜像,就像之前我弄的模块化PE 1.X那样.

chenall老大不处理下这个pr吗
https://github.com/chenall/grub4dos/pull/219

作者: 不点    时间: 2019-12-10 12:00
wintoflash 发表于 2019-12-10 10:48
chenall老大不处理下这个pr吗
https://github.com/chenall/grub4dos/pull/219

你给 yaya 发个 PM,或许更快一点。yaya 来这里似乎更频繁一些。
作者: wintoflash    时间: 2019-12-10 13:56
不点 发表于 2019-12-10 12:00
你给 yaya 发个 PM,或许更快一点。yaya 来这里似乎更频繁一些。

发了。
因为我看到yaya在github上最后的活跃时间晚于这个pr的发表时间,我以为yaya没有处理pr的权限呢。
作者: 不点    时间: 2019-12-10 15:10
wintoflash 发表于 2019-12-10 13:56
发了。
因为我看到yaya在github上最后的活跃时间晚于这个pr的发表时间,我以为yaya没有处理pr的权限呢。

抱歉,yaya 有没有权限,这我可不知道。
作者: 2011yaya2007777    时间: 2019-12-10 16:31
我看到了。好像 pts 提供的 NTFS 修正代码还待商榷。我再想一想怎么修改。

linux 工具,如 mkfs.vfat,mkfs.exfat,mkfs.ntfs 等,不能正确地确定 BPB 表的隐藏扇区数,为零。
还有在 MBR,不设置活动分区标记;或将文件系统标识设置为 0。够奇葩的。
作者: 不点    时间: 2019-12-10 16:45
本帖最后由 不点 于 2019-12-10 17:01 编辑
2011yaya2007777 发表于 2019-12-10 16:31
我看到了。好像 pts 提供的 NTFS 修正代码还待商榷。我再想一想怎么修改。

linux 工具,如 mkfs.vfat,m ...

是的,我也认为,隐藏扇区数不可以搞错,否则,根本就不能启动。启动代码需要用到隐藏扇区数,如果这个隐藏扇区数是错误的,那就是让启动代码失效。这是微软建立的规范。如果连微软建立的规范都“无视”,那还怎么谈“支持 FAT”?只能是空头支票了。任何软件,都得尽力遵从规范。不可以让一个遵从规范的软件,去迁就一个故意不遵从规范的软件。软件填入正确的“隐藏扇区数”,是“遵从规范”的举手之劳;没有什么合理的理由来拒绝填入“隐藏扇区数”。

只是随便说说罢了,希望不至于影响到开发者的判断和决定。




顺便说,我以前维护 grub4dos 时的理念,是尽力迁就那些不遵从规范的硬件(BIOS 也算硬件,因为是制造商才能更改的,用户无法更改)。但是,对那些不遵从规范的软件,毫不留情,不予支持——我甚至还可能给它定个“添乱、惹麻烦”的罪名。比如说,某个著名的虚拟机就不能启动 grub4dos。我就不搭理它。因为虚拟机也是软件,是软件你就得好好写,不可以制造不兼容。既然你制造了不兼容,那对不起,我就不支持你。你再怎么 NB,充其量也只是一款软件罢了。你若是硬件,那你真 NB,我不得不甘拜下风,给你磕头,支持你。但你是软件,我就不给你磕头了。




作者: 2011yaya2007777    时间: 2019-12-12 18:53
不点说的对,grub4dos 应当尽量迁就有 bug 的硬件,而不迁就不遵循规范的软件。

fat, exfat, ntfs 是微软创建的文件系统,应当遵循微软的规定,至少应当适应其习俗。隐含扇区数是一个关键参数,格式化的工具就应当正确地确定他。 mkfs.vfat, mkfs.exfat and mkfs.ntfs 等 Linux 工具,格式化时,既然写磁盘,不可能不确定书写位置,也就是知道分区在磁盘的位置(隐含扇区数),而故意不将其填写到规定位置。

pts 提出一个方案,就是利用从主分区启动时,由 int13/ah=42 传入的 8(%si) 值,替代 bpb 表的隐藏扇区数。
grub4dos 从分区启动时,隐藏扇区数不使用启动分区自有的 bpb 表,却使用一个传入的值,有些怪怪的。
再说,当映射磁盘时,把启动分区复制到 0x7c00,传入驱动器号,跳转到 0x7c00 执行,此时没有执行由 int13/ah=42 ,不会传入隐藏扇区数。

因此,不采纳 pts 提出的方案。已经告知 pts。

作者: 江南一根葱    时间: 2019-12-12 19:26
这么热闹,中午吃着面点开看了看,然后头顶三只乌鸦飞过去了。。。


它们叫着,啊,啊,啊。。
作者: kailern    时间: 2019-12-15 19:05
使用chenall的2019-9-9的g4d启动xp系统时报如下错误,不知道什么原因?
try(hd0,0):NTFS5:2
try(hd0,1):NTFS5:2
try(hd0,2):NTFS5:No GRLDR
try(hd0,3):invalid or null
no floppy
Cannot Find GRLDR in all drives , press Ctrl+Alt+Del to restart.
以上已经把grldr,grldr.mbr复制到(hd0,0),(hd0,1)了啊?如果找不到grldr怎么会报这个错误呢?

作者: 2011yaya2007777    时间: 2019-12-16 18:36
使用chenall的2019-9-9的g4d启动xp系统时报如下错误,不知道什么原因?

try(hd0,0):NTFS5:2
返回错误代码2,是指NTFS损坏。含义是读文件标识,或者读属性,或者读某些数据错误。
原因是drub4dos有局限性,尤其是启动代码(由于只有4扇区)。
1. 不支持>1K MFT记录尺寸,>4K索引记录尺寸。
2. 不支持加密文件。
3. 不支持>4K的非驻留属性列表和$BITMAP。
作者: chenall    时间: 2019-12-19 19:59
本帖最后由 chenall 于 2019-12-31 22:51 编辑

抽了一些时间再读了一下源码.


使用比较简单的方法来实现了这个功能(仅限于使用了"@"符号的语句)

楼主可以试试看有没有什么问题.





作者: 江南一根葱    时间: 2019-12-19 20:20
本帖最后由 江南一根葱 于 2019-12-19 20:52 编辑
chenall 发表于 2019-12-19 19:59
抽了一些时间再读了一下源码.



ok了,射进去的文件也正常,终于不用复制到notepad++去写一长段又要检查了

作者: 江南一根葱    时间: 2019-12-19 21:16

666 貌似这样写都可以了,,

作者: chenall    时间: 2019-12-20 09:10
是的,可以看一下代码修改记录,实际上只是添加了几行代码

在保持原有功能的基础上额外作了增强.

目前的方法有一个弊端就是 如果多行initrd
系统内部其实是一直在做数据合并的操作,效率可能会不如单行执行.

如果要分行写目前的建议是 大的文件尽量放在后面.

作者: yjqd    时间: 2019-12-21 09:55
本帖最后由 yjqd 于 2019-12-21 09:58 编辑
chenall 发表于 2019-12-20 09:10
是的,可以看一下代码修改记录,实际上只是添加了几行代码

在保持原有功能的基础上额外作了增强. ...

我下载了grub4dos-0.4.6a-2019-12-20.7z
用其中的grldr替换原来的grldr,菜单保持不变,启动正常,但分行写时,启动报错:

Directory entry "PXE" not found
Emulating drive 0x81
FATAL: no bootmgr.exe
press a key to reboot...

分行写菜单如下:
pxe detect
configfile
timeout 5

title 启动Windows8pe用wimboot
kernel /grub4dos/wimboot index=1
initrd @bcd=/grub4dos/bcd
initrd @boot.sdi=/boot/boot.sdi
initrd @bootmgr=/bootmgr
initrd @boot.wim=/WINPE.WIM
boot

注:grldr是bootmgr加载的






作者: wintoflash    时间: 2019-12-21 10:23
yjqd 发表于 2019-12-21 09:55
我下载了grub4dos-0.4.6a-2019-12-20.7z
用其中的grldr替换原来的grldr,菜单保持不变,启动正常,但分 ...

chenall还没有提交到github
作者: yjqd    时间: 2019-12-21 11:29
wintoflash 发表于 2019-12-21 10:23
chenall还没有提交到github

哦,谢谢

我是在官网下载的

现在在本贴下载试试
作者: yjqd    时间: 2019-12-21 20:29
本贴下载的grldr分行写命令成功了
作者: 江南一根葱    时间: 2019-12-21 20:33
yjqd 发表于 2019-12-21 09:55
我下载了grub4dos-0.4.6a-2019-12-20.7z
用其中的grldr替换原来的grldr,菜单保持不变,启动正常,但分 ...

多行会多费一两秒的时间,建议这么写
title 启动Windows8pe用wimboot
kernel /grub4dos/wimboot index=1
initrd @bcd=/grub4dos/bcd @boot.sdi=/boot/boot.sdi @bootmgr=/bootmgr
initrd @boot.wim=/WINPE.WIM
boot


就是觉得写不下了再分行,哈哈

作者: yjqd    时间: 2019-12-21 21:50
江南一根葱 发表于 2019-12-21 20:33
多行会多费一两秒的时间,建议这么写
title 启动Windows8pe用wimboot
kernel /grub4dos/wimboot index= ...

谢谢,我还没仔细观察对比所用时间

看来确如chenall据说分行多了会效率低一些

你测试过大文件放前面没有
作者: 2011yaya2007777    时间: 2019-12-23 09:45
已经提交。
作者: daxx    时间: 2019-12-23 09:54
@tinybit hi,我在这边没有发帖权限,只能回复找你了。
上次说的问题,我看了代码,发现打印这些信息的函数本身通过切换到实模式执行成功了,
在打印“Booting ...”这条信息之后进入命令行,说明config_entries为真且 if (((char)c) == 'c')真;
第二种情况: debug_boot || ! debug_in_menu_init 且 is_preset 且 preset_menu == (const char *)0x800 为真才会打印“Processing the preset-menu ...”。
作者: chenall    时间: 2019-12-23 10:02
2011yaya2007777 发表于 2019-12-23 09:45
已经提交。

抱歉,我刚刚已经提交了,内容有修改.
作者: chenall    时间: 2019-12-23 10:12
yjqd 发表于 2019-12-21 21:50
谢谢,我还没仔细观察对比所用时间

看来确如chenall据说分行多了会效率低一些

新的initrd的文件需要附加在后面.

需要重新分配空间,然后把原来的数据进行转移.

在内存中转移速度很快影响不大.

新的版本已经提交发布.  修改了一些处理逻辑,现在是所有的initrd文件都可以附加,不单单是有@标志.

可以试试看有没有什么问题.

作者: 江南一根葱    时间: 2019-12-25 15:02
本帖最后由 江南一根葱 于 2019-12-25 15:06 编辑
chenall 发表于 2019-12-23 10:12
新的initrd的文件需要附加在后面.

需要重新分配空间,然后把原来的数据进行转移.


g4d是不是不支持大内存,32G内存的机子貌似启不来。其它的好像内存混插的容易起不来。

作者: 不点    时间: 2019-12-25 15:26
daxx 发表于 2019-12-23 09:54
@tinybit hi,我在这边没有发帖权限,只能回复找你了。
上次说的问题,我看了代码,发现打印这些信息的函 ...

打印成功,说明显卡 BIOS 是工作的。然而,在开始处理内置菜单之后,就死机了。

原因很简单:当它要去处理菜单的时候,会去寻找硬盘。也就是要去调用 INT13,而在调用 int13 时发生死机了,根本就回不到 grub4dos 里面了。

如果不使用 Linux 而是直接启动 grub.exe 或者是通过 syslinux 之类的启动 grub4dos,那是没问题的。

或者虽然你使用了 Linux 和 kexec,但是,你在虚拟机之下操作,也会是成功的。

问题就在于 Linux 采用了 AHCI 规范的新硬件,这样的硬件是阻止 BIOS 的 int13 继续工作的。

不要混淆了 BIOS 这个概念。Video BIOS 工作正常,不等于全部 BIOS 都工作正常。

Video BIOS 只是 BIOS 的一部分,不代表其他 BIOS 的功能。


作者: chenall    时间: 2019-12-26 15:31
江南一根葱 发表于 2019-12-25 15:02
g4d是不是不支持大内存,32G内存的机子貌似启不来。其它的好像内存混插的容易起不来。

单行的可以启动吗?

单行的如果可以那就是我修改成多行后产生了BUG.

看截图应该是早期的版本就这样了.

之前修改的时候有看到一些代码,好像initrd的内容必须放在3G以下的空间.

如果不是的话就自动把后面的内存填满,也就是全部占用掉,保证在3G以下.

后续有空我再看看能不能处理.

作者: 江南一根葱    时间: 2019-12-28 14:54
本帖最后由 江南一根葱 于 2019-12-28 14:56 编辑
chenall 发表于 2019-12-26 15:31
单行的可以启动吗?

单行的如果可以那就是我修改成多行后产生了BUG.

应该是以前就这样的,我家里有台内存混插的老机器,几年来一直只能map xxx.iso来启动,用wimboot一直这个提示,进grub2用wimboot倒也可以启,不过我想想是内存混插导致(内存地址混乱?)的缘故,

前几天才发现一台32G高端电脑的也这提示。。。由于这台32G内存的高端电脑是别人的,所以没法再重现了。。不过家里的破电脑倒每星期可以试一下

作者: 江南一根葱    时间: 2019-12-31 22:09
chenall 发表于 2019-12-26 15:31
单行的可以启动吗?

单行的如果可以那就是我修改成多行后产生了BUG.

悲催地在自己家的电脑上重现了这个问题,,这样写是可以启动的
kernel (fd0)/wimboot  
initrd @bcd=(fd0)/bcd @boot.sdi=(fd0)/boot.sdi @bootmgr=(fd0)/bootmgr @out.bat=(bd)/wimboot/win8pe/out.bat @fbplus.exe=(bd)/wimboot/win8pe/fbplus.exe @pecmd.ini=(bd)/wimboot/win8pe/pecmdout.ini
initrd @boot.wim=(bd)/wimboot/win8pe/win8pe.wim


这样写就出现以下图片中的问题
kernel (fd0)/wimboot  
initrd @bcd=(fd0)/bcd
initrd @boot.sdi=(fd0)/boot.sdi
initrd @bootmgr=(fd0)/bootmgr
initrd @out.bat=(bd)/wimboot/win8pe/out.bat
initrd @fbplus.exe=(bd)/wimboot/win8pe/fbplus.exe
initrd @pecmd.ini=(bd)/wimboot/win8pe/pecmdout.ini
initrd @boot.wim=(bd)/wimboot/win8pe/win8pe.wim


看来是不是用http://bbs.wuyou.net/forum.php?mod=viewthread&tid=418096&extra=page%3D1
类似这样的语句在菜单开头弄个函数之类合并来解决
不知道菜单里支不支持写批处理之类的

作者: chenall    时间: 2019-12-31 22:50
截图的信息和你的菜单显示的内容不一样呀??

是用的哪个版本?可以试试从官网下载最新版本测试一下.
作者: 江南一根葱    时间: 2020-1-1 09:36
chenall 发表于 2019-12-31 22:50
截图的信息和你的菜单显示的内容不一样呀??

是用的哪个版本?可以试试从官网下载最新版本测试一下.

嗯,是不同的菜单,一样的现象,是你合并后的版本
作者: chenall    时间: 2020-1-4 15:59
本帖最后由 chenall 于 2020-1-12 09:03 编辑

修改了一下,这个版本应该可以了.

放着测一段时间,没有问题的话再合并.

作者: 江南一根葱    时间: 2020-1-4 16:20
chenall 发表于 2020-1-4 15:59
修改了一下,这个版本应该可以了.

放着测一段时间,没有问题的话再合并.

虚拟机测试ok了,老家的混插内存老电脑倒是一样的,
作者: chenall    时间: 2020-1-4 17:29
江南一根葱 发表于 2020-1-4 16:20
虚拟机测试ok了,老家的混插内存老电脑倒是一样的,

混插内存的,可以截个图看下。

还有displaymem的结果。

因为initrd只能加载到3G以下的空间(具体我也不清楚,^_^原来的代码是这样写的).

如果3G以下空间不够放的话就是报错
作者: 江南一根葱    时间: 2020-1-4 18:01
chenall 发表于 2020-1-4 17:29
混插内存的,可以截个图看下。

还有displaymem的结果。





这台电脑是以前写成一行也有这个错误的,我当它绝症不治的,但grub2下用同样的文件倒是可以启


作者: chenall    时间: 2020-1-6 14:20
能不能用debug模式再截个图看看。 比如 debug 5

作者: 江南一根葱    时间: 2020-1-6 14:23
chenall 发表于 2020-1-6 14:20
能不能用debug模式再截个图看看。 比如 debug 5

那要周六了,每星期六回乡住“民宿”的
作者: 江南一根葱    时间: 2020-1-11 18:01
chenall 发表于 2020-1-6 14:20
能不能用debug模式再截个图看看。 比如 debug 5


来往“民宿”的破电脑,热腾腾的debug 5出来了,

作者: chenall    时间: 2020-1-12 09:03
本帖最后由 chenall 于 2020-1-12 09:12 编辑

这个应该就可以了.

grub4dos-0.4.6a-2020-01-12.zip

758.83 KB, 下载次数: 8, 下载积分: 无忧币 -2


作者: 江南一根葱    时间: 2020-1-12 10:01
chenall 发表于 2020-1-12 09:03
这个应该就可以了.

66666真可以了,,这台机一直启不了的,都快十年了,平时在装机偶尔也能发现这个现象,因为概率不大所以一直没当回事,毕竟临时用map iso的方式是可以启的

作者: chenall    时间: 2020-1-12 11:25
江南一根葱 发表于 2020-1-12 10:01
66666真可以了,,这台机一直启不了的,都快十年了,平时在装机偶尔也能发现这个现象,因为概率 ...

内存分布稍微特殊了一些,早期的initrd命令对可用内存检测比较简单粗暴.

我修改了一下,initrd命令现在自己不再判断可用内存,统一由map命令来检测,因为 initrd最终还是要通过map命令申请内存的.

现在基本上map能用就没有问题.
作者: 江南一根葱    时间: 2020-1-12 13:54
chenall 发表于 2020-1-12 11:25
内存分布稍微特殊了一些,早期的initrd命令对可用内存检测比较简单粗暴.

我修改了一下,initrd命令现在 ...

不错不错,可能之前有人不喜欢用wimboot启wim是有这个失败的几率在吧,解决就灰常好了

另外问个问题,g4d网启map网络上的iso是不是有大小限制,tinypxeserver作者好像解决了http不能读取大iso的问题,但g4d去map还是一样
比如我想map http://微软大型iso ,能出来设备,不过里面只有一个readme.txt 内容好像是写不支持udf之类的,这样就不能完美网启安装微软原版iso,需要外置boot.wim,grub2也是这样,但本地iso又是一切正常的。
之前问过好像说是网启不支持高端低端的,http://bbs.wuyou.net/forum.php?mod=viewthread&tid=413169&extra=


作者: chenall    时间: 2020-1-13 09:26
本帖最后由 chenall 于 2020-1-13 09:27 编辑

好像不管能不能看得到文件都可以直接启动的吧.
直接用类似如下的语句就可以启动的.
chainloader (0xff)

看不到文件有可能是UDF驱动判断的问题,文件放在本地MAP没有问题是直接map还是 --mem的?

作者: 江南一根葱    时间: 2020-1-13 10:49
chenall 发表于 2020-1-13 09:26
好像不管能不能看得到文件都可以直接启动的吧.
直接用类似如下的语句就可以启动的.
chainloader (0xff)

我是想网络map出来(类似grub2的loopback后效果)
打算wimboot启动包里的boot.wim,注入驱动之类实现网络原版安装
作者: chenall    时间: 2020-1-13 11:05
江南一根葱 发表于 2020-1-13 10:49
我是想网络map出来(类似grub2的loopback后效果)
打算wimboot启动包里的boot.wim,注入驱动之类实现网络 ...

那就没有必要MAP整个iso了,浪费时间,直接整一个通用的BOOT.WIM就好了,更方便 .
作者: 江南一根葱    时间: 2020-1-13 11:57
chenall 发表于 2020-1-13 11:05
那就没有必要MAP整个iso了,浪费时间,直接整一个通用的BOOT.WIM就好了,更方便 .

那就不折腾这个先,不过g4d支持接受参数不
作者: chenall    时间: 2020-1-13 17:10
江南一根葱 发表于 2020-1-13 11:57
那就不折腾这个先,不过g4d支持接受参数不

grub.exe 支持参数,可以看一下readme
作者: 江南一根葱    时间: 2020-1-22 19:32
chenall 发表于 2020-1-13 17:10
grub.exe 支持参数,可以看一下readme

grub.exe支持网络不,我用ipxe去chain它好像没pxe信息
作者: zhoujiandong    时间: 2020-1-23 16:19
学习一下




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