无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
931#
发表于 2015-2-27 07:28:16 | 只看该作者
不点 发表于 2015-2-26 03:47
我说的是现状,你说的是要改变现状,不是一个概念。很抱歉,我帮不了了,我退出这个话题。

下面是想说 ...


>>假如能够把这个问题做好,达到两全其美,那也是好事。
-------------------
我分析了下。 应该可以的。
1(ud)本身的问题。
由于(ud) 绑定的 是物理磁盘。
这样,没有map 动态调整的 麻烦。
因为 map 动态调整,不会调整 物理磁盘 号。

多个硬盘也没问题。
从硬盘启动时,总是0x80.  也不受map影响。


2grldr启动的时候,要检查是否从ud启动。如果是的,则把 ud 区当作当前 root 区
-------------------
这个也根本不是问题。这个是有规范的。
启动磁盘,本来就和(ud)没有一点关系。
启动磁盘 依据规范,是通过dl传递的。 传递的多少,就是多少。
启动分区,本来就和(ud)没有一点关系。
启动磁盘 依据规范,也传递过来的。 传递的多少,就是多少。不是有(ud)决定的。

只有从MBR启动时,或者类似情况。此时 分区号为255,表示没有分区,而从“整个磁盘”启动。
此时 才会 “检查是否从ud启动,如果是的,则把 ud 区当作当前 root 区”.

比如:
1) 从 (hd0,0)  chainloader  /grldr
此时指定了 分区号, 根分区和 (ud)无关。 根分区为(hd0,0)
此时,会继承原来的 (ud).  注意是继承的,而不是分析(hd0,0) 的这个hd0而得来的。


2) 从(ud)   chainloader  /grldr
此时,会继承原来的 (ud).  并用继承的(ud)作为root。
注意是继承的,而不是分析得来的。


3) 从(hd0)   chainloader  /grldr
(1)此时,会自动继承原来的 (ud).
         注意是继承的,而不是分析(hd0,0) 的这个hd0而得来的。

(2)如果没有开关禁止,
         如果逻辑磁盘(hd0) 对应一个物理磁盘或其头部,分析物理磁盘对应区域, 如果是完的(ud), "则把 ud 区当作当前 root 区"。 同时更新(ud)
         否则直接把(hd0)  "当作当前 root 区"。 ((ud).还是原来的(ud))

(3)如果有开关禁止, 不分析逻辑磁盘(hd0), 直接把(hd0)  "当作当前 root 区" ((ud).还是原来的(ud))



点评

随便说说一点看法,供参考。 你可以自己打补丁,提交给 chenall。chenall 接到补丁后,可以先测试一段时间,如果放心,就会正式采纳。chenall 甚至也有可能为你单独开辟一个系列,就像以前为 yaya 单独开辟一个  详情 回复 发表于 2015-2-27 09:01
回复

使用道具 举报

932#
发表于 2015-2-27 09:01:51 | 只看该作者
mdyblog 发表于 2015-2-27 07:28
>>假如能够把这个问题做好,达到两全其美,那也是好事。
-------------------
我分析了下。 应该可以 ...


随便说说一点看法,供参考。

你可以自己打补丁,提交给 chenall。chenall 接到补丁后,可以先测试一段时间,如果放心,就会正式采纳。chenall 甚至也有可能为你单独开辟一个系列,就像以前为 yaya 单独开辟一个系列那样,进行长期的测试和评估。一旦成熟,大家自然会全面采用你的版本。

如果你自己不愿意做或者没时间做,可以等待别人去做。可以说服开发团队成员去按照你的思路完成任务。如果开发团队成员由于种种原因做不了,那你可以在团队之外寻求高手支持,完成开发任务。

回复

使用道具 举报

933#
发表于 2015-2-28 10:03:34 | 只看该作者
本帖最后由 mdyblog 于 2015-2-28 10:11 编辑

请问  rawread() 最后的 那个 魔术数 怎么填?
我的代码从 udm搬到UD后。 读  0扇区(就恰好一个扇区)就卡死了。

目前 我用的的是 0xedde0d90

rawread(0x80, 0,0,0x200, 0x200*0x200,  0xedde0d90);
这样就卡住了。 (经调试,boot设备是0x80)

点评

