无忧启动论坛

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

准备基于 fbinst 进行再开发,请各位提供帮助

    [复制链接]
跳转到指定楼层
1#
发表于 2013-12-6 19:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 不点 于 2024-10-19 21:10 编辑

有谁以前曾经做了 fbinst 的工作,请把最新的源代码上载到这里(或者给个下载地址)。我将在诸位最新代码的基础上进行开发。



由于新版添加了 html 格式的启动映像生成工具,因此下面这些使用说明就没有多大用处了(可作为历史资料查阅)。以前的安装图解体积太大,放在这里不合适,也已经挪到这里了:http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=320244&pid=3286903&fromuid=250692  (即,大约在本主题 373 楼的位置)万一有人需要的话,还可以点击进去查看。

新版使用方法:用火狐浏览器打开其中的 index.html 网页文件,并按照提示进行操作。



简要使用说明

压缩包里面含有若干 IMG 文件,分别用于 8G、16G、32G、64G 和 128G 的可启动磁盘。

请用 BOOTICE 的 “扇区编辑” 功能,把相应的文件(例如 mbr_16G.img)导入到 U 盘(导入时要勾掉“保留磁盘签名和分区表不变”,就是说,不要勾上,要把勾去掉),覆盖掉 U 盘原有的内容。提示:
编译时,用户可以使用任何版本的 grldr。只需把 grldr 替换掉,然后敲入 make 命令重新编译即可。

!!注意不要阴差阳错把硬盘毁掉!!

导入后,U 盘就已经含有一个 FAT32 主分区。它是启动分区,已经格式化了,不要对其再次格式化。如果把它格式化,那就会抹掉 “多重 MBR” 的启动代码,所制作的启动盘也变成无效的了。你可以向这个分区的根目录拷贝 menu.lst 文件,启动后,它将被 grldr 执行。
【2015-12-04 更新】你也可以拷贝你自己的 GRLDR 文件到根目录,启动后,这个 GRLDR 文件将获得控制权。就根目录下的 grldr 而言,你可以使用老版本的 grldr,也可以使用新版本的 grldr;你可以使用 0.4.5 系列的,也可以使用 0.4.6 系列的。根目录下的 grldr(如果存在的话),是用来让编译时内置的 grldr 进行调用的。编译时内置的 grldr,当它将控制权传递给根目录下的 grldr 之后,就完成任务了(不再起作用了)。因此,根目录下的 grldr(如果存在的话)将取代编译时内置的 GRLDR 完成后续的启动步骤。

0pe 的用户只需把 0pe 里面的 menu.lst 和 0pe.iso 复制到 U 盘根目录即可。以后每次更新 0pe,都只需更新 menu.lst 和 0pe.iso 这两个文件,无需重新制作可启动 U 盘。旧版的 0pe 可能需要在 U 盘根目录下放置一个与 0pe 匹配的 grldr 文件,否则 0pe 可能无法正常工作。

如何让这个 U 盘支持 EFI 启动?

只需把 0pe 里面的 EFI 目录拷贝到这个 U 盘的根目录,即可在支持 EFI 启动的机器上启动 EFI 目录下的 PE(比如 Win7pe 或 Win10pe)。

建议使用 16G 或更大的 U 盘来作为 “多重 MBR” 启动盘。

为防止 Win7、Win8 把这个 U 盘的 FAT32 文件系统搞乱,请按以下步骤纠正 “总扇区数” 错误,也就是让分区表和 BPB 表上的 “总扇区数” 参数与 U 盘实际的大小相匹配。

说明:diskgen 可以纠正分区表上的总扇区数错误,但遗憾的是,diskgen 不能纠正 BPB 表上的总扇区数错误。这两个错误都必须纠正,然后才可以安全地在 Win7、Win8 下使用。纠正的具体步骤如下:

