无忧启动论坛

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

umbr 测试(适用于BIOS+GPT磁盘的MBR程序)

    [复制链接]
跳转到指定楼层
1#
发表于 2016-1-12 16:32:36 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chenall 于 2016-1-18 15:00 编辑

介绍
附件的umbr是一个GRUB4DOS下的可执行程序.(必须配合附件的GRLDR使用).

可以安装在MBR上,因为这个是根据扇区定位的所以和磁盘分区格式无关像GPT也是一样使用.

可以指定多个备用启动文件,以防止文件移动或修改导致的启动失败.

这只是一个简单的MBR(占用MBR一个扇区),直接启动固定位置的引导程序.

使用方法:
首先把GRLDR文件复制到硬盘上保存多份(也可以直接写入到分区间隙等)

然后用附件的GRLDR启动进入GRUB4DOS命令行使用类似以下命令安装(程序只改写MBR)

umbr -d=0 (hd0,0)/grldr (hd0,0)/boot/grub/grldr (hd0)xxxx+yyyy

参数介绍
-p=0 启动失败时默认自动启动分区0.
-d=0 安装到(hd0),后面的文件也必须是在(hd0)上面
--test        不写入磁盘直接测试启动效果.


后面可以指定3个启动位置必须都在(hd0)上面,

启动时优先启动第一个指定的文件,如果启动失败(根据校验信息),则尝试下一个.

注:

1. 我对汇编不太熟,可能会有BUG,请不要实机测试.有兴趣的可以虚拟机测试,也可以一起改进.
2. 请把引导的文件放在尽量靠近硬盘开头的地方,放在靠后可能会无法读取.
3. 由于部份电脑不支持读大文件,可以尝试启动WEE63.MBR


2016-01-13
12:00 更新        增加错误提示信息
13:10 更新        新增 --test参数用于测试启动,不写硬盘,直接启动.

2016-01-14
     重新修改了一下,现在支持启动PBR
    例子: 当wee启动失败时启动(hd0,1)的pbr

2016-01-14 20:40 更新,

1.新的版本由于代码的的增加,只能指定3个位置一般也够用了,
2.新增标志信息在MBR偏移0x8处有UMBR字样,0XC处是版本标志(目前是1),方便以后有人开发WINDOWS下的GUI工具.

进入实用性阶段,现在的代码空间已经用得差不多了,功能也基本实现了.没有什么BUG的话可能不会再更新.

针对grub4dos的修改稍后会并入源码.

源码已经上传

其它介绍在这里 http://chenall.net/post/grub4dos_umbr/

umbr.zip

173.3 KB, 下载次数: 690, 下载积分: 无忧币 -2

评分

参与人数 3无忧币 +15 收起 理由
zhczf + 5 很给力!
蓝星明月 + 5 很给力!
yang77 + 5 很给力!

查看全部评分

2#
 楼主| 发表于 2016-1-12 19:55:58 | 显示全部楼层
本帖最后由 chenall 于 2016-1-12 19:57 编辑


建议先在虚拟机,比如可以在QEMU下加添-snapshot 参数,这样就可以在QEMU下模拟写入实机硬盘测试,没问题了再写入实机.

运行umbr会写入硬盘的0扇区也就是修改MBR内容.只写入0x1b0字节,理论上不影响分区表等.


回复

使用道具 举报

3#
 楼主| 发表于 2016-1-12 20:05:26 | 显示全部楼层
不点 发表于 2016-1-12 17:37
最好再介绍详细一点。初次接触的人,对此没有概念。比如说:

占用多少个扇区?

其实这个很早之前就有介绍过

就是一个MBR引导程序只需要一个扇区,

功能很简单,只是直接启动固定的位置的引导程序.

为了防止由于文件移动或其它原因导致的启动失败,用户最多可以指定4个位置.启动时通过内置的简单校验判断启动文件是否完整(修改或移动).

总之4个只要有其中一个可以正常使用就可以保证启动不失败.

我对汇编和引导都不熟,完全是参考wee63.mbr来改写的,依葫芦画瓢.

主要是用于GPT格式磁盘,当然了MBR格式的也可以用.
回复

使用道具 举报

4#
 楼主| 发表于 2016-1-13 10:08:10 | 显示全部楼层
不点 发表于 2016-1-12 20:46
有这个介绍就很好。让人起码知道,只需一个扇区。

请问一下要如何启动某个分区的PBR?

比如知道(hd0,0)分区的位置,我想直接启动(hd0,0)+1,直接加载启动好像不行,我看了WEE源码没找到关键的地方,需要额外设置什么数据?

