无忧启动论坛

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

【转】MBR 嵌入微型 grub (2010年12月19日更新,不点大师加菜单)

[复制链接]
跳转到指定楼层
1#
发表于 2010-6-15 05:31:33 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本文和所有文件来自时空论坛“不点”大师!在此致谢!

这个 grldr 的头部不再是 16 扇区,而是 2 个扇区。只有这样,体积才可能减小到 63 扇区以内。

现在说说这个新的 GRLDR 精简版的结构:

1。第一扇区是为了放置在 MBR 上的。你只需要将开头的 440 个字节复制到 MBR 就可以了。分区表当然不能被破坏,这和以前的做法是一样的。

2。第二扇区仍然是为了备份先前的 MBR,这个也与以前一样,不多说了。

从第三扇区,一直到文件结尾,就是放置在 MBR 上的相应扇区上的。也就是说,MBR 为第一扇区,紧接着是第二扇区(放置先前的 MBR 的备份),再接着,就是第三扇区,放置的当然应该是 GRLDR 的第三扇区以后的全部扇区(总共放置的扇区数不超过 63 个,因为 GRLDR 的长度就在 63 扇区以内)。

大家先在虚拟机下测试,以免有什么 bug 把你的硬盘破坏掉,那我可不负责。

然后,再说说 grldr 文件结尾处的 echo weeeee 命令。这仅仅是一条测试用的命令。你在这里放置任何命令都可以的。grldr 启动之后,首先就要执行这里的命令序列。是的,很多命令都可以放在这里,不同的命令之间,用回车或者换行分隔都可以。

如果你放置的是如下两条命令:
复制内容到剪贴板代码:
find --set-root /grldr
/grldr
那么启动时会自动寻找 grldr,如果找到,就启动 grldr。当然这个 grldr 就是常规的、非精简版的 grldr 了。而精简版的 grldr 是不能用这种方法来启动的。


一个附带的特性,这次把 grldr 放在任意深的目录下是可能的了: 复制内容到剪贴板 代码:find --set-root /boot/grub/grldr
/boot/grub/grldr

得益于 find 的查找功能。好多人以前希望 grldr 不放在根目录,那时候是不可能做到的。现在可以了。而且也支持 ext4 分区的 grldr 文件(当然任何别的文件也一样)的查找了。


需要说明,精简版不支持 title 等命令,也不支持 && 和 || 逻辑符号。其实只支持 root, find, command 这三条内部命令。其他的都是外部命令。例如,grldr,grub.exe,ntldr,bootmgr,vmlinuz,io.sys,kernel.sys,echo 等,统统都是外部命令。


提醒一下:不要安装在 U 盘的 MBR 上。有很多主板对于 U 盘不使用 LBA 模式。而我们这个精简版的 GRLDR 只支持 LBA 模式,而完全不支持 CHS 模式。所以,放在 U 盘就不行了。当然,如果你知道你的主板 BIOS 在你的 U 盘上确实提供了 LBA 支持,那倒是可以试一试的。


新版本到 http://nufans.net/grub4dos/wee/ 底下

原文地址:  
http://bbs.znpc.net/viewthread.php?tid=5838&extra=page%3D1
--------------------2010年12月19日更新-----------------------------

地址:http://nufans.net/grub4dos/wee/
菜单如下:
(最大支持20个菜单条,恳请各位测试反馈)

title                            WDC-500G-wee
clear
title                            01  WinXP
root (hd0,1)
+1
title                            02  WIN7
root (hd0,0)
+1
title                            03  D_PAN
root (hd0,4)
+1
title                            04  E_PAN
root (hd0,5)
+1
title                            05  XORLDR
52628941+1
title                            06  GRLDR
2104000+490
title                            07  FBINST.MBR
557134253+1
title                            08  PLoP Boot Manager
2103900+100
title                            09  GMY-GHOST
/memdisk /ghost.img img raw
title                            10  SYSLINUX
find --set-root /boot/IBM.ICO
+1
title                            11  SSXF-WinPE
find --set-root /boot/SSXFLDR
/boot/SSXFLDR
title                            12  SSHY-WINPE
find --set-root /boot/SSHYLDR
/boot/SSHYLDR
title                            13  VISTA
find --set-root /boot/IBM.ICO
/boot/bootmgr
title                            14  SKTQB
2101000+480
title                            15  WIN NT/2003/XP
find --set-root /NTLDR
/NTLDR
title                            16  Win7/VISTA
find --set-root /BOOTMGR
/BOOTMGR
title                            17  WinPE.ISO
/memdisk /winpe.iso iso raw