1、在上述 BOOTICE 的导入步骤完成并退出 BOOTICE 后,现在进入 diskgen,让它去读 U 盘,此时 diskgen 会发现 U 盘的总扇区数错误,并询问是否纠正错误。让它纠正,保存所做的更改,退出 diskgen。【注意】先前的 BOOTICE 的导入步骤完成后不要插拔 U 盘,而应该直接进入 diskgen 进行纠正。下面的第 2 步,同样不要插拔 U 盘。待到这两个纠正的步骤都圆满完成之后,再从资源管理器中卸载 U 盘即可。成功卸载之后可以拔出 U 盘。

2、再次打开 BOOTICE,选择 U 盘,用 “扇区编辑” 功能,将扇区 0(扇区0 就是 U 盘的 MBR 扇区) 的分区表上的分区总扇区数(即分区长度,在偏移 0x1CA 处的四个字节)记录下来。它其实就是刚才 diskgen 纠正后的值,这是正确的值。然后选择扇区 63(扇区 63 就是 U 盘的 FAT32 文件系统的首扇区,也称为 PBR 扇区),将 BPB 表上的总扇区数(偏移 0x20 处的四个字节)纠正为刚才所记录的分区总扇区数。其他数据都不用改动。完成后,保存更改,退出 BOOTICE。最后从 Windows 系统中卸载 U 盘,这就可以拔出 U 盘了。【注意】如果您不熟悉分区表和 BPB 的结构,请您放弃,不要胡乱操作。这主要是为了保证安全,尽量避免阴差阳错伤害到您的硬盘。






2017 年 4 月 2 日更新:

本次变更:更新内置的 GRLDR 为 0.4.6a-2017-03-30 最新版;MultiMBR Booter 网页程序添加调试出错对话框,提醒出错时该如何处理。


multimbr.7z.zip

1.28 MB, 下载次数: 298, 下载积分: 无忧币 -2

更新 GRLDR 至 0.4.6a-2017-03-30;MultiMBR Booter 添加出错处理提示信息。

multimbr.zip

1.04 MB, 下载次数: 108, 下载积分: 无忧币 -2

更新 GRLDR 至 0.4.6a-2020-03-04

multimbr.zip

1 MB, 下载次数: 28, 下载积分: 无忧币 -2

添加对 chrome 浏览器的支持

评分

参与人数 8无忧币 +40 收起 理由
weijun189 + 5 赞一个!
有阴也有阳 + 5 赞一个!
糊涂 + 5 赞一个!
zds1210 + 5 希望能用于三分区法,这才是传统bios出路。
kient88 + 5 很给力!
2010hly + 5 淡定
2013datong5624 + 5 赞一个!
a8181811 + 5 很给力!

查看全部评分

来自 2#
发表于 2016-11-7 18:07:54 | 只看该作者
本帖最后由 ali88home 于 2016-11-11 20:02 编辑





【简体中文版本】
63版本
http://pan.baidu.com/s/1bpwvJzh

操作说明:喜欢制作USB为FAT32单分区的维护盘者,可以试试无忧-不点大师-USB_FAT32单分区多重MBR引导启动。

把grldr和ope.iso...等等...您喜欢的PE,制作成UIS.ISO放在相同目录下面执行...自动安装。

注意:多重MBR-FAT32制作后,请不要再格式化,引导会无效的

1.自动修正总磁盘数的错误及DBR溢出情形。
2.里面4K没有对齐,因为起始磁盘号63的原因。
3.不懂操作的,请不要随便操作,失败会心疼的。

重复安装了几十次以后,发现一些问题:
1.安装以后再重新安装,常常无法恢复再写入恢复磁盘区的动作。多重MBR好像被系统运行中的感觉。
改进重新制作多重MBR失败的几率
2.这样的安装方式,被系统识别有异常,建议重新扫描此USB磁盘。这多重MBR方式好像有小问题存在。
修正为起始磁盘号64版本,系统不再识别有异常,建议重新扫描此USB磁盘的信息了。
为了引导成功几率,维持原作者63版本

3.预先以为这样的单分区,应该引导会取得优势,但是在老机上面,却识别不到此U磁盘,相反的UD三分区HDD成功引导。在新机上引导还好OK。
更正测试结果:先前测试老机上面,BIOS识别不到此U磁盘,但是却能够引导G4D菜单成功,真是好信息。
经过测试:机板BIOS识别不到USB磁盘,请把启动顺序设定为【USB-ZIP】第一项目,就能够顺利引导启动USB盘。