我想在umbr的启动记录最后一条添加直接启动第一个分区,直接启动第一个分区
回复

使用道具 举报

5#
 楼主| 发表于 2016-1-13 11:23:30 | 显示全部楼层
qj_tzy 发表于 2016-1-13 11:18
测试报告

我在MBR分区硬盘上实机作了如下测试:

命令执行的提示信息?

会提示成功安装的项目
回复

使用道具 举报

6#
 楼主| 发表于 2016-1-13 11:58:20 | 显示全部楼层
qj_tzy 发表于 2016-1-13 11:26
当时执行完毕/umbr/umbr -d=0 (hd0,1)/umbr/grldr (hd0)913065435+608 后,好像只提示:
(hd0)913065 ...

如果没有提示 (hd0,1)/umbr/grldr那就是这个 (hd0,1)/umbr/grldr失败,可能是这个文件有误或者有碎片.

稍后我再上传一个,添加更多错误提示信息

回复

使用道具 举报

7#
 楼主| 发表于 2016-1-13 12:22:50 | 显示全部楼层
1楼已经更新,重新上传了.

安装时增加了几个错误提示信息,方便知道是否安装成功.
回复

使用道具 举报

8#
 楼主| 发表于 2016-1-13 14:03:47 | 显示全部楼层
#18
因为使用的是绝对位置,所以改名删除有时候是不影响启动的(因为文件的位置不变)

我估计是umbr代码的问题,有三种可能原因,

1. 无法读取大文件
2. 无法访问大扇区
3. 目前因为只校验了部份扇区,所以也有可能导致失败.

如果不点大大可以帮忙改写一下启动代码就好了.^_^
回复

使用道具 举报

9#
 楼主| 发表于 2016-1-13 15:03:55 | 显示全部楼层
并不是查找,而是安装的时候就已经定位了启动位置,umbr只是根据这些信息来来加载并启动而已.

附件的grldr是有修改过的,主要用于执行umbr安装.启动的可以是任意grldr.也可以是wee63
回复

使用道具 举报

10#
 楼主| 发表于 2016-1-13 17:43:57 | 显示全部楼层
不点 发表于 2016-1-13 17:03
应该可以加载 PBR 启动的。需要加载 512 字节到 0000:7C00 处,并设置正确的 DL 寄存器。扩展分区里面 ...

因为这个的启动方式是绝对扇区,
也就是只要把引导扇区加载完之后再修正0X1C处的值为该扇区位置就行了,这个理论上不难.

我明天继续修改一下让它可以启动PBR,应该不需要太多代码^_^
回复

使用道具 举报

11#
 楼主| 发表于 2016-1-13 17:46:04 | 显示全部楼层
不点 发表于 2016-1-13 17:31
我相信你很快就会成功的,汇编语言对你来说没什么困难。

真正的困难在于,BIOS 的访问能力是有限的, ...

目前只使用INT13的4200H功能来读磁盘

发现有些电脑很正常,有些机子不正常(只能读开头的扇区,具体能读多大还需要测试.)
回复

使用道具 举报

12#
 楼主| 发表于 2016-1-13 17:47:51 | 显示全部楼层
不点 发表于 2016-1-13 17:31
我相信你很快就会成功的,汇编语言对你来说没什么困难。

真正的困难在于,BIOS 的访问能力是有限的, ...

这个相当于中转站,只是用来启动另一个引导程序的.

启动的信息都是固定的不需要太多功能,

我觉得一个扇区足够了.
回复

使用道具 举报

13#
 楼主| 发表于 2016-1-14 14:49:30 | 显示全部楼层
再修改了下,现在可以直接启动某个分区了

另外直接启动GRLDR失败的可以尝试启动WEE63.MBR估计就会成功了.

因为目前读取引导代码是一次性读入的,一次性读取扇区数太多的话,有的机器是不支持的.
回复

使用道具 举报

14#
 楼主| 发表于 2016-1-14 15:25:17 | 显示全部楼层
不点 发表于 2016-1-14 15:13
一次性读入?

按照公开的规范,int13/ah=42h 一个调用可以读 127 个扇区。不可能再多。

是的,我昨天才注意到只能读127个.

但有一些主机可以全部读入.

点评

比规范读得更多,这不知道是不是好事。 问题是,如果多读了,属于超出规范,那有可能死机,尤其是对于故意制造死机的那些 bios 来说。  详情 回复 发表于 2016-1-14 15:28
回复

使用道具 举报

15#
 楼主| 发表于 2016-1-14 15:54:09 | 显示全部楼层
不点 发表于 2016-1-14 15:28
比规范读得更多,这不知道是不是好事。

