无忧启动论坛

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

基于grub4dos的“合盘”

[复制链接]
跳转到指定楼层
1#
发表于 2009-5-12 02:21:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
wind_fsm兄整理的合盘教程,内容丰富,是难得的资料。
对基于grub4dos的合盘,我提出了一些建议与wind_fsm兄交流,现整理一些资料补充成一帖,便于和大家探讨。
先声明,本人几乎没有合盘经验。

原帖由 pseudo 于 2009-5-10 22:42 发表
好像有两种非常简单的合盘方式楼主还未提及。
1、grub4dos每个菜单项加载一个PE,每个PE一个iso文件,被仿真为光盘来启动。
菜单项写法参考官方grub4dos-0.4.4.zip的样例菜单menu.lst里对0PE.ISO、MicroPE.ISO、pmagic.iso的合盘调用
2、grub4dos每个菜单项加载一个外置菜单,每个PE提供一个外置菜单负责对其本身的加载。
菜单项的写法参考0PE5.1版的grldr内置菜单。
其中第二种方法合盘最科学。
现在许多PE都支持grub4dos引导,也就必然有其grub4dos菜单,这个菜单可以随意命名,随意放置,合盘时调用它最省事。
原帖由 wind_fsm 于 2009-5-11 01:38 发表
你说的第一种方法未成功加载 ISO 中外置程序,不知是否有解决方法
第二种方法我还没有看明白,MENU.0PE 好复杂, read、write、checkrange命令还是第一次见,可否告知哪儿有这些命令的详细说明?
另外先问一下这种方法能够直接调用 ISO 文件中外置程序还是需要把内核和外置程序提取出来使用?
原帖由 pseudo 于 2009-5-11 16:11 发表
http://docs.google.com/Doc?id=dgs4zmw5_19cwmvb8f4
这里有checkrange RANGE read ADDR等说明,官方grub4dos-0.4.4.zip里是英文的README_GRUB4DOS.txt。

第一种方法加载iso找外置问题,要看具体的PE是否支持这种整体启动iso的方式,是否允许外置程序放在iso内。这方面问题参见http://bbs.wuyou.net/forum.php?mod=viewthread&tid=137686&highlight=
对于不支持iso整体启动的,一般可以将外置程序移出iso外,这样才有可能找到。
例如老毛桃911PE,可在合盘根目录建立MINIPE子目录,放入OP.WIM,其它东西在iso内。WINPE.INI文件里
MOUN %CurDrv%\MINIPE\OP.WIM,B:,1
句改为
MOUN \MINIPE\OP.WIM,B:,1
也可能不用改,我没试过,凭空说的。
你在grub4dos合盘菜单中只需加载iso即可,那些SETUPLDR.BIN之类眼不见心不烦。
凡提供可启动光盘映像iso的pe,一般都可以类似处理。

第二种方法是在合盘菜单中调用各pe提供的菜单,后者由各pe提供,例如MENU.0PE,菜单内容不管复杂简单你都不用操心,菜单名字、位置你都可以改它,如果它是内置于grldr的就设法提取,然后删掉它的grldr。
合盘要做的事是将个pe的文件原样收集在一起(如果有同目录、同名文件冲突得适当处理),然后在合盘菜单中简单写上一行,例如
configfile /0PE/MENU.0PE
即可
凡支持grub4dos引导的pe,一般都可以这样合盘。
原帖由 guoqqqqqq 于 2009-5-11 16:30 发表
解释得很详细,学习了。尤其是把外置程序移出iso外,的确是经验之谈。
原帖由 wind_fsm 于 2009-5-12 00:19 发表
谢谢解释,明白了,http://bbs.wuyou.net/forum.php?mod=viewthread&tid=137686&highlight学习中
刚才用天琴星座 PE090218 测试了第一种方法,只要把 MINIPE 目录移出 ISO 外,不用修改 WINPE.INI,就可以加载外置了,这样对于使用不同外置目录或文件名的PE合盘可是简单多了,存在一个问题是对于两个使用相同外置目录和文件名的 PE 合并需要修改 PECMD.INI
这也是在第二种方法中存在的问题,也就是你说的“如果有同目录、同名文件冲突得适当处理”其中一种情况
第二种方法如果 SETUPLDR.BIN 同目录且同名或者调用的 WINNT.XPE 同目录且同名应该也需要修改 SETUPLDR.BIN
感觉第二种方法多个子菜单的做法比较好,菜单结构很清楚
#3已增加引用
原帖由 pseudo 发表
SETUPLDR.BIN、WINNT.XPE 、WINPE.INI同目录同名也没什么大不了的。
你放一份公用的,各pe的换个地方放(例如一个pe占一个目录的话,就搬到其目录下),选中这个pe时,将其复制一份覆盖公用的,使之变成专用的,然后再继续就行。
grub4dos菜单中可以用dd命令进行复制。注意目标文件体积应不小于源文件体积,像WINPE.INI,你事先准备一个足够大的空文件做目标文件。
如果楼主看过0PE的体系结构,这种空文件就是我说的“容器”。
chenall大师给出过共用一个SETUPLDR.BIN,动态修改部分字节的方法,可以节省体积,但合盘时不很讲究这点体积,整个覆盖就行,源文件由各pe提供,别管它里面是什么内容。这样对多个pe方式很统一。

