无忧启动论坛

标题: 关于wee的两点疑问 [打印本页]

作者: liuzhaoyzz    时间: 2012-6-8 13:25
标题: 关于wee的两点疑问
本帖最后由 liuzhaoyzz 于 2013-7-16 18:02 编辑

关于wee的两点疑问
1、关于wee的菜单问题
wee的菜单原来的菜单703字节http://bbs.znpc.net/forum.php?mo ... amp;page=1#pid47904
不点在帖子http://bbs.znpc.net/forum.php?mo ... amp;page=2#pid47937中提到:
把 fat_mount 函数改用 assembly 实现,节约了 200 个字节。整个菜单空间已有 1K 了。
我在虚拟机vm中测试,无论是用bootice或者是weesetup2012-02-18版本写入mbr,ghost备份之后恢复回去,下次启动wee,wee的菜单就不能正常加载,有几个网友也印证了这个问题。chenall曾经说可能是自定义菜单过长的问题,但是我试过了用默认菜单也会出现类似的问题。我尽可能地减少菜单字节数,感觉只有300左右的字节才会正常。
估计解决办法一方面想办法进一步精简wee,腾出多点的空间存放菜单,还有可能weesetup或者bootice安装程序需要改进。
ghost会导致wee不能正常加载菜单这个问题还是值得关注的,因为大家用ghost情况挺多,恳请不点,chenall,yaya,pauly等高手给出好的解决办法。
wee的版本:http://code.google.com/p/grubutils/downloads/list下载的 weesetup-2012-02-18中内置的wee。
还有wee-2011-06-27一样。
bootice版本:0.9版2012-05-20,内置weesetup-2012-02-18,换了wee-2011-06-27一样。

2、关于wee的find命令
find语句是不是默认有了--set-root 的设置,如果把grldr放在C盘根目录,find grldr grldr就可以启动grub4dos,不要--set-root参数也行,但是直接一句grldr启动不了grub4dos。

[ 本帖最后由 liuzhaoyzz 于 2012-6-9 16:01 编辑 ]
作者: 不点    时间: 2012-6-8 16:37
先回答第二个问题。find 默认时,并未 --set-root。是由于 find 具有 “ 找到并执行 ” 的功能,才导致 grldr 立即执行。

正是由于 grldr 执行时永不返回,“ 肉包子打狗,一去不复返了 ”,所以才使得 find 正常启动了 grldr。

如果 grldr 能够返回,你可能就会发现,当前的 root 并未正确设置。


再回答第一个问题。我觉得这个问题无法解决。原因可能是 Ghost 破坏 63 扇区尾部的若干区域造成的。

大家应该很容易确定究竟是不是这样的。
作者: xianglang    时间: 2012-6-8 22:15
用 find /grldr /grldr 时,可以找到并启动GRLDR;但是下面这样,却不能启动GRLDR,而是返回菜单(如果加上了 --set-root 参数则正常执行GRLDR):
find /grldr
/grldr
作者: 不点    时间: 2012-6-8 22:36
标题: 回复 #3 xianglang 的帖子
那当然了。

find /grldr 并未把 grldr 所在的分区设为 root,所以,接下来的 /grldr 命令就可能是失败的,即,当前分区之下可能没有 grldr 文件。

find /grdlr /grldr 就不同了,它是按照一定的条件来找 grldr 文件。这个条件就是尾部的 /grldr。这个条件一旦执行,永不返回。所以,一旦发现 grldr,它也就立即启动了。
作者: liuzhaoyzz    时间: 2012-6-9 15:48
我仔细对比了下ghost之前和之后的第61、62扇区,发现了差别。wee菜单放在61扇区后部和62扇区,如果超过了62扇区,bootice或者weesetup写入mbr的时候会截掉超过62扇区的部分,确保第63扇区磁盘数据不被损坏,wee的菜单在ghost之前没有问题,ghost之后,62扇区前面被ghost改变了,出现了乱码,后面的部分也不能正常显示了,从bootice扇区截图可以很清晰地看到。
这样是不是就可以认为要想正常地加载wee菜单,要么把wee精简到0到61扇区共62扇区,要么把wee的菜单放在61扇区后面和62扇区的后面?
希望引起更多人关注并想办法解决ghost的问题,能否把wee代码进一步压缩、精简,确保在62扇区内实现?又或者能否编译出去掉某个功能的wee进行下测试?
用来测试的wee菜单如下:
find --set-root /boot/grub/grldr /boot/grub/grldr
timeout 1
default 0

title 0. Windows-untive menu
find --set-root /ntldr
find --set-root /bootmgr
map () (hd0)
map --hook
map (hd0) ()
map --unhook
map --hook
find --set-root /ntldr /ntldr
find --set-root /bootmgr /bootmgr

title 1. Windows
find --set-root --active command +1
find --set-root /bootmgr /bootmgr
find --set-root /ntldr /ntldr

title 2. Grub4dos
find --set-root /grldr /grldr
find --set-root /boot/grub/grldr /boot/grub/grldr
find --set-root /boot/grub.exe /boot/grub.exe
find --set-root /boot/grldr /boot/grldr
find --set-root /grub.exe /grub.exe

title 3. Plop Boot Manager
find --set-root /boot/grub/plpbt.bin /boot/grub/plpbt.bin

title 4. Vboot
find --set-root /vbootldr /vbootldr

title 5. Burg
find --set-root /buldr /buldr

[ 本帖最后由 liuzhaoyzz 于 2012-6-9 16:03 编辑 ]

ghost之前61.png (18.79 KB, 下载次数: 55)

ghost之前61.png

ghost之前62.png (24.67 KB, 下载次数: 47)

ghost之前62.png

第63扇区.png (23.72 KB, 下载次数: 59)

