无忧启动论坛

标题: menu.wee 的一点微调,chenall 留意一下 [打印本页]

作者: 不点    时间: 2015-7-22 21:58
标题: menu.wee 的一点微调,chenall 留意一下
本帖最后由 不点 于 2015-7-22 21:59 编辑

背景:我用 diskgen 调整 C 盘分区大小之后,C 盘 PBR 代码(是微软的代码)失效。如果是 GRLDR 的代码,则不会失效。但微软的代码就可能失效了。用失效的代码启动,则必定是死机。我已经遇到好几次死机了。修复的办法是用 BootICE 重新建立 PBR(修复后可以正常启动)。

目前的 menu.wee 的默认启动项目如下:
  1. title 1. Windows
  2. find --set-root --active
  3. +1
  4. find --set-root /bootmgr
  5. /bootmgr
  6. find --set-root /ntldr
  7. /ntldr
复制代码


它首先查找活动分区,只要发现了活动分区,就加载并启动活动分区的 PBR。

另外,上述代码在 find 活动分区失败时,也要执行一个扇区,这个扇区就是 MBR。这样就成无限循环了:反复执行 MBR,反复找不到活动分区。这应该也是一个 bug。

确实有可能存在没有活动分区的情况。在纯粹 Linux 环境下(当用户没有安装微软的操作系统时),这就有可能不存在活动分区了。




言归正传。当存在活动分区,并且活动分区的 PBR 导致死机时,执行 +1 就是执行这个 PBR,此时必然死机。

可以改进一下,仅当活动分区中存在 bootmgr 或 ntldr 时,才启动它。

改进后的代码如下(未经测试),供 chenall 研究。改进的要点是,避免执行“+1”这个容易引起失败的引导扇区代码。

  1. title 1. Windows
  2. find --set-root --active /bootmgr
  3. /bootmgr
  4. find --set-root --active /ntldr
  5. /ntldr
  6. find --set-root /bootmgr
  7. /bootmgr
  8. find --set-root /ntldr
  9. /ntldr
复制代码


下面这个是不是更好?请 chenall 确认一下:

  1. title 1. DOS/Windows
  2. find --set-root --active /bootmgr /bootmgr
  3. find --set-root --active /ntldr /ntldr
  4. find --set-root --active /io.sys /io.sys
  5. find --set-root /bootmgr /bootmgr
  6. find --set-root /ntldr /ntldr
  7. find --set-root /io.sys /io.sys
复制代码


另外,再增加一个进入 command line 的菜单项:

  1. title 6. Command Line
  2. exit
复制代码


其好处是,可以提醒那些不太了解 Wee 的用户,此时可以进入命令行,来对付那些启动失败的情况。

这是“用户友好”的。其实也是个善意的广告,让用户知道此时有命令行可以进入。


作者: 邪恶海盗    时间: 2015-7-22 22:26
我在PE下用DiskGenius调整过C盘插屁大小,暂时没发现引导问题,不过不记得有没有重建过引导了...
作者: wylgogogo    时间: 2015-7-22 23:24
  了解下,不点大师指点。
作者: 不点    时间: 2015-12-12 12:28
本帖最后由 不点 于 2015-12-12 12:53 编辑

又作了少量微调,贴出完整的菜单:
  1. find --set-root /boot/grub/grldr
  2. /boot/grub/grldr
  3. timeout 1
  4. default 0

  5. title 1. DOS/Windows
  6.     find --set-root --active /bootmgr /bootmgr
  7.     find --set-root --active /ntldr /ntldr
  8.     find --set-root --active /io.sys /io.sys
  9.     find --set-root /bootmgr /bootmgr
  10.     find --set-root /ntldr /ntldr
  11.     find --set-root /io.sys /io.sys

  12. title 2. GRUB4DOS
  13.     find --set-root /BOOT/GRUB/GRLDR /BOOT/GRUB/GRLDR
  14.     find --set-root /BOOT/GRUB.EXE /BOOT/GRUB.EXE
  15.     find --set-root /BOOT/GRLDR /BOOT/GRLDR
  16.     find --set-root /grldr /grldr

  17. title 3. Plop Boot Manager
  18.     find --set-root /BOOT/GRUB/PLPBT.BIN /BOOT/GRUB/PLPBT.BIN

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

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

  23. title 6. Previous MBR
  24.     (hd0)1+1

  25. title 7. Command Line
  26.     exit