注意:
1.不要用chainloader 命令,仿上述命令即可!
2.也请各位测试

title                            03  D_PAN
rootnoverify (hd0,4)
+1
title                            04  E_PAN
rootnoverify (hd0,5)
+1

即 rootnoverify 命令是否有问题?








3. 【改造】可以将U盘可见分区的BPB复制到MBR,可能提高安装到U盘的启动兼容性。
如果U盘启动电脑成功,则不需复制BPB如果U盘启动失败,再试试这个方法。欢迎大家测试反馈!
将可见分区(最好是FAT分区)的引导扇区从偏移0X02到偏移0X59止,复制到MBR的0X02到偏移0X59后再按不点大师指导的方法稍作修改即可!
【不点大师指正:BPB 是促使某些 USB 的主板识别 USB 设备的。有些主板需要 BPB。而有些主板,不喜欢 BPB,有了 BPB,它反而会失败了。另外,既然是欺骗主板的,那么 BPB 是不是就要做得很像呢?比如说,位于 0x1C 处的四字节的“hidden sectors”(隐藏扇区数)域,应该清零,才算是一个合法的软盘引导扇区。在第一扇区上的 BPB,其实就是模仿软盘。同时,位于 0x0E 处的两字节的“reserved sectors”(保留扇区数),应该指向第一分区的 FAT 表的开头,此时第一分区最好也应该是 FAT 格式的,这样更容易欺骗成功。通常,第一分区起始于扇区号 63。隐藏扇区数,加上保留扇区数,就是 FAT 表的起始扇区的号码。所以,很容易算出来。那么,位于 MBR 上的 BPB 中的隐藏扇区数,加上保留扇区数,也应该等于 FAT 表的起始扇区号才算完美。不过,有时候(隐藏扇区数和保留扇区数)两者加起来超过了 2 个字节,那就没办法了,没法写入保留扇区数中了,因为保留扇区数只有两个字节的空间。这时,你可以随便设置一个保留扇区数,不过,应该至少是 64(也就是十六进制的 0x40)。而前面已经解释过了,MBR 上的隐藏扇区数应该是 00 00 00 00,只有这样才算一个完全的欺骗。但是,欺骗得完全,不一定能提高启动的成功率。这就要靠实践来证实了。




4. 【应用之绝对扇区启动】
将某文件写入绝对扇区,如:plpbt.bin,位置是8388000扇区,大小约85个扇区
菜单写入:command (hd0)8388000+85    (注意command后空一格)
即可从本机启动plpbt.bin。。。目的是加载USB启动

【其他】若想启动grldr完整版也可以,类似:
command (hd0)X+Y                                         X是grldr的绝对扇区位置,Y grldr占用扇区数
目的是系统或分区损坏,从绝对扇区启动加以维护。。




  
请大家测试反馈,谢谢!


















[ 本帖最后由 天涯海角1216 于 2010-12-21 14:13 编辑 ]

WDC-500G-wee_20101219.rar

18.42 KB, 下载次数: 243, 下载积分: 无忧币 -2

用BOOTICE恢复,勾选“保留磁盘签名和分区表不变”切记!

memdisk.rar

12.68 KB, 下载次数: 193, 下载积分: 无忧币 -2

83#
发表于 2011-3-30 22:29:02 | 只看该作者
原帖由 天涯海角1216 于 2010-6-15 05:32 发表
留空,等待反馈!。。。。。。。。。。。


你还可以将分区PBR备份为:c.bin(1个扇区即可),放在根目录
用:
find --set-root /c.bin
/c.bin
即可成功启动该分区


find --set-root /boot/IBM.IC ...


可以启动linux吗?
回复

使用道具 举报

82#
发表于 2010-12-21 09:50:20 | 只看该作者
已经更新,修正菜单导入出错的BUG.

https://www.sugarsync.com/pf/D601052_6893493_25562
回复

使用道具 举报

81#
发表于 2010-12-20 14:26:40 | 只看该作者
原帖由 xiaoy 于 2010-12-19 13:35 发表

有没有静默安装参数


由于这种操作是比较危险的,所以不提供这个参数..
你可以自己修改脚本,把检测按键的代码删除
类似如下的句字就是检测按键的.
checkrange 0x59,0x79 pause || goto :failed
回复