第63扇区.png

ghost之后61.png (21.53 KB, 下载次数: 54)

ghost之后61.png

ghost之后62.png (23.75 KB, 下载次数: 60)

ghost之后62.png

作者: liuzhaoyzz    时间: 2012-6-9 15:58
目前wee的菜单只有第61扇区后面的259字节是安全的,后面的部分可能因为ghost会被破坏。
作者: 不点    时间: 2012-6-9 18:53
标题: 回复 #6 liuzhaoyzz 的帖子
liuzhaoyzz 辛苦了,谢谢。你的发现很重要。我代表大家谢谢你。(这就有点 “ 厚颜无耻 ” 了,从哲学上讲,我只能代表我自己,不能代表大家。)

幸亏 wee 的代码未被破坏,否则,wee 就要死机了。

我觉得 “ 上上 ” 之策是通知 ghost 的开发者,让它修正 bug,不要破坏最后一个扇区。

其次,看看高手们能否破解 ghost,让它不再破坏最后一个扇区。

如果这两条路都走不通,那么可以考虑修改 wee。不过,究竟如何修改,还要经过充分酝酿、讨论,选择最佳策略。
作者: liuzhaoyzz    时间: 2012-6-9 19:09
个人猜测ghost写入的东西可能是标志什么的,肯定是有意写的对他来说有用的东西,应该不是bug。让他们修改ghost似乎遥遥无期。修改wee似乎容易点,不点精力有限,别人做一部分工作吧。对于精简代码,把c改成asm,asm的难度,以及不点对于wee的熟悉程度,似乎你又是不二人选。
作者: 不点    时间: 2012-6-9 21:24
把 C 改成汇编,哪有那么容易的事?

已经做了的工作是,把 FAT 的代码改成了汇编。那是因为 FAT 容易理解。而 EXT2 就不容易了。NTFS 更难。

我寄希望于 yaya 或者某个熟悉汇编的人来做这个工作。


另外,由于我最近一直在研究哲学,倒是觉得可以把 ext2 的支持去除。

至少我们可以编译两个版本:一个是含有 ext2 支持的,一个是不含 ext2 支持的。

以 Windows 为主的用户,通常需要 GHOST,这样,他就可以选择不支持 ext2 的版本。

以 Linux 为主的用户,他通常不使用 GHOST,这样,他就可以选择支持 ext2 的版本。

ext2 估计占用一两个 K 的代码。这样,去除 ext2 之后,可以节约好几个扇区。
作者: liuzhaoyzz    时间: 2012-6-10 08:36
那这样子就可以解决问题了,太好了!期待测试版。
作者: 不点    时间: 2012-6-10 09:10
标题: 编译了一个不带 ext2 的。
附件中的 Wee 不支持 ext2,只占用 58 个扇区。(这证明 ext2 占用了 4  个或 5 个扇区)

这下子足够小了吧?

wee-no-ext2.zip

398.92 KB, 下载次数: 133, 下载积分: 无忧币 -2

无 ext2 支持的 Wee 版本


作者: liuzhaoyzz    时间: 2012-6-10 12:50
虚拟机测试,从56扇区后面到61扇区结束扇区全部写入wee菜单,bootice加载菜单无乱码,启动时wee加载菜单无乱码,菜单加载毫无压力。太好了,不点出手太快了!这样子的话,bootice可以做相应修改,增加个选项
①使用2012-02-18版带ext2支持的wee63.mbr。
②使用2012-06-10版不带ext2支持的wee63.mbr。
③使用自定义的wee63.mbr。
或者不增加直接用第三项用户手工选择也行。就是说bootice或者weesetup都不用做任何修改。
太好了,问题完美解决,谢谢不点!
作者: liuzhaoyzz    时间: 2012-6-10 13:18
本帖最后由 liuzhaoyzz 于 2013-7-16 18:08 编辑

回头看了看,从2010-1-14不点开贴讨论wee的前身微型grub至今已经两年多时间了,
http://bbs.znpc.net/forum.php?mod=viewthread&tid=5838
这个问题可能一直存在,如果用户不知道有这个问题存在,可能会带来不方便。
许多人可能都是从一键ghost,矮人dos等这样的增强版ghost软件了解grub4dos,grub4dos的精简版wee,却与ghost起了冲突,这无论如何让人无法接受。可能大家(包括普通用户)都知道精简wee代码很困难,碰到这个棘手的难题,不点却又从另外一个方面给用户一个更加精简的wee解决了这个问题。
原本看来很难的问题,最后解决得却是这么地容易,解铃还须系铃人啊,呵呵。

[ 本帖最后由 liuzhaoyzz 于 2013-1-4 07:49 编辑 ]
作者: 不点    时间: 2012-6-10 16:40
有时候,“ 解决问题 ” 一点都不难。难的其实是 “ 定位问题 ”,即,确定问题的根源在哪里。

当证实和确定根源之后,解决的办法就有许许多多了(这又是哲学)。

以前早有人报告类似的问题,但没有人肯下功夫去定位它。大多数人都有懒惰心理。

Linux 发行版的开发者企图指望用户都去搞开发,殊不知,绝大多数用户都是懒惰的。这也是 Linux 无法普及的重要原因之一。

当有人不 “ 懒惰 ” 的时候,那就前进了一步。
作者: 快雪时晴    时间: 2012-6-10 22:41
wee还是得有个官网啊,nufans早停了
http://code.google.com/p/grubutils/downloads/list
也没有更新
感觉金子都淹没在海洋般的帖子里
作者: 20120301    时间: 2012-6-11 11:20
我早已改用imagew备份/恢复,没有发现问题

[ 本帖最后由 20120301 于 2012-6-11 11:42 编辑 ]




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