当计算机首次开机时,BIOS 程序会在操作系统加载之前运行。现代 BIOS 都是 PnP 兼容的,可以配置大多数 PnP 设备。一些旧的 PCI BIOS 可能只会配置 PCI 总线。以下是您的 BIOS CMOS 菜单中可能存在的一些选项
无论您如何回答 BIOS 的这个问题,PnP BIOS 都会对硬盘、软盘、显卡和键盘进行 PnP 配置,以使系统可启动,并配置 LPC 总线(如果您有)。如果您选择“否 PnP 操作系统”,则 BIOS 应该配置所有内容。
您应该如何回答 BIOS 的这个问题?如果您至少有 2.4 内核,您可以选择任一答案,Linux 通常都能正常工作。即使您在同一台 PC 上安装了 Windows 2000 或 XP,通常也能正常工作。这是因为 Windows 和 Linux 都被认为是 PnP 操作系统,如果操作系统是 PnP 的,它也应该能够处理 BIOS 配置了所有内容的情况(如果您选择了“否 PnP”)。但我仍然建议选择“否 PnP 操作系统”,除非有已知的理由需要选择“是”。
通常不清楚应该选择“是”还是“否”。如果 Linux 使用了 isapnp,那么 Linux 会进行配置,并且据称最好选择“是 PnP 操作系统”。isapnp 在面对 BIOS 已经配置的设备时为什么会遇到问题尚不清楚,但这种问题有时会发生,并且通过阻止 BIOS 进行配置(选择“是 PnP 操作系统”)来解决。在少数情况下,选择“否”解决了问题。因此,如果 isapnp 工作正常,您可能应该选择“是 PnP”。如果未使用 isapnp,通常最好选择“否”。用于 PCI 设备的 Linux 设备驱动程序应该可以正常配置 PCI 设备。但是对于由非 PCI 驱动程序驱动的 PCI 设备的情况,您可以选择“否 PnP”以使 BIOS 配置它们。
如果您在同一台 PC 上也运行这些 Windows 操作系统,您应该选择“否 PnP 操作系统”。这是微软建议您做的。也许微软希望 BIOS 在配置方面比 Windows 做得更好。这很有道理,因为 BIOS 应该针对主板的特殊性而设计,尤其是在今天许多设备都集成到主板上的情况下。“PnP 操作系统 = 否”对于 2.4 及更高版本的 Linux 内核也应该是可以的。但对于 2.4 之前的 Linux 内核,不清楚哪个是最好的(请参阅上面的小节)。因此,如果您在使用 Linux 时遇到问题,您可以尝试选择“是 PnP 操作系统”以满足 Linux 的需求,但这与微软的建议相悖(但可能仍然可以正常工作)。
当 BIOS 配置的设备与 Windows 注册表中的不同时,Windows 会告诉您它正在查找新硬件。实际上,它是在查找配置不同的旧硬件,因此它认为它是新硬件。无论如何,它会将 BIOS 使用的配置记录在其注册表中,并且该设备从那时起应该可以正常工作。
对于 Windows 9x,微软建议您告诉 BIOS 您拥有 PnP 操作系统(与 Windows 2000 和 XP 的情况正好相反)。如果您有 2.4 或更高版本的内核,这对于 Linux 也应该是可以的。但是,如果您有 2.4 之前的 Linux 内核,那么对于 Linux 来说,最好选择“否 PnP 操作系统”。解决此困境的一种方法是为您更频繁使用的操作系统设置它。然后在您启动另一个操作系统时,手动进入 BIOS 并更改设置。这很麻烦,但如果您几乎从不使用其中一个操作系统,这是可行的。否则,有更好的方法来解决这个困境。
解决此困境的第二种方法是让 Linux 资源配置一切。请参阅2.4 内核之前的 Linux。然后您告诉 BIOS 它是 PnP 操作系统。
解决此困境的第三种方法是告诉 BIOS 它不是 PnP 操作系统。这与微软建议您做的相悖,但如果您了解该怎么做(以及为什么),则有可能使 MS Windows 9x 正常工作。如果您告诉 BIOS 它不是 PnP 操作系统,那么 MS Windows 不应该检测 BIOS 如何配置事物并在它不喜欢 BIOS 所做的事情时更改它吗?它应该这样做,但不幸的是,它似乎不是这样工作的。
当 Windows 9x 发现硬件已由 BIOS 配置时,它似乎只是保持原样而不重新配置它。现在 Windows 9x 将总线资源配置记录在其注册表中。如果 BIOS 配置不同,它应该更正其注册表中的内容以符合 BIOS 设置的内容,或者根据注册表中的内容重新配置所有内容。坏消息。它似乎两者都没有做,并且认为实际配置与注册表中的相同,而实际上是不同的。
但是,如果注册表恰好包含与 BIOS 配置方式完全相同的总线资源配置,那么一切显然都会正常工作。因此,如果 BIOS 以与注册表中记录的相同方式配置设备,则该设备将正常工作。因此,使 MS Windows 正常工作的方法是使注册表与 BIOS 的配置方式同步。如前所述,BIOS 根据其 ESCD(类似于 BIOS 的注册表)配置事物。请参阅BIOS 的 ESCD 数据库。因此,我们需要使注册表与 BIOS 的 ESCD 同步,以便注册表和 ESCD 包含相同的配置。在某些情况下,这两者恰好同步,您无需执行任何操作。
您可能会想到一个问题:BIOS 的 ESCD 和 Windows 注册表最初是如何失去同步的?这是一个场景。您在 BIOS 设置为 PnP 操作系统的情况下安装 Windows。然后 Windows 配置了大部分内容并将该配置保存在其注册表中。然后稍后您将 BIOS 设置更改为“否 PnP 操作系统”。然后在启动时,BIOS 配置了所有内容,但它并没有完全像 Windows 那样做。因此,硬件的实际配置和 Windows 注册表中的内容现在不同了。
尝试使注册表和 ESCD 相同的一种方法是在 BIOS 设置为“否 PnP 操作系统”时安装(或重新安装)Windows。这应该向 Windows 提供由 BIOS 配置的硬件。如果此配置没有冲突,Windows 有望保持原样并将其保存在其注册表中。然后 ESCD 和注册表就同步了。
另一种方法是通过在设备管理器中单击“删除”来删除导致 Windows 中出现问题的设备。然后使用“否 PnP 操作系统”重新启动(在您开始启动时在 BIOS 的 CMOS 中设置)。然后 Windows 将重新安装设备,有望使用 BIOS 配置的总线资源设置。请注意,Windows 可能会要求您插入 Windows 安装光盘,因为它有时找不到驱动程序文件(等等),即使它们仍然在那里。一种解决方法是选择“跳过文件”,这将避免从 CD 安装文件。如果文件仍然在硬盘上,那么驱动程序有望找到它,即使 Windows 安装程序要求您从 CD 安装它(您跳过了这样做)。
作为测试,我“删除”了一张使用 Novell 兼容驱动程序的网卡。重新启动后,Windows 使用 Microsoft Networking 而不是 Novell 重新安装了它。这意味着需要重新安装 Novell Client - 很多不必要的工作。因此,在这种情况下,最好不要对 Windows 95/98 说谎,而是让 Linux 配置总线资源。
当使用 Windows-Linux PC(双启动)时,您可能会注意到由于 Windows 9x(和其他版本的 Windows ??)修改 ESCD 而导致 BIOS 配置方式发生变化。据推测,只有当您“强制”配置或安装旧版设备时才会这样做。请参阅使用 Windows 设置 ESCD。执行配置的设备驱动程序可能会修改 BIOS 已完成的操作,如果您运行 isapnp 或 PCI Utilities 程序,它们也会这样做。
现代 BIOS 允许您手动分配资源,主要是 IRQ。通常有一个选项可以将分配设置为“自动”,以便 BIOS 决定如何分配资源。“自动”通常是一个不错的选择,除非您有旧的旧式非 pnp ISA 卡。
如果您有此类非 PnP 卡,那么在 BIOS 中为这些卡保留资源(例如 IRQ)可能很重要。否则,BIOS 可能会将这些资源用于其他设备并产生冲突。一个例外是,对于某些常见的旧版设备(例如并行端口和串行端口、磁盘驱动器),BIOS 可能会找到它们(在启动时查看屏幕),因此您无需为它们保留资源。如果您在 PC 上使用过 Windows,那么 Windows 可能已经通过在 Windows 下运行 ICU 实用程序(或类似程序)将它们告知 BIOS。
对于 PCI,BIOS 可能允许您将 IRQ 分配给卡槽 1、2、3、4 等。如果您这样做,您应该知道哪个卡在哪个插槽中。实际上,每个插槽都有 4 个 PCI IRQ:A、B、C 和 D。如果 BIOS 菜单没有说明这些(A、B、C、D)中的哪一个被分配给 IRQ 号,则很可能它只是将 IRQ 号分配给 PCI IRQ A。但是许多 PCI 卡只使用 IRQ A,因此这就像将 IRQ 分配给插槽一样。请参阅PCI 中断
这样做有点冒险。它将擦除 BIOS 的 ESCD 数据库,其中包含有关如何配置 PnP 设备的信息,以及有关如何配置旧式(非 PnP)设备的列表。除非您确信此数据库是错误的并且需要重新制作,否则永远不要这样做。在某处声明,只有当您无法启动计算机时才应该这样做。如果 BIOS 丢失了有关旧式 ISA 设备的数据,那么您需要再次在 DOS/Windows 下运行 ICA 以重新建立此数据。