---------------
哦,忘了,覆盖WINPE.INI的办法不是可写介质的话有点麻烦。
SETUPLDR.BIN可在内存中修改。
原帖由 haiuyan 于 2009-5-11 09:03 发表
确是, 如你的0PE, 内容全在0PE下, 合盘方便, 目录清爽!
但其他PE就不好办, 都是miniPE目录, 合盘需要改好多地方.
chenall的PE, 还有wxpe目录, 根目录下还有文件, 如果也能改成全在micrope目录下就好了.
原帖由 haiuyan 于 2009-5-11 09:09 发表
楼主的PE已经定型, 不知道是否可以这样修改一下:
如0PE一样, 所有的内容全在一个目录下, 如microPE(或CPE), 这样合盘方便, 目录清爽!
和0PE一样即可以iso启动, 也可以调用一个二级菜单启动.
当然micrope现在也可以这样两种方式启动, 可现在除了miniPE目录, 还有wxpe目录, 根目录下还有文件, 合盘的话就显的太乱了, 如果能改成上面提议的就好了.
[ 本帖最后由 haiuyan 于 2009-5-11 09:13 编辑 ]
原帖由 chenall 于 2009-5-11 12:57 发表
使用合盘的话,使用ISO不是更清爽?
因为考虑到外置共同,也不想再改了/
如果想合盘又要清爽可以考虑使用以下方法.
因为光盘上的文件一定是连续存放的所以直接启动ISO就可以了.
只需要WXPE/MINIPE这两个目录和根目录下的文件打包成MICROPE.ISO放在光盘的BOOT目录下.
外置程序可以放在光盘根目录下或一并打包进去(不推荐)
启动也简单,只需调用这个ISO启动就可以了.
title MicroPE
map /BOOT/MICROPE.ISO (0xff)
map --hook
chainloader (0xff)

0PE与MicroPE、MaxDos合盘菜单,包括了对整个iso、对子菜单等调用方式。
其中一些语句是为pxe启动用的,仅本地启动时可简化。

;Grub4Dos menu.lst  by Pseudo 2009.5.1
;为加速pxe启动直接调用/0PE/MENU.0PE。想显示gfxmenu菜单,可使用NotExist
;checkrange 0x21 read 0x8280 && pxe detect NotExist
checkrange 0x21 read 0x8280 && pxe detect /0PE/MENU.0PE
checkrange 0x21 read 0x8280 && rootnoverify (pd)
find --set-root --ignore-floppies /MESSAGE.GZ
timeout 8
default 1
gfxmenu /MESSAGE.GZ
color blue/green yellow/red white/magenta white/magenta
title
fallback 5
find --set-root /0PE/0PE.ISO || rootnoverify (pd)
map /0PE/0PE.ISO (0xff) || map --mem /0PE/0PE.ISO (0xff)
map --hook && chainloader (0xff)
title         [1]    0PE by Pseudo
fallback 0
find --set-root /0PE/MENU.0PE || rootnoverify (pd)
configfile /0PE/MENU.0PE
title         [2]    MicroPE by Chenall
fallback 5
find --set-root /BOOT/MICROPE.ISO
map /BOOT/MICROPE.ISO (0xff) || map --mem /BOOT/MICROPE.ISO (0xff)
map --hook
chainloader (0xff)
title         [3]    Windows NT/2K/XP
fallback 4
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr
title         [4]    Windows VISTA
fallback 5
find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /bootmgr
title         [5]    MAXDOS.IMG
find --set-root --ignore-floppies /BOOT/MAXDOS.IMG
map --mem /BOOT/MAXDOS.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

[ 本帖最后由 pseudo 于 2009-5-12 02:52 编辑 ]
2#
发表于 2009-5-12 09:14:37 | 只看该作者
pseudo大 写的文章就是清爽,非常规范。
回来再慢慢看。
回复

使用道具 举报

3#
发表于 2009-5-12 10:51:17 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