复制代码


解释一下。第一项菜单,是默认要执行的。先从活动分区查找 DOS、Windows 的启动文件。如果存在,就启动它。如果活动分区没有找到 Windows 的启动文件,那就在其他分区寻找。如果找到,也会试图启动它。如果都没找到,则属于启动失败。当 wee 的某个菜单项失败时,都是进入命令行,等待用户的进一步调试和处理。

第六项菜单,启动保存在第二扇区上的“先前的 MBR 代码”。如果这个扇区不含 55 AA 合法启动标志,那将拒绝启动,给出失败信息。失败后进入命令行等待用户干预。如果这个扇区含有 55 AA 合法启动标志,则把控制权交给这个扇区。

第七项菜单,进入命令行。当默认菜单会产生死机或其他不正常情况时,这个菜单就是有用的了。



作者: 不点    时间: 2015-12-16 11:09
今天给别人装机时,刚好证实了,上述菜单解决了 NTLDR is missing 的问题。

BOOTICE 里面的 Wee 的默认菜单,会导致 NTLDR is missing 启动失败,把菜单更改为上述菜单之后,顺利启动 Windows。

因此,建议 BOOTICE 的作者更新 Wee 的默认菜单。


作者: chenall    时间: 2015-12-16 19:45
源码已同步更新.

https://github.com/chenall/grubu ... 102dd173d76a6bed065
作者: 2013abcdefg    时间: 2015-12-16 21:08
wee最新版本在那里下了? 以前的都不能下了. 最新的可以做个release的吗?
作者: cchessbd    时间: 2015-12-17 09:33
本帖最后由 cchessbd 于 2015-12-17 09:45 编辑
不点 发表于 2015-12-12 12:28
又作了少量微调,贴出完整的菜单:


如果MBR安装的是wee,(hd0)1+1用法有没有问题?

第六项菜单,启动保存在第二扇区上的“先前的 MBR 代码”。如果这个扇区不含 55 AA 合法启动标志,那将拒绝启动,给出失败信息。失败后进入命令行等待用户干预。如果这个扇区含有 55 AA 合法启动标志,则把控制权交给这个扇区。

用winhex看了保存下来的wee.bin,明白了,不会启动这个扇区。

作者: qaz10533    时间: 2015-12-21 00:30
支持wee做的更好,让我们多一个更好的选择~
作者: cchessbd    时间: 2016-1-27 13:25
本帖最后由 cchessbd 于 2016-1-27 13:28 编辑

不点大大,第一、二行代码代码是应该合并为一行还是本来就是两行?

  1. find --set-root /boot/grub/grldr /boot/grub/grldr
  2. timeout 1
  3. default 0

  4. title 1. DOS/Windows
  5. find --set-root --active /bootmgr /bootmgr
  6. find --set-root --active /ntldr /ntldr
  7. find --set-root --active /io.sys /io.sys
  8. find --set-root /bootmgr /bootmgr
  9. find --set-root /ntldr /ntldr
  10. find --set-root /io.sys /io.sys

  11. title 2. GRUB4DOS
  12. find --set-root /BOOT/GRUB/GRLDR /BOOT/GRUB/GRLDR
  13. find --set-root /BOOT/GRUB.EXE /BOOT/GRUB.EXE
  14. find --set-root /BOOT/GRLDR /BOOT/GRLDR
  15. find --set-root /grldr /grldr

  16. title 3. Plop Boot Manager
  17. find --set-root /BOOT/GRUB/PLPBT.BIN /BOOT/GRUB/PLPBT.BIN

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

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

  22. title 6. Previous MBR
  23. (hd0)1+1

  24. title 7. Command Line
  25. exit
复制代码