点评

简体中文 XP 下打开界面,中文都是乱码。请修复。  详情 回复 发表于 2016-11-7 18:14
回复

使用道具 举报

推荐
 楼主| 发表于 2014-10-18 17:48:51 | 只看该作者
gkos 发表于 2014-10-18 08:42
老大,如果U盘只有 4G  2G 甚至更小,用什么版本呢

首先谢谢您的支持。4G 和 2G 暂且可以按 8G 来对待。注意,4G、2G 和 8G 的情况类似,写入 mbr_8G.img 后,都是 “坑爹” 的扩容盘,而且建议不要纠正分区表的错误,也就是说,保持坑爹的状态。自己注意不要拷入过多的文件便可。

假如有人需要更小的 U 盘,将来我可以考虑给以明确的支持。

目前先测试启动成功率,只要启动成功率与 fbinst 一样,就算成功。

回复

使用道具 举报

推荐
 楼主| 发表于 2014-1-14 23:49:15 | 只看该作者
本帖最后由 不点 于 2014-1-15 07:53 编辑

2010qaqz111,你可能已经看出来了,我的新系统的开发理念与 Bean 的 fbinst 有差别。

1、新系统不处理 8M 以内的剩余 7M 空间,让用户自己来安排(或取舍)。fbinst 则建立 ud 系统,方便用户访问。

2、新系统不提供专门的工具,不提供各种安装参数的变化,只用一个映像文件来做。而 Bean 的 fbinst 提供了很多安装选项,方便用户选择和安装。

3、一旦发现有 BIOS 不适应问题,我的新系统的格式可能随时变动,这方面有着灵活性(这是对开发者来说的,开发者有完全的自由,可以随时变动 U 盘的格式)。外部工具的制作者可能也得随时跟进,调整自己的工具软件,以适应这些变化。相比之下,fbinst 要稳定得多,外部程序的作者不用修改自己的工具软件。

4、外部工具软件的制作者,可以研究这个 U 盘的设计,制作出自己的操作工具,方便最终用户使用。相比之下,fbinst 自带了工具,因此,fbinst 离开外部工具也能自成一体。

我为什么这样做呢?是因为哲学理念的不同造成的。

其一,是因为我个人身体状况不是很好,我想尽量少做点工作,同时又保证把软件的核心功能做到满意。

其二,是因为我个人比较懒,不想做太多的工作。

其三,是因为我个人在建立或处理(新的)文件系统方面缺乏必要的知识,也缺乏耐心,因此,我想省事,给自己 “减负”(减轻负担)。

其四,我想让工具软件的制作者们有事可做。如果我把所有的工作都做完了,那么别人的参与就少了。事实上我不可能做所有的工作,因为我不熟悉 Windows 编程,我只能寄希望于由其他作者们来完成这部分工作。如果其他作者们参与进来的多了,那么这个软件的后续开发就更有保障了。就是说,我开个头,而后续的开发工作将不存在困难,很多人都能参与进来,没有门槛(或者门槛很低)。诸位看看我的代码,核心代码简单透顶,第一阶段是 MBR,一个扇区,第二阶段也是一个扇区。总共只有两个扇区的 assembly 代码,随便一个开发者,花费半天时间,都可以研究完。工具软件的制作者就有可能会成为将来接替开发的开发者了(前提条件当然是说 BIOS 继续存在;如果 BIOS 消失了,当然就不用提了,因为不会再有人关心这个软件了)。

第一阶段的 MBR 引导记录代码,复制到最开头的 190 个扇区上。这 190 个扇区的每个扇区都带有 BPB 和分区表。

所以,工具软件的作者,应该研究分区表的变化规律,从而能够添加正确的分区表项。

第一个分区表项已经是 FAT32 了。还剩下 3 个表项可以由工具软件的作者来处理。

开头的 190 个扇区中的每个扇区,都应该有分区表项。每个表项含有 16 个字节。