4#
发表于 2009-5-13 10:24:17 | 只看该作者
呵呵,pseudo 兄的 〇pe 很强大,从你那儿能学到很多技术,我整理的东西都是很普通的应用,有点常识的看看基本就明白了

使用“容器”的方法很好的解决了同名问题,你说的“覆盖WINPE.INI的办法不是可写介质的话有点麻烦。SETUPLDR.BIN可在内存中修改。”问题如果能比较容易的实现,那这种方法就是最简单的方法了
回复

使用道具 举报

5#
发表于 2009-5-13 10:28:51 | 只看该作者

回复 #3 mazrmc 的帖子

SETUPRAM.BIN 中不但定义了 BOOT\RAMPE, 也定义了 WXPE 这个默认的系统目录,也就是说 SETUPRAM.BIN 先找  BOOT\RAMPE,如果找不到就从 WXPE 目录启动,这个目录应该可以修改,但是不是有字符数的限制,如只能是 4 个字符就不知道了
回复

使用道具 举报

6#
发表于 2009-5-13 12:01:26 | 只看该作者
很喜欢楼主的发帖风格
回复

使用道具 举报

7#
发表于 2009-5-14 20:18:15 | 只看该作者
这个帖子很不错,收藏学习。
回复

使用道具 举报

8#
发表于 2009-5-17 19:47:09 | 只看该作者
楼主问你个问题,请你解惑:||和 && 在grub4dos中的含义?麻烦解释下
回复

使用道具 举报

9#
 楼主| 发表于 2009-5-17 21:16:54 | 只看该作者

回复 #8 devilma 的帖子

http://nufans.net/grub4dos/下载grub4dos-0.4.4.zip,里面有个README_GRUB4DOS.txt,对此有介绍:
******************************************************************************
***              Newly implemented operators `&&' and `||'                 ***
******************************************************************************

This implementation is very simple. It does not handle operator nesting.

Usage of `&&':

        command1 && command2

Description:

        If command1 returns true, then command2 will be executed.

Usage of `||':

        command1 || command2

Description:

        If command1 returns false, then command2 will be executed.

Examples:

        is64bit && default 0
        is64bit || default 1
回复

使用道具 举报

10#
发表于 2009-5-18 01:42:27 | 只看该作者
谢谢,貌似这两天下不了,好像服务器有问题啊
回复

使用道具 举报

11#
发表于 2009-5-18 23:50:29 | 只看该作者
楼主,有没有现成的合盘下载?基本明白测试下
回复

使用道具 举报

12#
发表于 2009-5-27 17:05:52 | 只看该作者
o(∩_∩)o...哈哈,我也研究一下基于grub4dos的合盘
回复

使用道具 举报

13#
 楼主| 发表于 2009-11-13 15:02:06 | 只看该作者

新的突破

使用grub4dos-0.4.4-2009-11-13.zip的--replace功能,可以方便修改文件,如果介质不可写,可考虑载入内存后修改。其意义在于在一定程度上使grub4dos支持了变量功能。

至少就”合盘“而言,这是重要突破。合盘者得研究一下了。

原帖由 chenall 于 2009-11-12 23:35 发表
...
说明下为什么要加这个功能,主要是为了使用方便,像启动PE1.X时。还有需要使用变量的时候可以把文件先加载到内存然后替换掉。
比如要把几个PE1.X合在一起,按照以前的方式,需要多个启动文件(SETUPLDR.BIN)。
有了这个就不需要了,呵呵
只要一个SETUPLDR.BIN就通用(这个SETUPLDR.BIN需要没有自校验)。
一个例子(未测试,理论上可用)
title WXPE and WINNT.XPE
map --mem /WXPE/SETUPLDR.BIN (rd)
cat --locate=I386 --replace=WXPE (rd)+1
cat --locate=WINNT.SIF --replace=WINNT.XPE (rd)+1
chainloader (rd)+1
root ()

title TYPE and TYPE.XPE
map --mem /WXPE/SETUPLDR.BIN (rd)
cat --locate=I386 --replace=TYPE (rd)+1
cat --locate=WINNT.SIF --replace=TYPE.XPE (rd)+1
chainloader (rd)+1
root ()
回复

使用道具 举报

14#
发表于 2009-11-13 15:39:19 | 只看该作者
可以精简setupldr.bin了,确实是一个新突破
回复

使用道具 举报

15#
发表于 2009-11-13 21:46:56 | 只看该作者
学习,找时间尝试一下。
回复

使用道具 举报

16#
 楼主| 发表于 2009-11-14 19:33:54 | 只看该作者
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-28 02:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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