作者: 不点    时间: 2016-1-27 15:41
cchessbd 发表于 2016-1-27 13:25
不点大大,第一、二行代码代码是应该合并为一行还是本来就是两行?

此处一行和两行,有细微差别,差别不是很大,应该都行吧。

各菜单项里面的文件名和路径,都应该是小写字母,而我年纪大了疏忽大意,有些就弄成了大写。最好都统一成小写。


作者: qj_tzy    时间: 2016-1-29 10:12
本帖最后由 qj_tzy 于 2016-1-29 10:20 编辑
chenall 发表于 2015-12-16 19:45
源码已同步更新.

https://github.com/chenall/grubu ... adb102dd173d76a6bed ...


请教:

1.在https://github.com/chenall/grubu ... 102dd173d76a6bed065贴出的用法中,每行前有一个+号或-号,不知是何意,想请解释下。另如何下载此新版的wee,用bootice进行安装。

2.wee在gpt分区硬盘上测试未成功的问题:

我用bootice将以下菜单写入到MBR分区硬盘的主引导记录中,保存63个扇区到wee_63.bin中;将wee_63.bin及g4d目录下的文件保存到GPT分区硬盘ESP分区中;用您发布的umbr,用umbr -d=0 (hd0,0)/g4d/grldr 写入引导;在grub4dos中,用chainloader (hd0,0)/g4d/wee_63.bin 调用之,能出现菜单,但在菜单项处按下回车键时未执行,仍显示该菜单。

请教:wee在gpt分区硬盘上如何才能引导成功。

谢谢!
  

find --set-root /g4d/pwins
timeout 10
default 0
title
title                   ** Wee Menu **
title -----------------------------------------------
title 0.Search Boot Partition Windows nt6/nt5 System
command /g4d/pwins
title 1.Boot windows 8 PE
command /g4d/gw8pe
title 3.grub4dos menu
command /g4d/grldr

作者: 不点    时间: 2016-1-29 11:49
顺便说点感想。

BOOTICE 有两个需要改进的地方:

其一,BOOTICE 里面的 wee 的菜单需要更新,否则 wee 安装后会(有很大的概率)碰上启动失败(无法启动 Windows)的情况。这个是比较紧迫的。

其二,BOOTICE 应该能够纠正 (U 盘或硬盘)分区表以及 BPB 表上的 “总扇区数” 错误。如果能够纠正的话,就大大方便了 multimbr 的安装部署了。

希望 BOOTICE 的开发者能够改进这两点,应该都不困难的。


作者: 不点    时间: 2016-1-29 12:05
qj_tzy 发表于 2016-1-29 10:12
请教:

1.在https://github.com/chenall/grubu ... 102dd173d76a6bed065贴出的用法中,每行前有一个 ...

wee 是针对 MBR 框架而开发的启动工具。它识别 MBR 格式的分区,不一定能够识别 GPT 分区。

况且也无法把 wee 安装在 GPT 格式的硬盘的引导区上,因为 GPT 不存在 63 扇区的空闲空间可以用来安装 wee。

如果想要 wee 用于 GPT,那么就需要首先改造 wee 才行,就是专门出个 for GPT 的 wee。但这究竟有多大的必要性?究竟有多高的可行性?都需要考量一番,权衡之后才能决定。


我个人觉得当务之急是在 GPT 格式的分区架构里面找到一个可以存放代码的空间,好让 UMBR 能够有较大的腾挪空间。否则的话,UMBR 只能在 512 字节中记录固定的(GRLDR)地址,不具有通用性,也就是说,没有一个通用的 UMBR.mbr 可以让 BOOT.INI 或者 BOOTMGR 来直接调用。必须嵌入固定的 GRLDR 地址才能被 BOOTMGR 调用,这是个不小的问题。我不知道 chenall 有没有意识到这个问题。


作者: chenall    时间: 2016-1-29 14:04
qj_tzy 发表于 2016-1-29 10:12
请教:

1.在https://github.com/chenall/grubu ... 102dd173d76a6bed065贴出的用法中,每行前有一个 ...

