无忧启动论坛

标题: .......................... [打印本页]

作者: 527104427    时间: 2014-7-30 10:22
标题: ..........................
本帖最后由 527104427 于 2016-8-15 21:27 编辑


http://blog.sina.com.cn/a527104427

http://bbs.wuyou.net/forum.php?m ... d=379244&extra=
作者: 不点    时间: 2014-7-30 11:19
你好像没说清楚。

ud 内,是如何加载这个 ISO 的?

估计是加载的命令有瑕疵,或者方法、步骤有错误,或有漏洞。


作者: 527104427    时间: 2014-7-30 11:26
不点 发表于 2014-7-30 11:19
你好像没说清楚。

ud 内,是如何加载这个 ISO 的?

1#,纠正了一下
作者: 不点    时间: 2014-7-30 12:07
找到一个 bug。试试看,问题是否解决?

如果解决了,就可以作为正常版本使用。

grub4dos-0.4.5c-2014-07-30.7z

253.95 KB, 下载次数: 56

试试看,如果解决了,可以正式采纳


作者: 527104427    时间: 2014-7-30 12:21
不点 发表于 2014-7-30 12:07
找到一个 bug。试试看,问题是否解决?

如果解决了,就可以作为正常版本使用。

OK了,能否发源码上来?
作者: PE168    时间: 2014-7-30 12:39
本帖最后由 PE168 于 2014-7-30 12:47 编辑

原来如此,之前下5大iso版的siso文件,用run引导总提示找不到menu.lst文件,还以为5大制作该iso文件有问题呢。

作者: 2011yaya2007777    时间: 2014-7-30 13:10
从1#下载"QEMU虚拟机测试工具",把 new.fba 中的 grldr 以及 new.fba->test.iso 中的 grldr 换成 0.4.6a,测试结果如 2013-04-01.png,根是 cd 。
不理解的是:为何命令行上部的版本是 0.4.5c 2013-04-01 ?
新的 grldr 没有内置菜单:
echo "%@root%"
pause 1
find --set-root /boot/menu.lst
echo "%@root%"
pause 2
他是从何处加载的?
作者: 不点    时间: 2014-7-30 13:13
源码有啊,压缩包里面那个后缀为 diff 的文件,就是补丁。下载 chenall 的最新源码,打上这个 diff 补丁就可以自己编译了。


作者: 527104427    时间: 2014-7-30 13:15
2011yaya2007777 发表于 2014-7-30 13:10
从1#下载"QEMU虚拟机测试工具",把 new.fba 中的 grldr 以及 new.fba->test.iso 中的 grldr 换成 0.4.6a, ...

FBA里面的ISO是用grldr引导的

你要先将菜单内置到grldr,再导出ISO,再将新的grldr作为ISO引导,再将ISO导入FBA



作者: 2011yaya2007777    时间: 2014-7-30 14:54
原来是这样啊:
更改 test.iso 中的 grldr 没有用,需要更改 test.iso 引导文件 grldr (不是 4 扇区,是整个文件)。已经修改内置菜单。
更改为 0.4.6a 一切正常,根是 cd .
作者: 不点    时间: 2014-7-30 15:19
本帖最后由 不点 于 2014-7-30 15:22 编辑

@yaya

版本 0.4.6 不出现这个 bug,那可不是个好事。我发现 0.4.6 的 common.c 缺少如下的代码片段:


  1.     force_pxe_as_boot_device = 0;
  2.     /* if booted by fbinst, we can skip tons of checks ... */
  3.     if (fb_status)
  4.     {
  5.         boot_drive = FB_DRIVE;
  6.         install_partition = 0xFFFFFF;
  7.         goto set_root;
  8.     }
复制代码


正是这个代码片段带来的问题。0.4.6 没打相应的补丁,所以没有表现出问题。然而,这个补丁必须打上,不打是不行的。
我不知道为什么没打上,也许是 chenall 的疏忽,也许是你搞错了。