使用道具 举报

80#
发表于 2010-12-19 13:35:33 | 只看该作者
原帖由 chenall 于 2010-12-18 16:48 发表
写了一个instwee的脚本,可以在GRUB4DOS环境下安装WEE到硬盘.

有没有静默安装参数
回复

使用道具 举报

79#
发表于 2010-12-19 13:28:17 | 只看该作者
真是深不可测啊,叹服了!
回复

使用道具 举报

78#
发表于 2010-12-18 17:10:11 | 只看该作者
C大就是厉害,以后安装WEE就这么简单。instwee就作为外部命令了。
没有启动不了的电脑了。
回复

使用道具 举报

77#
发表于 2010-12-18 16:48:50 | 只看该作者
写了一个instwee的脚本,可以在GRUB4DOS环境下安装WEE到硬盘.

并且可以替换内置菜单.

具体见
http://bbs.znpc.net/viewthread.php
或我的搏客.

脚本下载
https://www.sugarsync.com/pf/D601052_6893493_13533

把wee63.mbr放在/boot/grub目录下.
使用以下命令就可以安装到第一硬盘上了
weeinst 0

要改内置菜单只要写一个菜单文件menu.wee放到wee63.mbr同目录下.安装的时候自动处理.
回复

使用道具 举报

76#
发表于 2010-12-17 13:51:43 | 只看该作者
天涯海角大大搞出来的东东就是高深,不过,我得花上时间去探究了!谢谢楼主分享! 你是我们的学习的榜样!
回复

使用道具 举报

75#
 楼主| 发表于 2010-12-16 17:28:33 | 只看该作者
新版已到,请各位测试反馈!
谢谢!
回复

使用道具 举报

74#
发表于 2010-12-13 14:06:38 | 只看该作者
原帖由 天涯海角1216 于 2010-12-13 13:31 发表
哦,刚看了!
不过这个菜单目前还不会编写呢,呵呵
跟G4D一樣是用title喔
回复

使用道具 举报

73#
 楼主| 发表于 2010-12-13 13:31:26 | 只看该作者

回复 #72 2010roytam1 的帖子

哦,刚看了!
不过这个菜单目前还不会编写呢,呵呵
回复

使用道具 举报

72#
发表于 2010-12-13 09:39:31 | 只看该作者
頂!!
現在新版有真正的菜單了!
原帖由 不点 于 2010-12-13 03:32 发表
wee 的简单菜单已经实现。前面提到的 realmode_run 函数也同时实现了。使用者需要自己仿照 chenall 的 grub4dos.h 来写个 prototype,才可以真正开始使用 realmode_run 函数。使用者应该仔细研究 asm.S 结尾处的函数定义。
回复

使用道具 举报

71#
发表于 2010-9-29 09:58:22 | 只看该作者
Marker一下值得学习!
回复

使用道具 举报

70#
发表于 2010-7-6 13:22:50 | 只看该作者

回复 #69 baby102 的帖子

区别很大   深度的远程启动管理器是做PXE启动用  这个是本地启动用
回复

使用道具 举报

69#
发表于 2010-7-6 11:53:24 | 只看该作者
在这里学习,好多看不懂。汗!
不知这个和深度的远程启动管理器有什么区别?
回复

使用道具 举报

68#
发表于 2010-7-4 21:43:09 | 只看该作者
哦,这个思路挺清晰的,容易明白了。看来还是应该设计一个简单的菜单系统,就像 DOS 的菜单那样简单即可。不追求多么花哨、多么的可定制,只要能够使用便可。不知谁有时间来做一做。
回复

使用道具 举报

67#
 楼主| 发表于 2010-7-4 19:08:26 | 只看该作者

回复 #65 不点 的帖子

有了括号,我们就详细知道该绝对扇区启动的文件,wee却不知道了,所以写屏。
我们就可以将其列举的菜单中想启动项再输入即可了。。
回复

使用道具 举报

66#
 楼主| 发表于 2010-7-4 19:02:14 | 只看该作者

回复 #65 不点 的帖子

回不点大师:
我的意思是:让wee遇到错误文件名(加个括号内的注释,wee肯定找不到了),从而不执行,这样便可以将所有的启动项列出,相当于打印出菜单了。