除了第一个已经被 FAT32 占据的表项以外,新创建的表项,其前 8 个字节和表示分区长度的后 4 个字节应该是(在这 190 个扇区里面)保持不动的,而表示分区起始扇区号的 4 个字节在这 190 个扇区里面都是递降的。看到这个规律,那么,外部工具软件的作者要想写分区表已经不困难了。

由于 FAT32 分区故意设置为 8G 左右,超出了 CHS 的访问能力,所以,新创建的表项,其 CHS 值可以都搞成固定值:柱面号 C=1023,磁头号 H=254,扇区号 S=63。这样就简单了,新创建的表项,其前 8 个字节就是 00 FE FF FF XX FE FF FF,此处,XX 可以是 0C 表示 FAT32 分区,或者 07 表示 NTFS,或者是 0F 表示扩展分区,这些大家都懂的。精于计算的工具软件的作者,一定不难把这搞定。




在作出以上解释之后,我想,诸位可能也就看出来了:现在我可以 “撒手不管” 了。剩下的事,大都是用户自己的事,或者是工具软件开发者的事了。

已经制作好的这个 U 盘,估计差不多应该可以 “通吃” 了。即使不能通吃,由于内置了调试输出,所以,其失败根源很容易定位,再也不会出现 “模棱两可”、“说不清楚” 的情况了。与原来的 fbinst 相比,这也算是一个重大的改进。




还需要补充说明的一点是,内置的这个 grldr 版本,已经屏蔽掉了 PXE。这是因为,从 U 盘启动时,一定不是从 PXE 启动,所以,这个内置的 grldr 版本就把 PXE 功能屏蔽掉了。另外,前面还提到,默认时执行单扇区访问。用户可以通过执行一次 geometry --lba127sector 命令来切换到高速的多扇区访问。


点评

了解了。也就是说如果重新分区的话,需要把分区表copy到前190扇区每区一份才能保证重新分区后新的系统仍然正确运作。 这个倒是不难,有很多办法可以搞定的:)  详情 回复 发表于 2014-1-15 12:23
回复

使用道具 举报

推荐
发表于 2013-12-8 07:34:54 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

6#
发表于 2013-12-6 20:42:02 | 只看该作者
支持大师!菜鸟们谢谢您!
回复

使用道具 举报

7#
发表于 2013-12-6 20:50:37 | 只看该作者
板凳坐着。。。
回复

使用道具 举报

8#
发表于 2013-12-6 20:51:34 | 只看该作者
希望 fbinst 原作者能上传一下最新代码。。。。
回复

使用道具 举报

9#
发表于 2013-12-6 21:59:47 | 只看该作者
不点有新想法了?
回复

使用道具 举报

10#
发表于 2013-12-6 22:47:47 | 只看该作者
能否剧透下要增强的功能嘛,呵呵
回复

使用道具 举报

11#
发表于 2013-12-6 23:10:26 来自手机 | 只看该作者
支持不点大人…
回复

使用道具 举报

12#
发表于 2013-12-6 23:11:32 来自手机 | 只看该作者
记得早些时候神雕大侠好像编译过一个…
回复

使用道具 举报

13#
 楼主| 发表于 2013-12-6 23:12:19 | 只看该作者
根据多年来论坛所反馈的情况,发现 fbinst 有改进的余地。

我想尝试一下,进一步提高 fbinst 的适应性。

初步打算,尽量不改变 ud 系统的格式,以保持兼容性。

有可能引进以前的三重 MBR 的部分合理概念,强化 fbinst 的适应性。

希望对 fbinst 的源代码进行增强改进的几位作者,能够提供最新的源代码。

回复

使用道具 举报

14#
发表于 2013-12-6 23:16:30 | 只看该作者
感谢不点大师再次奋起!这是个巨大的好消息,十分具有穿透力。期待的很。
回复

使用道具 举报

15#
发表于 2013-12-7 08:19:42 | 只看该作者
这个源码不是最新的,不知道有没有帮助
强烈支持大师再开发!!!
fbinst源码.rar (468.08 KB, 下载次数: 243)
回复