请找到相关的补丁(或者通过比较 0.4.5 和 0.4.6 来发现不同之处),然后打上。打完之后,再打上今天的补丁,就 OK 了。


作者: 不点    时间: 2014-7-31 09:51
记录一下本次补丁更改了啥内容。

1、解决了 reboot.pro 报告的分区 ID 为 00 的分区不可被识别出来、无法访问的问题。用英文可以简单记录为 Enabled partition ID of 00.

2、解决了 chainloader --raw 不能加载硬盘 BPB hidden sectors=0 的引导扇区的问题。也是英文论坛报告的。用英文可以记录为 Enabled "chainloader --raw" to load harddrive PBR with BPB hidden_sectors=0.

3、清除 ud 启动后残留信息使后续启动不再被重复识别为 ud 启动(因为后续启动本来就不再是从 ud 启动)。英文记录为 Destroyed the FBBF signature(in memory) for subsequent non-FBINST boot.

接下来还可能再对 makeactive 命令进行修复或改进,这是英文论坛上正在讨论的问题。


作者: 不点    时间: 2014-7-31 10:42
再解释一下为何从 fbinst 启动后,要设定启动设备为 ud 区而不是可见区或者其他分区。那是出于安全第一的考虑。我们之所以要用 fbinst,正是想利用 fbinst 的启动成功率,保证启动成功是第一要务。所以,任何有助于保证启动成功的手段,都应该采纳。ud 区位于磁盘的最开头,相比于其他分区,它更易于保证访问的成功,尤其是在 buggy BIOS 的情形。ud 区本身就已经占用至少 8M 的空间了,所以,可见区有可能无法访问,甚至在访问可见区时产生死机,这都是不奇怪的。所以,启动时尽量不碰可见区,是一个防止发生死机的思路。至少 grub4dos 的内核不至于死掉,否则,用户根本就没有机会看到菜单。如果用户在后续的菜单中访问可见区发生死机,那样的话,用户是可以报告 bug 的,甚至也能猜出是什么原因,方便精确定位出问题的地方,这样,无论是用户还是开发者,都不至于太痛苦,不至于满头雾水,不至于一筹莫展。

从 fbinst 启动后,越过 PXE 启动检查,越过 CDROM 启动检查,越过 DOS 启动设备的检查,这也是出于安全性的考虑,那就是尽量减少发生死机的环节,当然这同时也有助于防止恶意主板 BIOS 的攻击。

从 fbinst 启动后,为何立即抹掉 FBBF 标志?那是因为,这个标志会误导后续的 grldr(即,当 chainloader 加载某个启动扇区之后又碰上下一个阶段的 grldr),使后续的 GRLDR 也认为是从 fbinst 启动,从而错误地认定 ud 为启动设备,而无法正确设定真实的启动设备。

FBBF 标志本来就位于 0000:2000 附近的内存空间,这本来就有可能被 grub4dos 的堆栈内容覆盖掉(栈顶位于0000:7000,向下扩展)。也就是说, GRUB4DOS 的内核启动后,FBBF 标志也就用不上了,它有可能在某些主板 BIOS 的情况下被堆栈毁掉。也就是说,它处于堆栈空间覆盖范围,它的值不可靠,本身已经失去其意义了。所以,它的值也不会再被使用了。


作者: 2011yaya2007777    时间: 2014-7-31 11:28
本帖最后由 2011yaya2007777 于 2014-8-1 14:50 编辑

