无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
61#
 楼主| 发表于 2014-4-10 08:32:02 | 只看该作者
还没有找到原因。
只加载1个没有问题。 如 map (ud)/BOOT/XPB.iso (0xff)
加载2个(无论哪个在前)则有问题。
回复

使用道具 举报

62#
发表于 2014-4-10 13:15:47 | 只看该作者
本帖最后由 mdyblog 于 2014-4-10 13:17 编辑
2011yaya2007777 发表于 2014-4-9 20:21
U盘是(hd0),没有分区表,识别为硬盘问题多多,故意为之。这是特色。


我测试的这个恰好有分区表。
USB 前 可以  ls  (hd0,0)/
USB 后 可以  ls  (fd0,0)/
我测试,有没有分区, 都是(hd0)变成(fd0)


1: 这样 以前 可以
map --in-situ (hd0)8000+600000  (hd0)
map (hd0)  (hd1)
map --hook
现在 对应改为
map --in-situ (fd0)8000+600000  (hd0)
这条非法了, 说(fd0) 不支持 --in-situ


2: 这样 以前 可以
map --in-situ (hd0)8000+600000  (fd0)
map (fd0)  (hd1)
map --hook
但是 fd0 还是 U 盘, 甚至 分区表都在。还能  ls  (fd0,0)/, 还是原来的内容。

3:USB 加速 好象, 对PE 启动 有问题。 启动到一半, 就失败了。 (不加速是可以启动的。)



回复

使用道具 举报

63#
 楼主| 发表于 2014-4-10 14:50:29 | 只看该作者
把分区表贴上来。另外请说明版本。
回复

使用道具 举报

64#
发表于 2014-4-11 14:05:16 | 只看该作者
本帖最后由 mdyblog 于 2014-4-11 19:03 编辑

2011yaya2007777 发表于 2014-4-10 14:50
把分区表贴上来。另外请说明版本。


当时高糊涂了, 那个PE的分区表可以切换。
重新测试了下,确实是没有分区表时才会 (hd0)变(fd0)
谢谢。

另外:
usb --init  (hd0)变为(fd0)后,下面的命令怎么改才能 启动 那个PE.
%ldr% 是  引导文件。
(hd0)%pe%+%ps%   处存储的是一个PE分区IMG。没有usb 是可以启动。


map --heads=255 --sectors-per-track=63  (hd0)%pe%+%ps% (fd1)
map --hook
map (fd1) (fd0)
map (fd0) (fd1)
map --hook
rootnoverify (fd0) && chainloader (fd0)%ldr%  && boot

我在线修该了几次, 不是说 什么 fd0 不支持,就是PE最开始 加载的进度条加载到一半时,死了。

当时在线敲了什么也忘了。
现在想 usb --init
后, 用上面的命令来  USB加速 启动 PE。
回复

使用道具 举报

65#
发表于 2014-4-11 20:36:07 | 只看该作者
map --in-situ 参数的意思是仅仅虚拟分区表,不虚拟数据扇区。所以,如果没有分区表,那就不能进行虚拟。

另外 --in-situ 参数是为 win98 设计的,现在估计一般都用不上了。因此,长期以来也没有改进相关的代码,比如说,拒绝对软盘的分区表进行操作,因为在早期我们认为,软盘不可能有分区表。

yaya 如果有时间的话,可以尝试修改一下,看看假如允许 --in-situ 对软盘进行操作,会不会出问题?

回复

使用道具 举报

66#
发表于 2014-4-11 23:32:36 | 只看该作者
本帖最后由 mdyblog 于 2014-4-12 10:15 编辑
2011yaya2007777 发表于 2014-4-10 14:50
把分区表贴上来。另外请说明版本。


今天 重新测试了,, 有分区表 还是(hd0) 转为 (fd0).
grub ver: 0.4.6a  2014-03-06


分区表:


PECMD.EXE  导出的详细分区信息 :
磁盘:1
  磁盘信息 磁盘号   大小(字节)         柱面数 磁头数 扇数 扇区 媒体     签名 总线
              1    31009800192           3770    255   63  512   12 C3072E00  7 MBR
  字符说明 激活 __本分区起始__ 分区 __本分区结束__ _______本分区______ ______本分区_______
  激活为0x80    磁头_扇区_柱面 类型 磁头_扇区_柱面 _____起始扇区号____ _____扇区总数______
  主分区1: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  主分区2: 0x00 0x7A 0x3C 0x7F 0x07 0xE3 0xA7 0xFC 0x00 0x40 0x1F 0x00 0x00 0x40 0x9C 0x00
  主分区3: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  主分区4: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  标志   : 0x55 0xAA
  全部分区: -1  1   -3  -4
  分区  类型 激活(1) 起始(字节)     长度(字节)    隐藏扇区     结尾(字节) 物理# 盘符
    -1  0x00   0              0              0           0              0    1   
     1  0x07   0     1048576000     5242880000     2048000     6291456000    2  F:
    -3  0x00   0              0              0           0              0    3   
    -4  0x00   0              0              0           0              0    4   
DiskGinus 分区表备份, MBR备份见附件。

U盘分区.MBR.zip

20.13 KB, 下载次数: 1

回复

使用道具 举报

67#
发表于 2014-4-11 23:36:38 | 只看该作者
不点 发表于 2014-4-11 20:36
map --in-situ 参数的意思是仅仅虚拟分区表,不虚拟数据扇区。所以,如果没有分区表,那就不能进行虚拟。
...

那里 是一个 分区IMG, 就缺一个 分区表, 就是 硬盘了。
需要方便的 模拟一个硬盘分区   (hd0,0)。

支持 98 因该就可以了。
启动PE, 也是实模式 模拟而已, 是WIM 启动。 调入内存后就不要这个 虚拟盘了。
回复

使用道具 举报

68#
 楼主| 发表于 2014-4-12 07:17:01 | 只看该作者
本帖最后由 2011yaya2007777 于 2014-4-12 07:20 编辑

由于分区表没有激活,故判定为无分区表。你既然可以切换,没有激活,那一定是当成软盘,使用 BPB 表参数了。
不使用 --in-situ ,试一试重建分区 partnew 指令。

我研究一下,--in-situ 如何支持软盘。
回复

使用道具 举报

69#
发表于 2014-4-12 07:30:02 | 只看该作者
没有激活分区的分区表,也是合法分区表。不应该判定为非法分区表。

回复

使用道具 举报

70#
发表于 2014-4-12 10:10:09 | 只看该作者
本帖最后由 mdyblog 于 2014-4-12 10:12 编辑
不点 发表于 2014-4-12 07:30
没有激活分区的分区表,也是合法分区表。不应该判定为非法分区表。


是啊!!!
windows  DIskGinus 都认啊。
只要 有最后的55AA , 且最少 有一个合法的 分区表项, 就是 合法/有 分区表啊!!

判定 "合法的 分区表项 " 应该 通过 ”分区类型字节非0“ 来判断,其它15字节不管了。

》》重建分区 partnew 指令
这个 不太友好, 就用 来启动一下, 就修改人家的分区表。 人家不设激活,有人家的道理---那只是一个数据分区。

回复

使用道具 举报

71#
发表于 2014-4-12 10:24:24 | 只看该作者
本帖最后由 mdyblog 于 2014-4-12 14:39 编辑

2011yaya2007777 发表于 2014-4-12 07:17
由于分区表没有激活,故判定为无分区表。你既然可以切换,没有激活,那一定是当成软盘,使用 BPB 表参数了 ...


》》我研究一下,--in-situ 如何支持软盘。
1:
这应该  本来该就不是一个 软盘吧。 只是被登记在fd下而已。
U盘 不受软盘操作的限制。