1+1(ntldr)
63+1(XP)
12685680+1(xorldr)
51324855+468(grldr)
42627991+480(sktqb)
13212175+88(Plop.bin)
12544467+580(setupldr.bin)
回复

使用道具 举报

65#
发表于 2010-7-4 18:53:42 | 只看该作者
增加的 exit 命令,本来的目的,只是方便用户从自己写的 32位可执行程序中调用 enter_cmdline 函数的。如果没有 exit 命令,则 enter_cmdline 无法返回到用户自己的32位程序中。有了 exit 命令,enter_cmdline 就可以结束了,控制将能够返回到调用者。

可是天涯海角1216 兄的exit,我还没明白有什么用。

——哦!是不是只要第一条命令是 exit,整个菜单就不会执行了?反正感觉很奇怪,一头雾水。
回复

使用道具 举报

64#
发表于 2010-7-4 18:53:26 | 只看该作者

回复 #61 不点 的帖子

回不点大师  具体哪一段被改写了我还真没来的及看  测试出错后就直接保存扇区传上来了

不是有时改写  有时自动复原  是写入Wee后开始几次正常  再启动就报mem fail  以后的几次也都是mem fail  没有成功的  有什么规律我也不知道

U盘没有写保护  也没有用diskpart设置磁盘只读  病毒的原因应该不太可能  那台机子很少有人用  U盘也确认没有病毒
回复

使用道具 举报

63#
发表于 2010-7-4 13:29:48 | 只看该作者
大家一起学习啊 GRUB 很好用的
回复

使用道具 举报

62#
 楼主| 发表于 2010-7-4 09:15:03 | 只看该作者

回复 #61 不点 的帖子

我写了加载菜单方法:
将如下内容写入wee的尾部菜单处,这样启动后可以显示(写入绝对扇区位置+该文件占用扇区数),需启动哪个,只需写入XX+YY即可!欢迎批评指正!

exit
1+1(ntldr)------------------------------绝对扇区位置+该文件占用扇区数
exit
63+1(XP)
exit
12685680+1(xorldr)
exit
51324855+468(grldr)
exit
42627991+480(sktqb)
exit
13212175+88(Plop.bin)
exit
12544467+580(setupldr.bin)

请不点大师指正!谢谢!
回复

使用道具 举报

61#
发表于 2010-7-4 07:19:48 | 只看该作者
很抱歉,我最近没有时间。而关于对比扇区字节的事情,这谁都能做。你只要报告,有多少个字节被改写了,起始于何处,终止于何处。改写的规律是什么?为什么有时改写,有时又自动复原了?另外,U 盘有防写开关(写保护),是不是不起作用?或者你根本就没有试验?除了BIOS 会改写以外,会不会是病毒干的?
回复

使用道具 举报

60#
发表于 2010-7-2 12:25:51 | 只看该作者

回复 #58 不点 的帖子

很郁闷的问题  今天再用那个写入Wee的U盘启动那台古董机居然成功了  没有提示fail  引导进了grldr  试了好几次都没能重现昨天的错误

======================================

刚刚又试了下  这次重现了  附件里是扇区备份  确实被改写了  不点大师看看吧

normal.bin是写入Wee后的备份  error.bin是出错后扇区的备份

[ 本帖最后由 sratlf 于 2010-7-2 17:29 编辑 ]

Desktop.rar

63.08 KB, 下载次数: 53, 下载积分: 无忧币 -2

回复

使用道具 举报

59#
发表于 2010-7-1 23:44:03 | 只看该作者

回复 #58 不点 的帖子

哦  理解错误  以为会在提示Urr! wee... 后再提示mem fail

mem fail无限循环那个我也比较怀疑  所以想问问这种出错是否正常  现在看来问题还不少

我尽量抽时间再用U盘试一下  把前后两次63扇区内容传上来
回复

使用道具 举报

58#
发表于 2010-7-1 21:44:59 | 只看该作者
到显示 mem fail 的时候,就已经表明,61 扇区的 pre_stage2 核心代码已经开始执行了。前面已经解释了,这就表示,LBA 是支持的。

如果显示的是 Urr! wee... ,那么接下来就是一个 jump 到自己的无限循环,必须 ctrl+alt+del 才能启动。

其实,显示 mem fail 之后,也是一个 jump 到自己的无限循环,必须 ctrl+alt+del 才能启动。只是不知道究竟为何出现混乱的局面。怀疑 U 盘的磁道被写入了什么信息,破坏了 wee 的代码,导致混乱的发生。