rawread原型 这个buf是一个内存地址,你0x200*0x200是什么意思? write是读写标志. 用grub4dos.h的话可以使用GRUB_READ或GRUB_WRITE 最新版的grub4dos.h在这里 https://raw.githubusercontent.com/chenall/gr  详情 回复 发表于 2015-2-28 10:17
回复

使用道具 举报

934#
发表于 2015-2-28 10:17:27 | 只看该作者
本帖最后由 chenall 于 2015-2-28 10:21 编辑
mdyblog 发表于 2015-2-28 10:03
请问  rawread() 最后的 那个 魔术数 怎么填?
我的代码从 udm搬到UD后。 读  0扇区(就恰好一个扇区) ...


rawread原型,
看原型应该很容易理解的,drive设备号,sector扇区号,byte_offset偏移,byte_len要读写的字节数,buf缓存区,write读写标志.

这个偏移比如你想读第一个扇区的0x1b8处的16个字节到内存0x40000处可以这样

rawread(0x80,0,0x1b8,16,0x40000,GRUB_READ)

  1. int
  2. rawread (unsigned long drive, unsigned long long sector, unsigned long byte_offset, unsigned long long byte_len, unsigned long long buf, unsigned long write)
复制代码

这个buf是一个内存地址,你0x200*0x200是什么意思?
write是读写标志.
用grub4dos.h的话可以使用GRUB_READ或GRUB_WRITE

最新版的grub4dos.h在这里
https://raw.githubusercontent.co ... /include/grub4dos.h

点评

这么重要的东东,还是放在首页吧(链接)。  详情 回复 发表于 2015-2-28 11:30
回复

使用道具 举报

935#
发表于 2015-2-28 11:29:36 | 只看该作者
本帖最后由 mdyblog 于 2015-2-28 15:43 编辑

反应个现象,不知算不算BUG。
如果对U盘启动的ud 执行 geometry --lba1sector
后面读盘就死翘翘了。
先确认hd启动,不是fd。

  1. geometry --lba1sector (128)
  2. dd  if=(128)0+1  of=(md)0x200+1
复制代码

就死翘翘了。


没有geometry --lba1sector
  1. dd  if=(128)0+1  of=(md)0x200+1
复制代码

就没问题。


Ver: grub4dos-0.4.6a-2015-01-18.7z

实例fba: 2015-0118.fba.zip (165.92 KB, 下载次数: 15)

qemu  模拟器中没问题。
实际U盘,在我的新旧2台机器上都是  死翘翘 。--------------急
回复

使用道具 举报

936#
发表于 2015-2-28 11:30:58 | 只看该作者
chenall 发表于 2015-2-28 10:17
rawread原型,
看原型应该很容易理解的,drive设备号,sector扇区号,byte_offset偏移,byte_len要读写的字 ...

这么重要的东东,还是放在首页吧(链接)。
回复

使用道具 举报

937#
发表于 2015-2-28 15:38:53 | 只看该作者
本帖最后由 mdyblog 于 2015-2-28 15:40 编辑

着急:
UD上 geometry --lba1sector 的问题。
914#

点评

貌似着急也没用。你的主板 bios 不允许按单扇区读盘,你又有了新发现。祝贺。同时你分享给大家,大家也都能增加这样的知识。 当你发现更多类似的现象时,你的视野也就更开阔了,理解力也就进一步加强了。世上大概  详情 回复 发表于 2015-2-28 16:51
回复

使用道具 举报

938#
发表于 2015-2-28 16:51:15 | 只看该作者
mdyblog 发表于 2015-2-28 15:38
着急:
UD上 geometry --lba1sector 的问题。
914#

貌似着急也没用。你的主板 bios 不允许按单扇区读盘,你又有了新发现。祝贺。同时你分享给大家,大家也都能增加这样的知识。

当你发现更多类似的现象时,你的视野也就更开阔了,理解力也就进一步加强了。世上大概没有不可能的东西,只有尚未被发现的东西。

顺便说,会不会仅仅是 0.4.6 的 bug 呢?你能否确认 0.4.5 也有这个问题?

如果 0.4.5 没问题,赶紧请 yaya 修复 bug。

点评

