即插即用 BIOS 规范说,如果您有 PnP BIOS,它可以配置硬件。
这意味着您的 BIOS 读取所有设备的资源需求并配置它们(为它们分配总线资源)。
PnP 是否总是为嵌入/集成在主板上的设备分配资源(即分配 I/O 或内存地址和中断)?
PnP BIOS(即存在 $PnP 结构)是否总是将资源(I/O 和内存地址)分配给主板上存在的所有设备(即嵌入式/集成在主板上)以及PCI 扩展卡上。
虽然 BIOS 可能不知道如何“配置”非嵌入式设备(即未嵌入主板上的设备),并且只会配置嵌入式/集成在主板上的设备,但它“应该”分配地址(I/O 和内存)和 irq 以避免在使用像 DOS 这样的非 PnP 操作系统时发生冲突。
我的问题是:
PnP BIOS 是否必须在 POST 期间(即在加载和将控制权转移到 OS bootlader 之前)将 I/O、内存地址和 irq 分配给PCI 扩展卡设备?所有 PnP BIOS 都是这样吗?
假设 [Plug-and-Play OS] 选项设置为No。即我们告诉 BIOS 我们没有 PnP 操作系统,而是像 DOS 这样的非 PnP 操作系统。
某些 BIOS 没有此选项。他们是否总是将资源分配给所有设备(即嵌入式设备和扩展槽上的设备)?
2012-08-01 更新:
PnP BIOS 规范 v1a 标题为“系统 BIOS POST 要求”的第 2.1 节说:
(我只提到了与这篇文章相关的 3 点。(*)标记的信息是我对标准声明的解释。)
为了实现即插即用的目标,系统 BIOS POST负责实现下列要求:
系统 BIOS已知的所有“静态”设备的配置:
至少,这包括系统板设备。它“可以”还包括“即插即用 ISA 卡”和位于 EISA、ISA、PCI或任何其他可用静态总线架构上的设备。
*实际上,上述声明表明,设备“嵌入/集成”在系统板上的任何静态总线(例如,PCI、ISA 或 EISA)上。)“必须”由 BIOS 配置,因为 *BIOS 知道“所有嵌入在主板上的设备,作为设计部分。* 系统 BIOS 程序员必须结合规定将嵌入主板上的设备配置为系统设计部分。
这是否还包括“安装在 PCI/ISA/EISA 卡插槽中的卡”?
BIOS POST 资源仲裁:系统 BIOS 现在必须知道系统资源的使用情况。使用通过运行时服务提供的信息(将在后面的部分中描述)以及系统 BIOS 已知的资源信息,可以避免关键的资源冲突。“在禁用冲突设备的情况下加载操作系统比导致资源冲突和可能的系统故障要好。”
*这似乎适用于嵌入/集成在主板或 ISA/EISA 扩展卡插槽上的 ISA/EISA 设备。 由于 PCI 设备的资源在 I/O(或内存)地址分配方面不会发生冲突(因为 PCI 设备的地址不是硬连线的,因此在BIOS 的“手中”分配不冲突的地址。)和 irq 分配(因为 PCI 中断在设计上是可共享的。),因此这意味着“所有”PCI 设备(嵌入式或非嵌入式)将被初始化/分配内存或 I/O 地址和 irq 分配。
支持即插即用和非即插即用操作系统:即插即用系统 BIOS POST “必须”配置系统以“既”即插即用感知,“以及”非即插即用操作system.* 在非即插即用环境中,“要么”系统 BIOS ,“要么”适当的系统软件(设备驱动程序),“必须”配置“所有”设备(即插即用 ISA 卡、PCI 设备等)。这将允许所有环境“完全像在标准 PC 兼容系统上那样加载”。但是,在即插即用环境中,系统 BIOS 现在可以协助操作系统执行功能,例如系统板设备的运行时配置和系统板设备发生变化时的事件识别。
*规范中的所有这 3 条语句似乎都表明,如果要启动非 PnP 操作系统(例如 DOS),那么系统 BIOS 必须“必须”配置(或者,至少分配地址和 irq)“全部” PCI 设备,无论是否嵌入/集成在主板(主板)上。对于 ISA 和 EISA 设备,BIOS“不得”为那些 ISA/EISA 设备(无论是嵌入式还是非嵌入式)启用/分配资源,这将导致资源分配冲突。
我从规范的上述陈述中得出结论是否正确。那:“如果 BIOS 必须启动非 PnP 操作系统,它必须启用(即启用即分配资源)系统中的‘每个’PCI 设备(无论是嵌入在主板上还是在 PCI 扩展卡插槽上),以便它们可用供操作系统和应用程序使用”?
2012-08-04 更新:
查看Linux Device Drivers 3rd ed 的第 12 章。. 作者在很多地方明确指出,I/O 或内存地址和 IRQ 分配在 linux 内核开始执行时已经由 bios 完成,linux 内核可以根据需要定制分配。
可能是另一个提到我们想要达到的目标的参考。