使用道具 举报

16#
发表于 2013-12-7 10:04:53 | 只看该作者
回复

使用道具 举报

17#
发表于 2013-12-7 14:26:49 | 只看该作者
期待大师的新作,非常感谢不点!
回复

使用道具 举报

18#
 楼主| 发表于 2013-12-7 15:48:55 | 只看该作者
看到大家很支持,我感觉有些压力,唯恐做不好,或由于身体原因而做不了,对不住大家。

其实,这个工作,不一定非得由我来做。我还真没留意 chenall 早已经把 fbinst 放在 google code 上了,并且早就已经开始修补了。Bean 当初做的时候,我身体很糟糕,没有跟得上,大部分帖子都没看。chenall 接管 grub4dos 以后,我竟然没有注意到 chenall 把 bean 的 fbinst 也拿过来了。

好的,先不说这些了。我的想法是,先讨论,发表我的主要看法以及构思。至于说具体的工作,谁有时间谁做,都可以。我感觉 chenall、yaya、jianliulin 等许许多多人都可以做,凡是懂得 BIOS 的人都行。

今天就先谈谈我的想法吧。

单刀直入,fbinst 暴露出缺点了。最近论坛上有一个报告说,明基笔记本从手机启动时,由于手机硬件把 MBR 磁道全部屏蔽,导致 fbinst 无法接到控制权。位于 PBR 的代码取得了控制权。

我们知道,fbinst 的代码本身就是隐藏的,它有 8M 的大小。但这 8M 就被当作 MBR 磁道而屏蔽掉了。

fbinst 无法适应这种情况,因此,fbinst 需要改造或增强。

我想了两天,想来想去,还是觉得,要改造的话,恐怕还是要全新打造,而无法与 fbinst 兼容了。

主要技术思路。研究的过程,分两步。第一步,主要目的是保证从 BIOS 那里取得控制权。这一步的研究过程最重要。我们的测试代码仅仅只需要一个扇区,把这些代码复制到 U 盘所有的扇区上,测试者报告哪个扇区获得了控制。这一阶段不需要启动 grldr,而只要看到屏幕上获得控制后的显示信息便可。

务必保证第一步取得 100% 成功。我们的测试代码永远保留,将来如果有人遇到失败,仍然用这个测试代码来测试,并加以改进,直到成功率仍然是 100%,完全消除死角。

第一步成功后,其实就大功告成了,剩下的只是如何找到 grldr 并启动它了。

有人说了,bean 不是早做过这样的测试工作吗?

bean 是做过了,不过其性质是有差别的。bean 的 MBR 分区表的表项指向 8M 处的 PBR,这太靠后了,在上面所说的情况下,整个 8M 都被屏蔽。我们这次,让第一分区位于第 63 扇区(或第 32 扇区)处。那么这个测试当然就具有不同的性质了。

第二步很简单了,找到 grldr 并加载它。由于第一步已经确定了准确的 H 和 S,所以,第二步就毫无困难了。

所以,我们的 “重中之重” 是要长期做第一步的测试工作,不可懈怠。

最近我会思考具体的路线,也可能提供一些测试映像,以便让大家克隆到 U 盘上进行测试。

等到明年或后年,第一步成熟之后,就由其他人来编写第二步的代码了。
回复

使用道具 举报

19#
发表于 2013-12-7 16:00:05 来自手机 | 只看该作者
支持不点大师,期待ing
回复

使用道具 举报

20#
发表于 2013-12-7 19:02:34 | 只看该作者
强烈支持。
嗯。百草霜大侠也开发过,联系一下他。百大的fbinst plus
现在的主要问题是:在7&8PE下,似乎搜索可见区petools已经失效。
在64位8PE也,导出UD区文件失效。
回复

使用道具 举报

21#
发表于 2013-12-7 21:21:23 来自手机 | 只看该作者
强烈支持!!但大师也要注意身体呀,慢慢来,有好的身体才能长期奋斗。支持你。
回复

使用道具 举报

22#
发表于 2013-12-7 22:45:25 | 只看该作者
支持曹操
回复