不是主板 不支持。支持的。 只是用了UD后才出了妖蛾子。 以前一直用UDm, 不是UD, --lba1sector (128)一直用的好好的。 否则早就发现了。 最近做UD版, 同样的代码,才发现这个幺蛾子。 反复实验, 发  详情 回复 发表于 2015-2-28 17:09
回复

使用道具 举报

939#
发表于 2015-2-28 17:09:28 | 只看该作者
不点 发表于 2015-2-28 16:51
貌似着急也没用。你的主板 bios 不允许按单扇区读盘,你又有了新发现。祝贺。同时你分享给大家,大家也都 ...

不是主板 不支持。支持的。
只是用了UD后才出了妖蛾子。

以前一直用UDm, 不是UD, --lba1sector (128)一直用的好好的。
否则早就发现了。

最近做UD版, 同样的代码,才发现这个幺蛾子。


反复实验, 发现只有一种方式可以的。
  1. calc *0x82A0=128
  2. geometry --lba1sector
  3. dd  if=(128)0+1  of=(md)0x200+1
复制代码


要的
1) 要用calc *0x82A0=128
root (128)不行的。

2)geometry --lba1sector  不能带dev
不能是  geometry --lba1sector  (128)

-----------------
这么奇怪,像是软件问题啊。否则 "root (128)不可以,calc *0x82A0=128“  "geometry --lba1sector 不带dev才可以"都说不过去的。
好像是UD混乱了。


回复

使用道具 举报

940#
发表于 2015-2-28 18:24:39 | 只看该作者
从 ud 启动后,直接进入 grldr,此时会混乱吗?

有多少个机器会出现混乱?

是不是由于你的部署方式太奇特了(这一点你自己最清楚),因而造成混乱?

0.4.5 有问题吗?(前面问过的,没有得到答复)

以上这几个问题,是想帮你定位问题的根源,不是让你回答的。你自己有测试环境,因此你可以找毛病。最好是死活都找不出原因,那样你就有更多的机会去折腾了,折腾的结果会让你的电脑技术得到大大加强。

点评

1:从 ud 启动后,直接进入 grldr,此时会混乱吗 --------------- 就是 ud 直接进入 grldr, 见 示例fba。 (fba不支持我的UDM扩展UD。我用的是标准UD测试的) 再在命令行 输入上面的命令。 2:有多少  详情 回复 发表于 2015-2-28 20:07
回复

使用道具 举报

941#
 楼主| 发表于 2015-2-28 18:25:47 | 只看该作者
请 chenall 看看,今天打了一个补丁,上传到我的分支,不知为何没有进入你的主干。

点评

因为github有时候会抽疯访问不了. 昨天我有看了下代码是有并入0.4.6a,只是没有自动编译,我后面手工处理了一下.  详情 回复 发表于 2015-3-1 09:09
你这个帖子被后面的大量帖子淹没了。你最好开个新帖,提醒 chenall。  详情 回复 发表于 2015-3-1 07:03
回复

使用道具 举报

942#
发表于 2015-2-28 20:07:36 | 只看该作者
本帖最后由 mdyblog 于 2015-3-1 10:33 编辑
不点 发表于 2015-2-28 18:24
从 ud 启动后,直接进入 grldr,此时会混乱吗?

有多少个机器会出现混乱?


1:从 ud 启动后,直接进入 grldr,此时会混乱吗
---------------
就是 ud 直接进入 grldr,
见 示例fba。  (fba不支持我的UDM扩展UD。我用的是标准UD测试的)

再在命令行 输入上面的命令。



2:有多少个机器会出现混乱?
我这就2台机器能USB启动, 都出这种 UD 幺蛾子。



3:是不是由于你的部署方式太奇特了(这一点你自己最清楚),因而造成混乱?
----------------
我是用的部署方法发现问题的。
为了方便交流。 上面的测试都是用标准UD。就是用J大的FBT。
为了说明是标准UD,我上面还附上了测试的FBA文件。


4:0.4.5 有问题吗?(前面问过的,没有得到答复)
----------------
我等会儿再补上。(干嘛要测这么多版本,挺烦的,难道不能就做好一个版本,并维护好.大家始终向都一个版本看齐。节省劳动,提高效率)

补上了。 grub4dos-0.4.5c-2015-02-09.7z
效果和0.46a一样。