能出现菜单就是已经成功了.
不能执行有很多原因
比如文件不存在,格式错误等,具体的要看错误的提示信息是什么.

只要能成功启动WEE就是已经成功了,其它的是使用的问题.

作者: chenall    时间: 2016-1-29 14:09
不点 发表于 2016-1-29 12:05
wee 是针对 MBR 框架而开发的启动工具。它识别 MBR 格式的分区,不一定能够识别 GPT 分区。

况且也无 ...

我没有考虑那么多.

umbr主要是针对像GPT格式这样的,

当然了在MBR磁盘上代替WEE63来启动GRLDR也是可以的.功能单一但是启动速度快在某些场合很适合.

另外一点,由于只有一个扇区所以不会出现由于其它扇区的问题导致启动失败的情况.

用WEE/GRLDR.MBR等我就碰到过好几次,可能是由于某些软件的原因,没有处理好完整的MBR,所以启动失败了.

总之各有各的用途主要是应用的场合不同.
作者: qj_tzy    时间: 2016-1-29 14:43
chenall 发表于 2016-1-29 14:04
能出现菜单就是已经成功了.
不能执行有很多原因
比如文件不存在,格式错误等,具体的要看错误的提示信息 ...

谢谢指点,要执行的文件确认是存在的,此菜单在mbr分区硬盘上执行一切正常。
在GPT分区硬盘上执行时,wee菜单出现后在回车执行菜单项时无任何反应,WEE菜单仍保留在屏幕上,似很快地闪了一下。
作者: qj_tzy    时间: 2016-1-29 14:45
chenall 发表于 2016-1-29 14:09
我没有考虑那么多.

umbr主要是针对像GPT格式这样的,

谢谢指点,回复详见上楼

另外:新版的wee63.mbr在何处下载
作者: 不点    时间: 2016-1-29 14:50
wee 不支持查找 GPT 分区格式下的文件。这就可以解释上述失败现象了。不用再纠结了。


作者: chenall    时间: 2016-1-29 14:56
qj_tzy 发表于 2016-1-29 14:45
谢谢指点,回复详见上楼

另外:新版的wee63.mbr在何处下载

bootice里面的WEE63.mbr就最版的.

最新版本只是修改了内置菜单内容,需要的自己改一下菜单就行了.

可以在菜单按C进入命令行,手动输入命令看看报错的提示信息是什么(wee命令后面的数字).





作者: chenall    时间: 2016-1-29 14:57
不点 发表于 2016-1-29 14:50
wee 不支持查找 GPT 分区格式下的文件。这就可以解释上述失败现象了。不用再纠结了。

wee有支持GPT分区的吧,好像??我印像中是有支持的,刚刚在QEMU中试了下可以找到GPT分区.
作者: 不点    时间: 2016-1-29 15:15
chenall 发表于 2016-1-29 14:57
wee有支持GPT分区的吧,好像??我印像中是有支持的,刚刚在QEMU中试了下可以找到GPT分区.

wee 应该是不支持 GPT 的。

说支持的,应该是假象。

比如,你可能不是纯 GPT,而是 GPT 和 MBR 双重格式,此时 wee 用 MBR 格式来访问分区。


作者: chenall    时间: 2016-1-29 15:39
不点 发表于 2016-1-29 15:15
wee 应该是不支持 GPT 的。

说支持的,应该是假象。