使用道具 举报

23#
发表于 2013-12-8 13:46:15 | 只看该作者
原作者赶紧上传最新源代码吧。。。。期待不点大大的大作。。。
回复

使用道具 举报

24#
 楼主| 发表于 2013-12-8 18:41:59 | 只看该作者
引导扇区概念设计

一、打印信息设计

DX=XXXX 最关键的寄存器,含有接管控制时的盘号 DL。

boot=XXXX    表示接管控制的引导扇区的物理扇区号。
mbr0=XXXX    表示 MBR 所在的 BIOS 第 0 扇区的物理扇区号,它表示有多少个扇区被隐藏了。

boot 和 mbr0 应该是相等的,如果不相等,那就暴露出了变态的主板行为。

LBA 表示支持 LBA,如果不支持,则不显示。

S=XX 每道扇区数,它比较容易获得,只需要从 mbr0 开始有连续 64 个扇区的物理扇区号记录便可计算出来。
H=XX 磁头数,获得它要比获得 S 稍稍困难一些。

如果全部都用记录扇区号的方法,则确定 H 需要 8M 的扇区,这就与 S 一样容易获得了。但我们可以稍加改进。我们留出 1024 个扇区不记录物理扇区号(叫做 “自由扇区” 或 “空白扇区”),这样可以方便大家手动嵌入外部引导代码(grldr 或 ntldr)。


二、磁盘数据结构设计

扇区 0 的分区表指向扇区 63(作为分区的起始扇区,下同),而扇区 63 的分区表指向扇区 126,为了保险起见,扇区 126 也设置一个分区表,指向扇区 189。分区表与其对应的第一分区的距离总是 63 个扇区。这样,即使被两次隐藏,扇区 126 也能获得控制。第一次隐藏时,有可能扇区 0 至 63 中的某个扇区被当作 mbr0。但经过第二次隐藏,则有可能扇区 63 至 126 中的某个扇区被当作 mbr0。两次隐藏的总效果是,有可能扇区 0 - 126 中的某个扇区被当作 mbr0 了。我们在扇区 0 至 126 上都设置分区表,其第一分区都是指向其后的 63 扇区偏移。而扇区 127 至 189 的分区表则指向 8M 附近的实际分区数据。扇区 0 至 189 都记录着自己的物理扇区号。从扇区 190 至 1213,总共 1024 个扇区,不记录物理扇区号(即 “空白扇区”)。这个空间是 512K,用来放置外部引导代码(GRLDR 或 NTLDR)。接下来的连续扇区空间,一直延伸到 8M 附近的扇区 126 + 255×63,都记录物理扇区号。

总起来说,头部有 190 个扇区记录着扇区号,接着是 1024 个空白扇区,再往后又是连续记录扇区号的 (126+255×63 - 1213) 个扇区,其后又全都是空白扇区。

如果扇区号 0 - 126 之一获得控制,那么首先读柱面 0 的起始扇区 mbr0(即 C/H/S=0/0/1),这样可以得到 mbr0 的物理扇区号。

接着读柱面 1 的起始扇区 C/H/S=1/0/1。读之前显示信息 3 秒,防止死机或重启。有三种情况,分别讨论如下。


【情况一】

如果读柱面 1 的起始扇区时发生死机、重启,那就证明机器很变态,重启时用户按空格键来强制设定 C=1,这样就认为只有柱面 0,而避免去读柱面 1。如果没有死机但读出的数据无效,或者读取失败(CF=1),这都表明 C=1,即只有一个柱面。在这样的情况下,最大访问能力是 255×63=8M。还需要进一步确定 H 和 S 的值。

读扇区 C/H/S=0/1/1 可以确定 S 的值。如果死机、重启或出错、失败,则表明 H=1,即只有一个磁头。那么最大访问能力只有 63 个扇区了。因此,这种情况没有意义,什么事也干不成,直接放弃得了,就当成 “电脑根本不支持 U 盘启动” 来对待。用户明白这一情况后就有理由淘汰这样的机器了。