5:以上这几个问题,是想帮你定位问题的根源,不是让你回答的。你自己有测试环境,因此你可以找毛病。最好是死活都找不出原因,那样你就有更多的机会去折腾了,折腾的结果会让你的电脑技术得到大大加强。
-----------------------
我却相反。
我只是希望尽快解决问题。至于提高“电脑技术”,已经不再是我的关注了。(每个人有自己的关注点,否则一事无成)
如果有人能解决,我就不折腾了。
回复

使用道具 举报

943#
发表于 2015-2-28 21:46:23 | 只看该作者


4:0.4.5 有问题吗?(前面问过的,没有得到答复)
----------------
我等会儿再补上。(干嘛要测这么多版本,挺烦的,难道不能就做好一个版本,并维护好.大家始终向都一个版本看齐。节省劳动,提高效率)

惹你烦了,实在抱歉。不过,我不代表开发者。我只是凭我的理解力来回复的。没有任何强迫的意思,这一点请了解。如果帮不到你,请忽略我说的话。至于说为什么维护多个版本,我的理解是,存在皆合理,它一定有理由,你不妨猜测一下它的理由是啥。我觉得你不难猜到。或者你也可以直接问问开发者,让开发者给你详细解释解释。

5:以上这几个问题,是想帮你定位问题的根源,不是让你回答的。你自己有测试环境,因此你可以找毛病。最好是死活都找不出原因,那样你就有更多的机会去折腾了,折腾的结果会让你的电脑技术得到大大加强。
-----------------------
我却相反。
我只是希望尽快解决问题。至于提高“电脑技术”,已经不再是我的关注了。(每个人有自己的关注点,否则一事无成)
如果有人能解决,我就不折腾了。

如果能够不折腾就把问题解决了,那是最理想的了。不过,事情往往不那么顺利。世上没有完美的东西,软件的 bug 会有很多。功能越多,产生 bug 的概率就越大。bug 就是人所犯的错误。错误是很难避免的。出现 bug,总得有人去折腾。有的 bug 能持续好几年才得到解决。

点评

4:0.4.5 有问题吗?(前面问过的,没有得到答复) ---------------- 我等会儿再补上。(干嘛要测这么多版本,挺烦的,难道不能就做好一个版本,并维护好.大家始终向都一个版本看齐。节省劳动,提高效率) 0.45  详情 回复 发表于 2015-3-1 10:36
回复

使用道具 举报

944#
发表于 2015-2-28 22:27:33 | 只看该作者
本帖最后由 mdyblog 于 2015-2-28 23:05 编辑

请教 --lba1的问题

1:
(hd0)或者 (fd0),设置了 --lba1。
在部分map (非ram)成的新盘, 还需要在单独--lba1吗?
感觉不需要, 因为新的设备只是一个服务入口而已,最终还是回到实际的BIOS盘。


2:FBT格式化的界面上的速度,和这个有关吗?界面上设为1,这里会有 --lba1的效果吗?
感觉不需要,因为界面上的选择这么多,g4d只有2个选择,对不上。

3: 如果 用 dd 或 rawread(), 其参数恰好是一个整扇区, 这样, 即使没有 设定--lba1。 也不会有多扇区访问的问题 ,是吗?
实际测试的感觉不是这样。--lba1后慢非常多。不只是 一次对几个扇区的问题,还有很多东西被禁止了。
其实,现在的磁盘,即使一个扇区一个扇区地读,本身不慢多少,一般的程序看不出多大差别, 因为磁盘本身有缓冲机制。
本身就会读取合并。

望赐教!
回复

使用道具 举报

945#
发表于 2015-3-1 05:52:05 | 只看该作者
本帖最后由 不点 于 2015-3-1 06:03 编辑