0.4.6a 已经按照不点的指示打了补丁。
另外,default_func 似乎有一段代码应当由 0.4.5c 移植过来,位于
if (grub_memcmp (arg, "saved", 5) == 0)
     {
之后;
还有 geometry_func 也似乎有一段代码应当由 0.4.5c 移植过来,位于
   /* Check for the geometry.  */
   if (get_diskinfo (current_drive, &tmp_geom))
之前。
请不点看一看,是否应当打上。
作者: 不点    时间: 2014-7-31 17:36
本帖最后由 不点 于 2014-7-31 17:37 编辑

没错,都应该打上。但是,需要注意,default_func 里面增加的这段代码,是从 stage2.c 的 cmain() 挪动过来的。也就是说,cmain 里面的相应代码应该去掉。你可查看 cmain 里面是否有类似的代码。通过比较 0.4.5 和 0.4.6 的 cmain 函数的不同,就可以发现是否有重复的、用来处理 default 文件的代码,如果有,就需要删除掉,让 0.4.6 与 0.4.5 保持一致。


作者: 2011yaya2007777    时间: 2014-8-1 10:27
stage2.c 中好几处不一样!现在 0.4.6 与 0.4.5 在  stage2.c 都保持一致了。
我准备提交了。
作者: 不点    时间: 2014-8-1 11:53
本帖最后由 不点 于 2014-8-1 11:57 编辑

geometry 的改动,也不是单独的,好像与 bios.c 是同时改动的。你再看看 bios.c 是不是也有差别?

补充:

也涉及 asm.S,你留意一下。


作者: 2011yaya2007777    时间: 2014-8-1 13:00
本帖最后由 2011yaya2007777 于 2014-8-1 15:17 编辑

执行 git push 推送到服务器上了,但是在 https://github.com/yaya2007/grub4dos 没有看到 "compare & pull request"按钮,只有 “pull request"按钮。没有办法输入一些信息,点击"Create pull request"按钮,提交信息。

https://github.com/yaya2007/grub4dos 已经看到内容更新了。

以后再遇到这种情况,我如何用另一种方法通知 chenall 提交信息?
作者: 135956    时间: 2014-8-1 14:25
2011yaya2007777 发表于 2014-8-1 13:00
执行 git push 推送到服务器上了,但是在 https://github.com/yaya2007/grub4dos 没有看到 "compare & pull ...

有没有编译好的?
作者: chenall    时间: 2014-8-1 17:11
本帖最后由 chenall 于 2014-8-1 17:21 编辑
2011yaya2007777 发表于 2014-8-1 13:00
执行 git push 推送到服务器上了,但是在 https://github.com/yaya2007/grub4dos 没有看到 "compare & pull ...


首先切换到0.4.6分支,然后再点  Pull Request  看下图位置。

下图两个位置都可以。



进入之后就会看到一个大的Create Pull Request按钮,图2.



然后就可以了。





我已经自己同步更新了。0.4.5源码还没有更新,因为现在的电脑上git等工具,yaya有空可以更新试下。
作者: 不点    时间: 2014-8-1 18:20
对 makeactive 命令作了少量的修复。不用记录这个改动。更大的改动在讨论中未达成一致意见,所以作废。所以,只保留小 bug 的修复部分,不再进行功能增强。

chenall 可以提交了。

grub4dos-0.4.5c-2014-08-01.7z

254.38 KB, 下载次数: 24

可以提交


作者: 2011yaya2007777    时间: 2014-8-1 21:14
想切换到 0.4.5c ,执行 git checkout master
显示 error: pathspec 'master' did not match any file(s) known to git.

哦,使用 git checkout origin/master -b master 已经切换到 0.4.5c 版本!

作者: 2011yaya2007777    时间: 2014-8-1 22:37
0.4.5c 及 0.4.6a 补丁已经打上。推送到服务器上了。
就是没有 20# 图2 的绿Create Pull Request按钮,没有后面的文字,没有问号,没有那个长方形外框。上次折腾了一气,不知怎样碰巧出现了一次!
作者: S恒心    时间: 2014-8-18 15:05
求大神出品优盘启动制作视频全过程(视频)
作者: 7782    时间: 2014-9-23 23:34
winxp,win7 x64 硬盘启动 win8pe.iso 启动成功

title windows8 PE  
find --set-root /PE/winvblock.img
map --mem /PE/winvblock.img (fd0)
find --set-root /PE/Win8PE.iso
map --mem /PE/Win8PE.iso (hd32)
map --hook
chainloader (hd32)




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3