S 确定之后,怎么确定 H 的值?只有一个一个试验。读 C/H/S=0/n/1,成功后 H 就等于 (n+1)。其实,没必要确定 H 了,这是因为 C=1,因此 H 直接取最大值 255 就可以了。也就是说,在只有一个柱面的情况下,只要 S 是正确的,几何参数方面就没问题了,H 可以不管了。这一点正如在多柱面情况下 C 值不重要,只要知道 H 和 S 就 OK 了。用户对磁盘的使用,肯定只能尽量使用开头的扇区,否则总是危险的,即,当超出主板 BIOS 访问能力时,总是有死机、重启或出现其他异常情况的危险。因此,不用确定 H 了(取最大值 255),用户自己会尽量使用靠近开头的那些扇区,其 H 值当然也就比较小了。


【情况二】

如果柱面 1 最开头的那个扇区的物理扇区号是有记录的,则可以计算出柱面的长度(即,柱面长度=该扇区号 - mbr0)。

如果柱面长度大于 63,则每个柱面至少有 2 个磁道。于是可以读下一个磁道。现在可以放心地读柱面 0 的扇区 C/H/S=0/1/1,它肯定是有物理扇区号记录的。这样就知道了 S 的值了(S=该扇区号 - mbr0)。

如果柱面长度为 63 或更小,则有可能只有 1 个磁头。当 H=1 时,S=柱面长度,能确定 S。但问题是无法确定 H 是否为 1。

因此,我们冒险假定 H 大于 1,而去读 C/H/S=0/1/1。读之前显示信息 3 秒,如果发生死机或重启,就知道机器很变态了。于是就知道这个机器的 H=1 了。重启时按空格键即可强制以 H=1 来处理,而不再去读柱面 0 磁道 1 的起始扇区了。如果读取成功,可以计算出 S。因而 H 也可以算出来了。

我们还有一个(候选的)冒险方法,就是假定 H=1,S=(柱面长度)。这时,我们冒险读柱面 0 上的 S 个扇区。如果读取成功,并且每个扇区的物理扇区号都正确,那么就 OK 了。否则,一定是相反的情况,即 H 大于 1,此时又可以用前面的方法确定 S 的值了。如果读取时失败、死机、重启,那都证明 H 大于 1,因而重启时注意用键盘按键来控制。


【情况三】

如果柱面 1 上最开头的扇区没有记录物理扇区号,那么就知道柱面长度一定大于 63,因此和刚才的情况一样,可以确定 S 的值。由于柱面长度未知,因此,还需要一个步骤来确定 H 的值。我们先前已经知道,未记录扇区号的那些扇区号范围是从扇区 190 到扇区 1213。柱面 1 的起始扇区一定落在其中。那么柱面的长度的变化范围就是

最小值 = 190 - 126 = 64

最大值 = 1213 - 0 = 1213


柱面长度如果取最小值 64,那么柱面 20 的起始扇区的物理扇区号就是

20×64 + mbr0 = 1280 + mbr0


这一定落在我们事先已经记录扇区号的区域了。

柱面长度如果取最大值 1213,那么柱面 2 的起始扇区的物理扇区号就是


2×1213 + mbr0 = 2426 + mbr0


这也落在了已经记录扇区号的区域。

因此,无论如何,只要从柱面 2 到柱面 20 逐个读取柱面的起始扇区(最多读 19 次),一定可以碰到一个记录了物理扇区号的扇区。这样,就可以算出 H 的值了。如果读取失败或死机,则表明 BIOS 的访问能力不足 1.44M(仅有 1.213M)。读取时,屏幕有信息显示,让用户能够看到。如果发生死机或重启,用户记住最后一行信息,就可以知道 BIOS 的访问能力太差了。用户甚至有理由淘汰这样的机器了。

这样,H 和 S 都得到了。在屏幕上打印出 H 和 S 的值,圆满完成第一阶段的任务。

第二阶段,其实简单得很,直接加载位于物理扇区号 190 开始的外部引导器代码(grldr 或 ntldr)即可。

回复

使用道具 举报

