|
果然,chenall 改成这样了:
- boot_grldr:
- movb $2, gdt_dst_hi1
- call load_file
- call setup_mbr
- movb $0x23,%dl
- push %dx
- ljmp $0x2000, $0
复制代码
修改了 DL 却忘了把 DH 赋值为 FFh。
无论如何,我目前认为像上面这样做很不安全。我认为 bean 原来的做法是比较好的。
bean 把分区号设置为 00,这也可能遇到问题。但正如在 dos 下启动 grub.exe 那样,根本不知道是否存在分区 0,所以,也就不算是问题了。
怎么样解决这些问题呢?以下是我的看法。
识别 ud 的工作应该在 grldr 内部完成,而不应该在 fbinst 里面完成。进入 grldr 时,应该保持 DL = 原始的 bios 传递过来的盘号,而 DH 保持为 0 也是可以的。但谁能保证分区 0 是可以访问的?位于 8M 以后的分区 0 的第一扇区访问,就有可能产生死机了。所以,安全起见,还是应该设置分区号为 FFh,代表整个磁盘。
当然,fbinst 设置为分区 DH=0,也就没什么关系了,chenall 设置为 DL=0x23 也没关系,反正我们接下来要在 grldr 内部重新设置,覆盖掉 fbinst 的设置。
我们现在就根据 fb_status 的值来在 grldr 内部的 common.c 里面强制设置 ud 的 boot_drive = 0x23,以及 install_partition=0xFFFFFF 即可。
马上准备按照这个思路来编译一个版本。
|
|