1. 单扇区读盘的参数,是我设计的。它应该能够处理未经 map 的盘。至于说 map 之后,情况复杂,那涉及到修改 int13 handler,让其能够发现宿主母盘的单扇区读的特性,并采取单扇区读。这部分工作没有做,因为 int13 的代码空间已经达到 12K 的极限,没法再插入有关单扇区读的代码了。这就是说,在那些有问题的电脑上,用户只能凑合着使用 grub4dos,而不能获得全方位的支持。意思是说,在那些只能进行单扇区读盘的 bios 之下,用户使用不带 --mem 的 map 命令创建虚拟盘,则虚拟盘可能不是单扇区读的,这意味着,访问虚拟盘有可能造成死机。因此,在这种情况下,用户不可以使用不带 --mem 的 map 命令。很抱歉,这一点没有写在文档里面。不过,已经发现的 bug 机器很少,所以,一般情况下,可以忽略这个问题。chenall 设计了一个方法,用户在启动时快速按 S 键可以进入单扇区读模式。所以,第三方开发者和应用者们没必要关心单扇区读的问题了。用户在首次启动发生死机时,他会想到,需要调试。那么在调试选项里面,就有 S 键进入单扇区读盘模式。在启动之初一旦检测到用户按了 S 键,grub4dos 就自动设定启动盘为单扇区读盘模式。特别指出,当机器是从 ud 启动时,当前 root 分区是 ud,而此时执行 geometry --lba1sector ,将把 ud 的宿主盘设定为单扇区读盘模式。ud 盘和pd盘类似,都没有通常的扇区的概念。具有扇区概念的盘,那是 ud 的宿主盘,不是 ud 盘本身。ud 和 pd 都不是 bios 盘。

点评

1: 现在基本确定是ud引起的软件混乱导致死翘翘。 关闭ud就好了。 这样就没问题了。  详情 回复 发表于 2015-3-1 10:40
回复

使用道具 举报

946#
发表于 2015-3-1 06:29:24 来自手机 | 只看该作者
本帖最后由 不点 于 2015-3-1 06:30 编辑

2. fbinsttool 是否支持单扇区读盘参数设定。这个我不知道。我个人认为,通过 fbinsttool 设定单扇区读盘,固然会避免死机,但影响正常机器的启动速度。仅仅就这个话题而论,我认为采用我所开发的 multimbr,是目前最好的选择。multimbr 在第一阶段读取 grldr 的过程中,全部采用单扇区读盘。微软的 bios 启动代码也是单扇区读盘。与微软的做法保持一致,这样能够提高启动的成功率,能够尽量避免进入某个封杀陷阱。当grldr接管控制后,由用户负责设定单扇区读盘模式。当用户发现死机,那么下次启动时,就可以通过快速按 S 键来设定启动盘为单扇区读盘模式。所以,在 multimbr 的情形,开发者和应用者根本没必要管这个事了,这就简化了制作启动盘的逻辑,做到了既无参数设定,又能通吃所有的情况(当然了,新的 bios 攻击除外,人家掌握话语权,非要封杀,那没办法)。
回复

使用道具 举报

947#
发表于 2015-3-1 06:43:41 | 只看该作者
3. grub4dos 所提供的读盘函数,似乎都是 c 语言的。你只有直接调用汇编语言,才能实现你自己的单扇区读盘。

grub4dos 的 c 语言读盘,是采用缓冲区的。每次要读一个磁道。在 lba 的情形,每次读 127 个扇区。

所以,即使你只是要读一个扇区,grub4dos 实际上也要读 127 个扇区。只不过在单扇区读盘的情况,是分为 127 个 int13 调用,这当然很慢了。而在多扇区读盘的模式下,127 个扇区仅需一个 int13 调用,当然就很快了。

点评

1: 原来是这个原因。也就是读一个扇区,实际读127个!慢了127倍。 2:能提供其它函数, 或在提供一个开关,就让他不要一次连着读127个扇区。 3: 你只有直接调用汇编语言,才能实现你自己的单扇区读盘 现在  详情 回复 发表于 2015-3-1 09:07
回复

使用道具 举报

948#
发表于 2015-3-1 07:03:56 | 只看该作者
2011yaya2007777 发表于 2015-2-28 18:25
请 chenall 看看,今天打了一个补丁,上传到我的分支,不知为何没有进入你的主干。

你这个帖子被后面的大量帖子淹没了。你最好开个新帖,提醒 chenall。

回复

使用道具 举报

949#
发表于 2015-3-1 07:57:40 来自手机 | 只看该作者
fbinsttool单扇区读盘只是影响fb本身,对grldr或者buldr没有影响

点评