这一段代码应该就是探测GPT分区的.
  1.         cmpb        $0xee, 4(%esi)
  2.         jne        100f
  3.         movl        $1,%eax
  4.         call        101f
  5.         testl        %eax, %eax
  6.         jz        9f
  7.         movl        $PART_TABLE_TMPBUF,%esi
  8.         cmpl        $0x20494645,(%esi)
  9.         jne        9f
  10.         movl        72(%esi),%eax
  11.         movl        %eax,PART_TABLE_BUF + 0xC
  12. 110:
  13.         movl        PART_TABLE_BUF + 0xC,%eax
  14.         incl        PART_TABLE_BUF + 0xC
  15.         call        101f
  16.         testl        %eax, %eax
  17.         jz        9f
  18.         movl        $PART_TABLE_TMPBUF,%esi
  19.         movl        $3,%ecx
  20. 111:
  21.         movl        32(%esi),%eax
  22.         testl        %eax,%eax
  23.         jz 9f
  24.         stosl
  25.         subl        %eax,40(%esi)
  26.         movl        40(%esi),%eax
  27.         stosl
  28.         xorb        %al,%al
  29.         stosb
  30.         movb        $0xee,%al
  31.         stosb
  32.         incb        -4(%ebp)
  33.         movl        -4(%ebp), %eax
  34.         stosw
  35.         xorl        %eax,%eax
  36.         stosl
  37.         addl        $0x80,%esi
  38.         loop 111b
  39.         jmp 110b
复制代码

作者: 不点    时间: 2016-1-29 16:06
本帖最后由 不点 于 2016-1-29 16:22 编辑
chenall 发表于 2016-1-29 15:39
这一段代码应该就是探测GPT分区的.


看来是你增强了 wee,让它支持 GPT,我确实不曾注意到。

我原来的 asm 代码里面,从来没有支持 GPT 的。

如果支持的话,又怎会找不到文件呢?难道 find 命令有 bug?

------------

更新:明白了,也许是碰到 BIOS 的访问能力极限了,因此找不到文件。

也有可能像 chenall 提到的那样,文件格式是不可执行的格式,因此无法启动。


作者: chenall    时间: 2016-1-29 16:24
不点 发表于 2016-1-29 16:06
看来是你增强了 wee,让它支持 GPT,我确实不曾注意到。

我原来的 asm 代码里面,从来没有支持 GPT  ...

所有我让它报告一下错误代码是什么.
作者: qj_tzy    时间: 2016-1-29 16:28
chenall 发表于 2016-1-29 14:56
bootice里面的WEE63.mbr就最版的.

最新版本只是修改了内置菜单内容,需要的自己改一下菜单就行了.

按C进入命令行后
执行find --set-root /g4d/grldr,出现wee 15 >
执行/g4d/grldr,出现wee 17 >
作者: 不点    时间: 2016-1-29 16:29
chenall 发表于 2016-1-29 16:24
所有我让它报告一下错误代码是什么.

是的,进入命令行测试很重要。

用户应该明白 128G 之后的扇区都有可能无法访问。这应该是个基本知识了,印在脑子里。即使不碰到失败,也应该牢记这一点。更不用说,碰到了失败之后,还不能意识到这一点,那就该打 PP 了。(开个玩笑)。
作者: 不点    时间: 2016-1-29 17:18
本帖最后由 不点 于 2016-1-29 17:42 编辑
qj_tzy 发表于 2016-1-29 16:28
按C进入命令行后
执行find --set-root /g4d/grldr,出现wee 15 >
执行/g4d/grldr,出现wee 17 >

15 号错误是 ERR_FILE_NOT_FOUND,即找不到文件
17 号错误是 ERR_FSYS_MOUNT,即 文件系统挂载出错,无法挂载文件系统。

这需要你自己确定是什么原因了。

你可以在 wee 命令行下用 tab 键来自动补全,看看究竟是什么情况。

你也可以执行 root 命令,看看当前设备是什么。比如,究竟是 (hd0),还是 (hd0,0)?

如果 root 是 (hd0) 或 (hd0,-1),那么,这就代表整个磁盘(含分区表的整个磁盘),而不是代表某个分区(例如 (hd0,0)),因此,你无法挂上文件系统。

你可以试着执行 root (hd0,0) 之类的命令,然后再尝试挂载文件系统。



总之,出错之后,要在命令行调试和观察,了解更多信息,这样才容易判断其根源。


补充:

能否报告一下你的分区布局?各个分区的大小?有可能你要访问的分区已经超出 BIOS 的访问能力了。


作者: 不点    时间: 2016-1-29 18:04
本帖最后由 不点 于 2016-1-29 18:09 编辑

我再解释一下如下菜单的执行细节:

find --set-root /g4d/pwins

如果由于某种原因,find 命令失败,则此时 root 分区仍旧是 (hd0) 或 等价的 (hd0,-1),也等价于 (hd0,255),它们都代表 “全盘”,而不是某个分区的 Volume 卷。

wee 上的 find 命令也有可能在 GPT 上出现 bug。

wee 的用户毕竟没有 grub4dos 用户多,因此,其 find 命令出现 bug 的几率要比 grub4dos 的大。

timeout 10
default 0
title
title                   ** Wee Menu **
title -----------------------------------------------
title 0.Search Boot Partition Windows nt6/nt5 System
command /g4d/pwins

这条命令是执行当前 root 分区下的文件 pwins。但如果当前分区是 “全盘” (hd0),则显然无法找到文件,因为文件可能是在 (hd0,0) 里面。

出错后,会继续显示菜单。下同。

title 1.Boot windows 8 PE
command /g4d/gw8pe
title 3.grub4dos menu
command /g4d/grldr
作者: qj_tzy    时间: 2016-1-29 19:02
不点 发表于 2016-1-29 18:04
我再解释一下如下菜单的执行细节:

find --set-root /g4d/pwins


非常谢谢您的祥细指点!

我的硬盘为500G,为GPT分区结构,分为ESP分区、NTFS(win7)分区、NTFS(winxp)、NTFS(数据分区1)、NTFS(数据分区2)。g4d的文件全部存放在esp分区中。

等会空了,再按您说的方法看看,到时再报告。
作者: qj_tzy    时间: 2016-1-29 20:11
不点 发表于 2016-1-29 18:04
我再解释一下如下菜单的执行细节:

find --set-root /g4d/pwins

刚才,进入wee命令行进行了测试:
用root (hd0,0)命令,出现unknown的提示,该分区是esp分区,看来要对wee修正后才能较好地支持gpt分区硬盘。
作者: 不点    时间: 2016-1-29 21:20
qj_tzy 发表于 2016-1-29 20:11
刚才,进入wee命令行进行了测试:
用root (hd0,0)命令,出现unknown的提示,该分区是esp分区,看来要对w ...

你调试得很好。你确定 root 命令显示的分区是 esp 分区吗?它的起始扇区号和分区总扇区数都显示得正确吗?

如果都正确,那就说明是 wee 的 bug,即,wee 无法识别这个分区的文件系统。那就只好让 chenall 来修复 bug 了。

如果显示的分区起始扇区号和分区长度不正确,那说明 (hd0,0) 不一定是 ESP 分区,你可以再试试 (hd0,1) 、(hd0,2) 等等。


作者: qj_tzy    时间: 2016-1-29 22:39
本帖最后由 qj_tzy 于 2016-1-29 23:07 编辑
不点 发表于 2016-1-29 21:20
你调试得很好。你确定 root 命令显示的分区是 esp 分区吗?它的起始扇区号和分区总扇区数都显示得正确吗 ...


1.确定显示的分区是ESP分区,用bootice显示的起始扇区号和分区总扇区数(用winhex显示的两分区的起始位置相减与此扇数总数相等 )应该是正确的,因总扇区数*512/1024/1024/1024,与显示的分区容量相同。

2.我把g4d移动到(hd0,1)分区测试:root (hd0,1)无错误提示,但运行/g4d/grldr,出现wee 17 >