问题是,如果多读了,属于超出规范,那有可能死机,尤其是对于 ...

刚开始我没有注意,我自己用的电脑和虚拟机都是可以全部读入的,并且我看了一下读入的数据还是正常的.

要多次读入的话会麻烦些,需要添加好多代码.还在修改中.
回复

使用道具 举报

16#
 楼主| 发表于 2016-1-14 20:37:59 | 显示全部楼层
guyue2011 发表于 2016-1-14 16:27
昨晚想到一个问题, umbr在安装前就确定好grldr文件的扇区位置了吗?  而并没有做分析文件系统的工作吗?

  ...

这个是使用固定位置的.
即然是固定位置的,就和文件名没有什么关系了.

移动或删除就会启动失败(但不一定因为有时候虽然移动或删除了但文件内容还在这里还是可以启动的).

这就是这个的弊端,所以可以指定多个备用位置并且通过内置的校验判断内容是否有变化.

回复

使用道具 举报

17#
 楼主| 发表于 2016-1-14 20:39:09 | 显示全部楼层
2011yaya2007777 发表于 2016-1-14 19:50
我不清楚,现在将grldr安装到(hd1,0)/ ,是一般意义上的写入?即写入文件分配表?可以通过,Windows 看到这 ...

这个的安装只是修改了MBR引导,其它的没有动.
回复

使用道具 举报

18#
 楼主| 发表于 2016-1-14 20:49:06 | 显示全部楼层
再次更新了

这次应该比较完美了,我自己测试了暂时没发现问题.
回复

使用道具 举报

19#
 楼主| 发表于 2016-1-18 17:18:58 | 显示全部楼层
本帖最后由 chenall 于 2016-1-18 17:20 编辑
不点 发表于 2016-1-18 16:28
这个源代码在哪?github 上是很老的源代码,没更新。


https://github.com/chenall/grubutils

https://github.com/chenall/grubutils/blob/master/umbr/umbr.s


麻烦你看看有没有问题,
回复

使用道具 举报

20#
 楼主| 发表于 2016-1-19 09:31:38 | 显示全部楼层
不点 发表于 2016-1-18 21:56
wee 是有连续 63 个扇区,所以第一扇区写得复杂。

你这个 umbr 只有一个扇区,就没必要搞那么复杂了。 ...


前面的代码我没怎么动,主要是不明白用途,
我修改了move_down_to_7000相关代码本来是move_down_to_7C00的,
因为7C00后要启动需要,所以我改成了7000.

不知后面的代码有没有什么问题?

另外有一个疑问,MBR代码应该是16位的,可以使用32位寄存器吗?
我之前以为不行,后面看到了前面的repz movsl 代码,所以就测试了下,发现可以正常使用.

如果能再优化掉20个节字左右应该足够支持启动NTLDR/BOOTMGR了
回复

使用道具 举报

21#
 楼主| 发表于 2016-2-17 14:50:19 | 显示全部楼层
本帖最后由 chenall 于 2016-2-17 14:51 编辑
minmax 发表于 2016-2-17 12:34
用USBDISK(0,0) + USBHDD(1,1)
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr
要兩個FILE才成功


"找不到檔案"是哪里的提示?

另外上面
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr

这个用法也是错误的.这个命令运行应该会有错误提示的吧??

这个-d=x必须和后面的hdx一样,比如
umbr -d=0 (hd0,0)/grldr (hd0,1)/grldr

umbr -d=1 (hd1,0)/grldr (hd1,1)/grldr


回复

使用道具 举报

22#
 楼主| 发表于 2016-2-17 16:44:29 | 显示全部楼层
minmax 发表于 2016-2-17 16:09
我打的是 umbr -d=1 (hd1,0)/grldr (hd1,1)/grldr 才對
實體機顯示
reboot and select proper boot d ...

这个提示好像是系统没有识别到启动设备??

可以用WINHEX之类的检查下硬盘的0扇区内容.
回复

使用道具 举报

23#
 楼主| 发表于 2016-2-21 09:17:00 | 显示全部楼层
qj_tzy 发表于 2016-2-20 14:38
发现一个问题,不知是何原因,请您看一下是否要修改umbr

在一个双硬盘的电脑上,机械硬盘为MBR分区结构 ...

我估计你机械硬盘的启动代码也是直接启动GRUB4DOS

然后你的主板无法启动安装了UMBR的SSD磁盘,就会自动跳到机械硬盘去启动了.

若是这样的话,要验证的方法很简单,把机械硬盘的引导代码改成默认的不让它启动GRUB4DOS.就可以测试了.

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 11:07

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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