25#
发表于 2013-12-8 20:33:17 | 只看该作者
本帖最后由 快雪时晴 于 2013-12-8 20:34 编辑

记得对fbinst研究较深的有:天涯海角、Plantsoot、P大... 当然还有chenall和不点你自己咯


我就知道不点歇不了的,因为他是个有想法的人
回复

使用道具 举报

26#
发表于 2013-12-8 20:34:31 | 只看该作者
也希望老大们出一个UD驱动出来,PE启动后,只读显示UD区出来。
回复

使用道具 举报

27#
发表于 2013-12-8 20:47:57 | 只看该作者
本帖最后由 ggmm888 于 2013-12-8 21:10 编辑

支持不点大侠的工作

实机使用fbinst制做的U盘,在启动电脑时,BIOS设置成USB-zip时,启动成功率要高。
实机使用fbinst制做的U盘不能启动的电脑,往往可以使用三重 MBR的U盘启动电脑。具体原因没有去考查,因不是自己的机子,但这种情况很多,大家应该容易找到这样的机器。我不能提供这样的机器做实验,请愿谅。

还有BIOS设置成USB-HDD时,U盘做成了USB-HDD格式,从U盘启动,但有的机器不读U盘上的grldr,而读取了硬盘上的grldr,有时还找不到U盘。这样的机器,使用fbinst制做的U盘,没有此现像,正确读取fbinst制做的U盘上的grldr

回复

使用道具 举报

28#
发表于 2013-12-9 19:21:47 | 只看该作者
本帖最后由 jianliulin 于 2013-12-9 19:28 编辑

fbinstTool 1.606世界末日版,是在chenall 在本贴#12楼发布的(https://code.google.com/p/grubutils/source/browse/#) 基础上把fb_data 中未利用的2个字节其中一个做了标记,0:文件列表为ansi编码,1:为utf-8,读取或写入文件列表时候就根据标志用相应的编码来处理,由于命令行和GUI的操作不同,我是用delphi把除了汇编部分全部重新写fbinst以便满足GUI的需求,语言不同代码我就不贴了,我改的部分主要是用户操作上,所以可以忽略我的修改,不需考虑兼容。


struct fb_data
{
    uchar2 boot_size;                /* 0x200  */
    uchar is_utf8_list; /* 0x201  */  //0:文件列表为ANSI,1:文件列表为 utf-8
    uchar flags;                          /* 0x202  */  //未使用
    uchar ver_major;                /* 0x204  */
    uchar ver_minor;                /* 0x205  */
    uchar2 list_used;                /* 0x206  */
    uchar2 list_size;                /* 0x208  */
    uchar2 pri_size;                /* 0x20a  */
    uchar4 ext_size;                /* 0x20c  */
} PACK;
回复

使用道具 举报

29#
发表于 2013-12-9 21:43:06 | 只看该作者

点评

我也证明一下,确实进不去。  详情 回复 发表于 2013-12-10 08:26
点击就进去了。你的 ISP 把这个网址屏蔽了? chenall 为 wee 建立的那个空间,就是与 grubinst 在一起的。都是google 空间,应该可以访问。  详情 回复 发表于 2013-12-9 23:03
回复

使用道具 举报

30#
发表于 2013-12-9 21:44:49 | 只看该作者
支持不点大人…
回复

使用道具 举报

31#
发表于 2013-12-9 21:52:17 来自手机 | 只看该作者
支持大师......
回复

使用道具 举报

32#
 楼主| 发表于 2013-12-9 23:03:05 | 只看该作者

点击就进去了。你的 ISP 把这个网址屏蔽了?

chenall 为 wee 建立的那个空间,就是与 grubinst 在一起的。都是google 空间,应该可以访问。
回复

使用道具 举报

33#
发表于 2013-12-10 08:26:27 | 只看该作者
本帖最后由 mygamexxx 于 2013-12-10 08:28 编辑


开了两个页面,一个能进去,但等待时间比较长,一个最后显示“无法显示此页”。

点评

进不去就借助GAE,肯定是可以的  详情 回复 发表于 2013-12-10 23:29
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

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

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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