1: 谢谢!!! 非常感谢。 2: 另外, 你知道 “UD 启动的 grldr, 开启 --lba1sector 模式,读盘就卡死了” 的原因吗?  详情 回复 发表于 2015-3-1 08:55
回复

使用道具 举报

950#
发表于 2015-3-1 08:55:04 | 只看该作者
jianliulin 发表于 2015-3-1 07:57
fbinsttool单扇区读盘只是影响fb本身,对grldr或者buldr没有影响

1:
谢谢!!!
非常感谢。


2:
另外, 你知道 “UD 启动的 grldr, 开启 --lba1sector 模式,读盘就卡死了” 的原因吗?

回复

使用道具 举报

951#
发表于 2015-3-1 09:07:38 | 只看该作者
本帖最后由 mdyblog 于 2015-3-1 09:08 编辑
不点 发表于 2015-3-1 06:43
3. grub4dos 所提供的读盘函数,似乎都是 c 语言的。你只有直接调用汇编语言,才能实现你自己的单扇区读盘 ...


1: 原来是这个原因。也就是读一个扇区,实际读127个!慢了127倍。

2:能提供其它函数, 或在提供一个开关,就让他不要一次连着读127个扇区。

3:
你只有直接调用汇编语言,才能实现你自己的单扇区读盘
试试。

点评

2:能提供其它函数, 或在提供一个开关,就让他不要一次连着读127个扇区。 这一条,目前用已经公开的函数接口,好像是做不到。但我没有仔细研究,也许能做到,也未可知。你可以向开发者提要求,要求提供单扇区读  详情 回复 发表于 2015-3-1 10:49
回复

使用道具 举报

952#
发表于 2015-3-1 09:09:58 | 只看该作者
2011yaya2007777 发表于 2015-2-28 18:25
请 chenall 看看,今天打了一个补丁,上传到我的分支,不知为何没有进入你的主干。

因为github有时候会抽疯访问不了.

昨天我有看了下代码是有并入0.4.6a,只是没有自动编译,我后面手工处理了一下.
回复

使用道具 举报

