无忧启动论坛

标题: 关于 pxe 启动 [打印本页]

作者: 2011yaya2007777    时间: 2013-7-29 16:46
标题: 关于 pxe 启动
本帖最后由 2011yaya2007777 于 2013-7-30 10:05 编辑

pxe 启动,客户机从服务器读入启动块(比如 grldr),放在何处?0x2000:0 还是 0:0x7c00 ?
把控制权交给 grldr 时,传递驱动器号没有?即向 dl 赋值没有? 0x21 或者其他?
作者: 不点    时间: 2013-7-29 17:14
应该是 0000:7C00 吧。

这又不是 int13 设备,传递 DL 有啥用处?


作者: 2011yaya2007777    时间: 2013-7-29 18:28
那在加载 usb 驱动时,如何判断 grldr 是从 pxe 启动的?
作者: zhaohj    时间: 2013-7-29 18:37
加载usb驱动时,无需判断grld 是从pxe启动。
作者: 不点    时间: 2013-7-29 21:57
楼上正解。

你要加载 USB 的时候,肯定是从 USB 启动的或者从硬盘、软盘、光盘启动的。这些启动方式都不与 PXE 有 “牵连”,因此,你都可以屏蔽掉 PXE。而看你先前的帖子,得知你已经了解如何屏蔽 PXE,即,修改 pre_stage2 的偏移 05 处的控制字节。

yaya 的真实意思可能是说,假如 grldr 是经由 pxe 启动,此时应该不再加载 USB 驱动。

common.c 中的 init_bios_info () 就有确定启动盘的代码。init_bios_info 执行完成后,就确定了启动盘的盘号了。如果是从 pxe 启动,那么 init_bios_info 执行完成后,启动盘 boot_drive 和当前盘 saved_drive 都将设定为 0x21。

由于 pxe 把 grldr 加载在 0000:7C00,所以,为了区分,PBR 的引导代码不应该把 grldr 也加载在 0000:7C00,而应该加载在别处,比如 1000:0000 或者 2000:0000 等其他地址处。

grldr 头部的引导代码(大约在第二扇区)能够根据上述地址 “约定” 来判断是否从 PXE 启动,如果不是从 PXE 启动,则屏蔽掉 PXE 的启动步骤。注意,光盘启动也有可能是加载在 0000:7C00。因此,还需要注意,从 no-emulation-mode 的光盘格式启动时,也要屏蔽掉 PXE 的启动步骤。


作者: 2011yaya2007777    时间: 2013-7-30 10:04
谢谢不点提示。看来驱动器号 0x20,0x21,0x22 是在 init_bios_info 分配的,而 0x23 是u启带入的。
判断是否从 pxe 启动,不能使用 0x21,只能从 grldr 头部的引导代码带入参数了。
问题解决。




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