作者: 不点    时间: 2016-1-29 22:58
qj_tzy 发表于 2016-1-29 22:39
1.确定显示的分区是ESP分区,用bootice显示的起始扇区号和分区总扇区数(用winhex显示的两分区的起始位 ...

帮不上你。等着 chenall 处理吧。


作者: qj_tzy    时间: 2016-1-29 23:08
本帖最后由 qj_tzy 于 2016-1-29 23:10 编辑
不点 发表于 2016-1-29 22:58
帮不上你。等着 chenall 处理吧。


您的回复,让我明白了一些东西,非常感谢!

同时,也非常希望 chenall 能出手解决这一问题。

作者: chenall    时间: 2016-1-30 13:37
不点 发表于 2016-1-29 22:58
帮不上你。等着 chenall 处理吧。

我试了一下,测试是双硬盘其中一个是GPT分区,一个是MBR的

启动WEE63直接进入按C键进入命令行

测试访问GPT分区正常,再执行find命令

再次访问GPT磁盘出现异常了,被识别为MBR分区了.

我看了代码没有找到原因,通过HEXDUMP查看0x3e8000可以看到分区表不对.
看0x3e9000是0扇区的内容(正常情况下应该是GPT的分区表内容).

也不知是哪里错了,

如果是单单一个GPT硬盘没发现问题..



作者: 不点    时间: 2016-1-30 14:13
chenall 发表于 2016-1-30 13:37
我试了一下,测试是双硬盘其中一个是GPT分区,一个是MBR的

启动WEE63直接进入按C键进入命令行

有没有试试,不执行 find 命令,是否一切正常?

试试手动执行 root 命令切换到 hd1,然后再用 root 命令切换回到 hd0,这样 gpt 是否也会乱掉了?

测试的目的,暴露问题,缩小范围。


作者: chenall    时间: 2016-1-30 14:33
不点 发表于 2016-1-30 14:13
有没有试试,不执行 find 命令,是否一切正常?

试试手动执行 root 命令切换到 hd1,然后再用 root 命 ...


就是只要root hd1 再root hd0切换一下就不行了.
作者: 不点    时间: 2016-1-30 16:31
chenall 发表于 2016-1-30 14:33
就是只要root hd1 再root hd0切换一下就不行了.
  1.         cmpl        $0xff, ABS(EXT_C(current_slice))
  2.         je        100f
  3.         movl        $0xFF, ABS(EXT_C(current_slice))
  4.         cmpb        $0xee, 4(%esi)
  5.         jne        100f
复制代码

看了 list partitions 函数的代码,但无法准确地确定哪些是你改动的。

仅凭直觉,以及纯代码方面的逻辑关系,感觉上述代码可能有问题。

当 current slice 被设定为 0xff 即 -1 后,第一个 cmp 的结果将总是: 相等,

于是总是跳转到 100 标号的 mbr 老代码去执行,不再执行 gpt 代码。

我不确定我是否看准了。只是模模糊糊的,仅供参考。


作者: chenall    时间: 2016-1-30 16:52
本帖最后由 chenall 于 2016-1-31 12:24 编辑

把这一行注释掉目前看起来正常..

这些代码是我加的吗?太久了没什么印像了,没有注释现在也想不起来为什么当时要这一行了.

EDIT: 另外看了前后的代码,感觉以下好像是多余的??


  1.         cmpl        $0xff, ABS(EXT_C(current_slice))
  2.         je        100f
  3.         movl        $0xFF, ABS(EXT_C(current_slice))
复制代码

作者: 不点    时间: 2016-1-30 17:17
chenall 发表于 2016-1-30 16:52
把这一行注释掉目前看起来正常..

这些代码是我加的吗?太久了没什么印像了,没有注释现在也想不起来为什么 ...

关键是得把原来的代码找回来,才能比较。否则的话,那就只有摸着石头过河了。

我反正好长时间没有接触了,对此已经没有印象。

一切都得靠你自己调试了。


作者: chenall    时间: 2016-1-31 10:09
看了相关的代码发现这些是没有用处的,直接注释掉了

新的版本上传在这里
https://github.com/chenall/grubutils/releases/tag/2016-01-31
作者: 不点    时间: 2016-1-31 10:43
chenall 发表于 2016-1-31 10:09
看了相关的代码发现这些是没有用处的,直接注释掉了

新的版本上传在这里

preset_menu_used 中的一些文件名和路径,是大写字母,是我的疏忽,应该统一采用小写字母。

这个菜单本来只考虑了 mbr 的情况,不知道是否适用于 gpt 的情况,你可以仔细研究,加以改进完善。


weesetup 里面的 menu.wee 依旧是几年前的版本,需要更新。


作者: qj_tzy    时间: 2016-1-31 11:43
chenall 发表于 2016-1-31 10:09
看了相关的代码发现这些是没有用处的,直接注释掉了

新的版本上传在这里

下载不了,能否上传一份到其他地方,谢谢!
作者: chenall    时间: 2016-1-31 12:23
附件传到这里

wee63.zip

19.52 KB, 下载次数: 37


作者: qj_tzy    时间: 2016-1-31 12:48
下载测试gpt分区单硬盘,启动正常。谢谢!

晚上回家再测试一下gpt+mbr双硬盘启动情况。

作者: qj_tzy    时间: 2016-1-31 20:15
chenall 发表于 2016-1-31 12:23
附件传到这里

gpt+mbr双硬盘启动该wee的情况,测试正常。
作者: freesoft00    时间: 2016-2-2 10:12
wee有启动扇区备份文件的功能没有。比如磁盘的1扇区备份出来,wee启动它。
作者: 不点    时间: 2016-2-2 11:04
freesoft00 发表于 2016-2-2 10:12
wee有启动扇区备份文件的功能没有。比如磁盘的1扇区备份出来,wee启动它。

启动一个标准的 55 AA 引导扇区,是基本功能,当然不能没有。

grldr、ntldr、bootmgr、io.sys、vmlinuz 等等很多复杂格式都能在 wee 下识别,更不用说单扇区的简单格式了。

看看里面的 readme,就了解大致用法了。
作者: freesoft00    时间: 2016-2-2 15:21
不点 发表于 2016-2-2 11:04
启动一个标准的 55 AA 引导扇区,是基本功能,当然不能没有。

grldr、ntldr、bootmgr、io.sys、vmlinu ...

好的,谢谢!
主要是用wee少,有时候用一下grub,看到不点说在硬盘上用wee更好,所以想以后如果在硬盘上用转到wee算了,想尝试一下。
另外,
title 4. Vboot
find --set-root /vbootldr /vbootldr
这个是支持那个vhd版区的vboot功能吗?是否占用wee代码多,如果多,个人感觉去掉支持它也可以,启动vhd系统,win7以后支持,只是想xp用的时候使用这个vboot,但是xp已经淘汰了,而且vboot也收费的。不如去掉支持,减少些wee代码大小,如果不占用什么留着也可以。不知道其他人用不用vboot,我是没有使用过。
作者: 不点    时间: 2016-2-2 19:01
freesoft00 发表于 2016-2-2 15:21
好的,谢谢!
主要是用wee少,有时候用一下grub,看到不点说在硬盘上用wee更好,所以想以后如果在硬盘上 ...

最难支持的是 vmlinuz ,所花费的代码最多。其它格式的支持都很简单,与 vmlinuz 相比可以忽略不计。

并未特别去支持 vbootldr。它很可能就是 ntldr 格式,既然 wee 支持 ntldr,也就支持了 vbootldr。


作者: devilma    时间: 2016-3-18 11:57
不点真仔细啊。。。敬佩。。。
作者: hilsonma    时间: 2019-10-24 06:20
https://github.com/chenall/grubu ... ee/preset_menu_used

find --set-root /boot/grub/grldr
/boot/grub/grldr
timeout 1
default 0

title 1. DOS/Windows
    find --set-root --active /boot/BCD /bootmgr
    find --set-root --active /boot.ini /ntldr
    find --set-root --active /command.com /io.sys
    find --set-root --active /command.com /kernel.sys
    find --set-root /boot/BCD /bootmgr
    find --set-root /boot.ini /ntldr
    find --set-root /command.com /io.sys
    find --set-root /command.com /kernel.sys

title 2. GRUB4DOS
    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 /grldr /grldr

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

title 6. Previous MBR
    (hd0)1+1

title 7. Command Line
    exit
作者: hilsonma    时间: 2019-10-24 06:21
本帖最后由 hilsonma 于 2019-10-30 06:01 编辑

wee63.mbr 建议使用 求道者 编译的版本 http://bbs.wuyou.net/forum.php?m ... page%3D1&page=3 (在28楼)




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