953#
发表于 2015-3-1 10:36:04 | 只看该作者
不点 发表于 2015-2-28 21:46
4:0.4.5 有问题吗?(前面问过的,没有得到答复)
----------------
我等会儿再补上。(干嘛要测这 ...

4:0.4.5 有问题吗?(前面问过的,没有得到答复)
----------------
我等会儿再补上。(干嘛要测这么多版本,挺烦的,难道不能就做好一个版本,并维护好.大家始终向都一个版本看齐。节省劳动,提高效率)

0.45c测试 补上了。 grub4dos-0.4.5c-2015-02-09.7z
效果和0.46a一样。
先确认hd启动,不是fd。

  1. geometry --lba1sector (128)
  2. dd  if=(128)0+1  of=(md)0x200+1
复制代码

就死翘翘了。


没有geometry --lba1sector
  1. dd  if=(128)0+1  of=(md)0x200+1
复制代码

就没问题。
回复

使用道具 举报

954#
发表于 2015-3-1 10:40:04 | 只看该作者
本帖最后由 mdyblog 于 2015-3-1 10:47 编辑
不点 发表于 2015-3-1 05:52
1. 单扇区读盘的参数,是我设计的。它应该能够处理未经 map 的盘。至于说 map 之后,情况复杂,那涉及到修 ...


1: 现在基本确定是ud引起的软件混乱导致死翘翘。

关闭ud就好了。
root (128)
calc *0x82b8=0
geometry --lba1sector  (128)
dd  if=(128)0+1  of=(md)0x200+1

这样就没问题了。


2:
关于按'S'进入 --lba1的安全模式。

在这他机器上,
提示执行 geometry --lba1sector  成功, root为0x23.
立马就死翘翘了。

连内置菜单也没出来。

只是提示在执行内置菜单.......

点评

你的报告,大致上可以理解为,单扇区读盘模式有 bug,需要排解。至于说如何排解,我好像也帮不上什么忙,那就由你们来做了。  详情 回复 发表于 2015-3-1 10:58
回复

使用道具 举报

955#
发表于 2015-3-1 10:49:07 | 只看该作者
mdyblog 发表于 2015-3-1 09:07
1: 原来是这个原因。也就是读一个扇区,实际读127个!慢了127倍。

2:能提供其它函数, 或在提供一 ...

2:能提供其它函数, 或在提供一个开关,就让他不要一次连着读127个扇区。

这一条,目前用已经公开的函数接口,好像是做不到。但我没有仔细研究,也许能做到,也未可知。你可以向开发者提要求,要求提供单扇区读盘函数。如果开发者觉得有必要,他会满足你的要求。如果他觉得没必要而拒绝,他会给你解释理由。

缓冲机制是 gnu grub 原有的机制,不是 grub4dos 特有的。原来的 gnu grub 就是按照磁道读盘的。只不过原来是按照 63 扇区作为 lba 模式的一个虚拟磁道,我改成了 127 扇区作为 lba 模式的虚拟磁道。

chenall 写了一个外部命令,就叫做 bios,它可以实现单扇区读盘。你只要懂得 int13 的调用规范,就可以使用 bios 这个命令。具体用法,你自己搜索。
回复

使用道具 举报

956#
发表于 2015-3-1 10:58:28 | 只看该作者
本帖最后由 不点 于 2015-3-1 17:58 编辑
mdyblog 发表于 2015-3-1 10:40
1: 现在基本确定是ud引起的软件混乱导致死翘翘。

关闭ud就好了。


你的报告,大致上可以理解为,单扇区读盘模式有 bug,需要排解。至于说如何排解,我好像也帮不上什么忙,那就由你们来做了。

对于 grub4dos,随着时间的推移,我的记忆会越来越模糊。趁着现在还保留了一部分记忆,我尽量多来这里回答问题。

能答复多少,就是多少。答复不了的,那就没办法了,我尽力了,因此我也不会后悔。具体的排解 bug、写代码,都很伤身体,我也都做不了了。我只能出点小力,不能出大力了。

回复

使用道具 举报

957#
发表于 2015-3-1 14:57:06 | 只看该作者
@yaya
之前的报告#841楼
http://bbs.wuyou.net/forum.php?m ... 04&fromuid=1025

昨天报告者说0.4.5c也有问题?如果问题确实存在的话那是不是说这个问题很早的版本就存在了?

回复

使用道具 举报

958#
 楼主| 发表于 2015-3-1 17:11:59 | 只看该作者
在 exfat 分区,使用 grub4dos-0.4.5c-2015-01-20,可以正常加载 .iso 镜像。
原因是:0.4.5c 没有探测到 exfat 的 bpb,因而使用探测的几何参数;而 0.4.6a 可以探测到 exfat 的 bpb,因而使用 bpb 的参数。但是 exfat 参数的位置与 fat 不同,从而出错(已经修正)。

点评

???? 这个报告是grldr.mbr的问题,查找的时候直接查找(hd1)这样子,少了分区号.  详情 回复 发表于 2015-3-1 17:29
回复

使用道具 举报

959#
发表于 2015-3-1 17:29:05 | 只看该作者
2011yaya2007777 发表于 2015-3-1 17:11
在 exfat 分区,使用 grub4dos-0.4.5c-2015-01-20,可以正常加载 .iso 镜像。
原因是:0.4.5c 没有探测到  ...

????

这个报告是grldr.mbr的问题,查找的时候直接查找(hd1)这样子,少了分区号.
回复

使用道具 举报

960#
 楼主| 发表于 2015-3-1 17:40:09 | 只看该作者
使用 grub4dos-0.4.5c-2015-01-20 测试,没有问题。请让报告者截图,并说明 grldr 版本。
Press F12 for boot menu.

Booting from Hard Disk...

Try (hd0,0): NTFS5: No grldr
Try (hd0,1): Extended:
Try (hd0,2): FAT16: No GRLDR
Try (hd0,3): FAT16: No GRLDR
Try (hd0,4): FAT16: No GRLDR
Try (hd0,5): Extended:
Try (hd0,5): FAT16: No GRLDR
Try (hd1,0): NTFS5: No grldr
Try (hd1,1): NTFS5: No grldr
Try (hd1,2): NTFS5: No grldr
Try (hd1,3): NTFS5: No grldr
BIOS: Drive=0x0, H=0, S=0

Try (fd0): NTFS5: 0
Cannot find grldr in all drives. Press Ctrl+Alt+Del to restart.?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-5-26 05:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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