当然,wee 出现 bug 的可能性也有。懂得汇编语言的朋友不妨帮助调试一下,找出问题的根源,解决它。

---------------

wee 考虑加强对 ebios 的支持,放弃对于 CHS 模式的普通 BIOS 调用的支持,是一个无奈的举动。同时也是一种努力(尽管可能是微不足道的努力),希望(从某种程度上)促成 LBA(EBIOS)的普遍采用。EBIOS 在硬盘上早已被支持了,然而对于本来就没有“磁头”“柱面”以及“磁道”的 USB 设备来说,却仍旧采用 CHS 而不支持 LBA,那确实是一件很值得怀疑的事情,显然制造商们把问题搞得太复杂了。LBA 属于线性地址,没有扭曲的三维几何地址的变化。应该来说,支持 LBA 是最容易的一件事情。LBA 是一维的线性地址结构,而 CHS 则是三维的立体地址结构。当然,LBA 最简单。

[ 本帖最后由 不点 于 2010-7-1 22:11 编辑 ]
回复

使用道具 举报

57#
发表于 2010-7-1 20:42:45 | 只看该作者

回复 #56 不点 的帖子

回不点大师

古董机内存是256M  BIOS支不支持LBA我也不太清楚  是台联想品牌机  这台还好点  能USB启动  同批的其他联想机连USB启动都没有

出错信息Urr! wee... 这个是一直有还是只有第一行提示  因为出现mem fail后一直在刷屏  我不确定错误提示第一行是什么

改写U盘扇区那个我再看看  用Wee出现问题   用grldr.mbr就没有问题  能正常启动  

还有就是这台机子的U口是1.1的  速度不是一般的慢  后置U口还有问题  只能用前置U口  不知道和这个有没有关系
回复

使用道具 举报

56#
发表于 2010-7-1 19:54:13 | 只看该作者
有迹象表明,笔记本的 USB BIOS 似乎倾向于支持 LBA。那么,在笔记本下使用 wee,估计有一定的成功机会。

wee 不打算支持内存很少的古董机。我记不太清楚,好像内存低于 60M,就要出错了,错误信息确实是 mem fail。

当初想把 wee 的 32 位代码放置在扩展内存的最高端,所以,就需要探测内存量,并且拒绝那些内存太少的机器来使用 wee。但是现在,其实放弃了将 32 位代码放置在扩展内存顶端的努力,所以,此时已经不需要限制内存量了。但是,32 M 的内存还是需要的,因为外部的程序需要从 16M 处开始运行,所以,32M 是一个必须的配置。因此,要求 60M 也不算过分。所以,也就不用改了。你的内存有多大?或者虽然内存足够大,但 BIOS 却不支持 int15/EAX=E820h 这个内存规范,那么 wee 也就无法知道内存的总量了,于是也要出错 mem fail。古董往往正是缺乏对 int15/e820 的支持的。将来我们可以取消这个测试,不再管这些内存总量的问题了,那样,兼容性会提高。

如果 BIOS 本来就不支持 LBA(EBIOS),那么,wee 在第一扇区中的出错信息 Urr! wee... 就会显示出来的。看来你的古董机竟然也能够支持 LBA。因为已经装入了后续的 61 扇区。只要能够装入后续的 61 扇区,那就表明,LBA(EBIOS)是支持的。如果不能装入后续的 61 扇区,那就会显示 Urr! wee...

LBA 的支持,对于 wee 来说是很重要的。wee 永远不会调用 CHS 的功能,所以,一个假想中的 BIOS,完全可以没有 CHS 的支持,只要支持 EBIOS 的功能,便可以正常使用 wee 这个操作系统了。wee 从第一扇区 MBR 开始,就不再调用 CHS 的功能,而完完全全调用纯粹的 EBIOS 功能。因此,wee 可以用来检验一个 BIOS 是否支持 EBIOS 的基本功能。

有的 BIOS 会不会把 U 盘的扇区破坏掉?所以才出现你所说的问题?这有待你进一步确认。很有可能,BIOS 在启动过程中,向 U 盘的开头写入了不该写入的信息。这或许是 BUG,或许是某种未公开的秘密。
回复

使用道具 举报

55#
发表于 2010-7-1 16:48:28 | 只看该作者
收藏学习谢谢提供新知识
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-3 17:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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