2:
另外, 能否 usb --init 命令能否加一个开关, 强制 hd还是 fd.
usb --type  typeparam  --init
如:
usb --type  %?_BOOT%  --init
usb --type  %@root%  --init
如果typeparam 以(fd 或fd开头或0-0x7F(除掉几个),(当前U盘) 就强制fd
如果typeparam 以(hd 或hd开头或0x80-0x9F, (当前U盘) 就强制hd
如果typeparam 以(cd 或cd开头或0xA0-XX, (当前U盘) 就强制cd
。。。

这样启动菜单可以前后一致。
实际上 最主要的还是用来后续启动的设备(先root, 那么就是root设备)。

3:还可以这样确定 磁盘的类型,保持不变。
记住磁盘的 签名(4字节)  和 磁盘大小等细节。
usb 2.0 驱动后,
再根据这些 信息,恢复原来的类型。


回复

使用道具 举报

72#
 楼主| 发表于 2014-4-14 10:16:46 | 只看该作者
本帖最后由 2011yaya2007777 于 2014-4-14 10:30 编辑
由于分区表没有激活,故判定为无分区表

这句话表述的不够严谨,应当是分区表无效。
实际是,usb 驱动要确定启动盘,并获取相应驱动器启动分区的参数。你的逻辑0扇区,既有分区表又有 BPB 表。分区表没有一项激活,明显说明你是以 FD  方式启动。“那个PE的分区表可以切换”,说明他可以在 FD 和 HD之间切换,而当前正在 FD 模式,故识别为软盘启动没有任何错误。
至于后续启动的设备,可以使用 find --set-root 确定其根目录。
回复

使用道具 举报

73#
发表于 2014-4-14 11:37:08 | 只看该作者
本帖最后由 mdyblog 于 2014-4-14 11:43 编辑
2011yaya2007777 发表于 2014-4-14 10:16
这句话表述的不够严谨,应当是分区表无效。
实际是,usb 驱动要确定启动盘,并获取相应驱动器启动分区的 ...


1:
还是希望 保持原来的新式。
原来是(hd) 还是(hd)
原来是(fd)还是(fd)

要么程序自己记住。
要么提供一个开关  --type  typeparam
usb --type  typeparam  --init

2:
>>分区表没有一项激活,明显说明你是以 FD  方式启动。
这个不对啊。
启动时 还没到 分区启动, 所以 当前 是 HD还是 FD 和此无关。
比如 grub4dos装在MBR。
grub4dos启动时, 还没进分区。
grub4dos后续操作 也不需要  “分区表项激活”,  grub4dos启动分区 不看这个的。

“分区表项激活” 目前,只是 MS 的默认 MBR-CODE 用来启动分区; grub4dos不用, 一般直接菜单选择。

回复

使用道具 举报

74#
发表于 2014-4-14 11:59:33 | 只看该作者
本帖最后由 不点 于 2014-4-14 12:02 编辑

grub4dos 的 C 语言源代码有一个函数 probe_mbr() ,经过了长期的改造,现在应该十分稳定。它能够严格地检查分区表的合法性。随机的乱数据很难通过检查。同时,它又能适应所有的分区软件所建立的分区表(至少目前没有见到失败报告)。诚如 mdyblog 所说,有没有激活项,不能成为判断软盘或硬盘的标准。分区表是否合法,才应该成为判断的标准。
回复

使用道具 举报

75#
 楼主| 发表于 2014-4-14 21:07:16 | 只看该作者
本帖最后由 2011yaya2007777 于 2014-4-18 11:06 编辑
还是希望 保持原来的新式。

试一试这个.
回复

使用道具 举报

76#
发表于 2014-4-15 05:45:45 | 只看该作者
如何判断是4.5c还是4.6a
回复

使用道具 举报

77#
发表于 2014-4-15 22:50:56 | 只看该作者
本帖最后由 mdyblog 于 2014-4-15 22:52 编辑


usb --init
后 (hd0) 还是 (hd0)

不过有个奇怪的新问题,下面的代码不能工作了。
map  (%boot%)0x4100+0x400000  (fd1)
map --hook
map  (fd1)   (fd0)
map  (fd0)   (fd1)
map --hook

-------
//其中, boot  是0x8280地址返回的, 看了下正确的。0x80.
访问 (fd0) 无效。
单步试了下,
第一个 --hook 后正常,(fd1) 可访问。
在 转为 (fd0) 后,就不能访问了。
真奇怪了, 上面代码没有问题啊!!!!
回复

使用道具 举报

78#
发表于 2014-4-15 23:22:21 | 只看该作者
您的代码等价于如下的简化代码:

map  (%boot%)0x4100+0x400000  (fd0)
map  (fd0)   (fd1)
map --hook

您可以先核实一下这个简化代码是否能够工作?

回复

使用道具 举报

79#
发表于 2014-4-16 16:40:35 | 只看该作者
本帖最后由 mdyblog 于 2014-4-16 16:43 编辑
不点 发表于 2014-4-15 23:22
您的代码等价于如下的简化代码:

map  (%boot%)0x4100+0x400000  (fd0)


//这个没问题的。
//我这样能启动PE。
//
//原来应该没问题啊!????

看错了。 晚上回去试试。

我现在这样能启动PE。
map  (%boot%)0x4100+0x400000  (fd0)
map --hook
root (fd0) ......
回复

使用道具 举报

80#
发表于 2014-4-16 20:09:47 | 只看该作者
那就让 yaya 解决 78 楼的问题吧。应该是个 bug 了。

回复

使用道具 举报

81#
发表于 2014-4-16 22:15:05 | 只看该作者
不点 发表于 2014-4-15 23:22
您的代码等价于如下的简化代码:
map  (%boot%)0x4100+0x400000  (fd0)
map  (fd0)   (fd1)
map --hook
您可以先核实一下这个简化代码是否能够工作?

测试。 可以启动。
回复

使用道具 举报

82#
 楼主| 发表于 2014-4-18 11:13:05 | 只看该作者
在 转为 (fd0) 后,就不能访问了。
真奇怪了, 上面代码没有问题啊!!!!


78# 的问题已经解决。

使用最近几版grldr 启动下边2个PE进入桌面前蓝屏!

50# 启动 WinXP 出现 7f 蓝屏问题,终于解决了。

请从 1# 下载。
回复

使用道具 举报

83#
 楼主| 发表于 2014-4-18 11:24:52 | 只看该作者
可以尝试修改一下,看看假如允许 --in-situ 对软盘进行操作,会不会出问题?

假如允许 --in-situ 对软盘进行操作,需要探测 from 及 to 驱动器有没有分区表,在具有的情况下,才能执行。
还需要预先读 from 及 to 驱动器。比较啰嗦。等有特别需求时再更改吧。

请教不点,好像程序头部把内置菜单移动到 3M 处,其他没有移动。但是有的函数将 0x1F000,0x20000,0x2F000 等内存作为缓存,岂不是覆盖了 grldr ?
回复

使用道具 举报

84#
 楼主| 发表于 2014-4-18 11:28:31 | 只看该作者
如何判断是4.5c还是4.6a

程序末尾有个签名,但位置容易变动,不宜从命令行获得。如果有特别理由,可以设置一个识别字节。
回复

使用道具 举报

85#
发表于 2014-4-18 13:35:33 | 只看该作者
2011yaya2007777 发表于 2014-4-18 11:13
78# 的问题已经解决。

实机测试蓝屏问题解决了,以前进入PE认不到 U 盘问题也没有了,感谢 YAYA 大辛苦了!
回复

使用道具 举报

86#
发表于 2014-4-18 14:15:13 | 只看该作者
本帖最后由 mdyblog 于 2014-4-18 14:31 编辑
2011yaya2007777 发表于 2014-4-18 11:24
假如允许 --in-situ 对软盘进行操作,需要探测 from 及 to 驱动器有没有分区表,在具有的情况下,才能执 ...



1:
to 的 分区表 不需要 探测。
这条命令  不是模拟下有磁盘的 某个分区, 那样泰复杂了, 目前好像也没必要。
而是直接 建立一个虚拟硬盘, 伪造一个分区表,分区的 内容 就用的 制定的内容。

2:
我说的那种情况 的 --in-situ 不需要  from 探测分区表。
只有指定 (fd0,0)  这种形式 的 from 才需要。用来找到 数据源。
此种 可以转为 下面我现在用的这种情况。


我这里  数据源已经 已经是扇区序列形式了  (fd0)A+B, 不用再通过分区表找了。

综上所叙,这种情况的 难度就大大降低了。
希望先把这种情况解决。至于 (fd0,0)这种from, 再慢慢来。
回复

使用道具 举报

87#
发表于 2014-4-18 14:27:31 | 只看该作者
本帖最后由 mdyblog 于 2014-4-18 14:28 编辑
2011yaya2007777 发表于 2014-4-18 11:28
程序末尾有个签名,但位置容易变动,不宜从命令行获得。如果有特别理由,可以设置一个识别字节。


干脆开1K的常数区 和4K的变数区。位置固定。

1K的常数区 :放版本等系统信息。以后加。有点用的都加上。

4K的变数区: 类似变量, 但没有名字,不会被set 清空,不会被其它程序(脚本)覆盖。
                   目前由于机制原因,变量数太少。容易溢出。
  开始 4字节 保存尾指针, 和pop指针(frame pointer)。
   脚本开始 pushv或pushva(自动popv), 脚本返回 自动或手动popv.
回复

使用道具 举报

88#
发表于 2014-4-18 15:20:46 | 只看该作者
本帖最后由 xyzxp 于 2014-4-18 15:35 编辑

title 极速2003_PE 维护系统   
echo $[1102] Loading  2003_PE, please wait ...
usb --init
calc *0x8280 || set mem=yes
calc *0x82b8 && calc *0x82b9&0xff || set mem=yes
root (ud)
/BOOT/GRUB/SRSF6
map (ud)/BOOT/03pe.iso (0xfa)
if %mem%==yes && map --mem (ud)/BOOT/03.iso (0xff) ! map (ud)/BOOT/03.iso (0xff)
map --e820cycles=3
map --rehook
chainloader (0xff) || chainloader (0xff)/WXPE/SETUPLDR.BIN

在我的另外一台机器上测试 加载SRSF6后又不能进入桌面了(XPPE情况相同 usb --init 加不加都一样),菜单取消这一行 /BOOT/GRUB/SRSF6正常,老版本也正常。

菜单加这一行 /BOOT/GRUB/SRSF6后出现下边图片情况:



回复

使用道具 举报

89#
发表于 2014-4-18 16:32:38 | 只看该作者
2011yaya2007777 发表于 2014-4-18 11:13
78# 的问题已经解决。

直接用 run /0PE.iso 启动 0PE还是 7F 蓝屏。
回复

使用道具 举报

90#
 楼主| 发表于 2014-4-18 16:44:23 | 只看该作者
本帖最后由 2011yaya2007777 于 2014-4-18 17:14 编辑

我在虚拟机测试,强制加载 SRSF6 失败后,任可以进入桌面。
好像没有加载  (ud)/BOOT/03pe.iso (0xfa)
你从 1# 重新下载一个试一试,前一个有问题。

实机测试,有一次如你所测,其他 5 次任意选择方案,加载失败后正常进入桌面。

点评

下午版本和上午版本实机测试现象一样。  详情 回复 发表于 2014-4-18 17:49
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 09:41

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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