【发布时间】:2012-07-28 05:19:01
【问题描述】:
即插即用 BIOS 规范表明,如果您有 PnP BIOS,它可以配置硬件。
这意味着您的 BIOS 会读取所有设备的资源需求并对其进行配置(为它们分配总线资源)。
PnP 是否总是为嵌入/集成在主板上的设备分配资源(即分配 I/O 或内存地址和 irq)?
是否会有 PnP BIOS(即存在 $PnP 结构),总是将资源(I/O 和内存地址)分配给主板上的所有设备(即嵌入式/集成在主板上)以及在 PCI 扩展卡上。
虽然 BIOS 可能不知道如何“配置”非嵌入式设备(即未嵌入在主板上的设备),并且只会配置嵌入式/集成在主板上的设备,但它“应该”分配地址(I/O和内存)和 irq 以避免在使用非 PnP 操作系统(如 DOS)时发生冲突。
我的问题是:
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 设备(嵌入式或non-embedded) 将被初始化/分配内存或 I/O 地址和 irq 分配。
支持即插即用和非即插即用操作系统: 即插即用系统 BIOS POST '必须'将系统配置为使用“既”即插即用感知,“以及”非即插即用操作系统。*在非即插即用和播放环境,“任一” 系统 BIOS '或' 适当的系统软件(设备驱动程序)“必须”配置“所有”设备(即插即用 ISA 卡、PCI设备等)。 这将允许所有环境“完全像在标准 PC 兼容系统上那样加载”。 但是,在即插即用环境中,系统 BIOS 现在可以协助操作系统执行诸如系统板设备的运行时配置和系统板设备发生变化时的事件识别。
*规范中的所有这 3 条语句似乎都指出,如果要引导非 PnP 操作系统(例如 DOS),那么系统 BIOS 必须“配置”(或者,分配地址和中断,至少)“所有”PCI设备,无论是否嵌入/集成在主板(主板)上。对于 ISA 和 EISA 设备,BIOS“不得”为那些 ISA/EISA 设备(无论是嵌入式还是非嵌入式)启用/分配资源,这将导致资源分配冲突。
我是否正确地从规范的上述陈述中得出结论。:“如果 BIOS 必须启动非 PnP 操作系统,它必须启用(即启用即分配资源)系统中的“每个”PCI 设备(无论是嵌入主板还是 PCI 扩展卡插槽),以便它们可供操作系统和应用程序使用”?
2012-08-04 更新:
看看chapter 12 of Linux Device Drivers 3rd ed.。作者在很多地方明确提到I/O或内存地址和IRQ分配在linux内核开始执行时已经由bios完成,linux内核可以根据需要定制分配.
可能是另一个提及我们要达到的目标的参考。
【问题讨论】:
-
@JonathonReinhart-为什么这个问题与编程无关?只是因为我没有提到任何开发环境,所以这个问题并没有超出范围。我需要开发一个要从 DOS 使用的驱动程序,这就是我在这里问这个问题的原因。如果 BIOS 在 POST 期间没有为 PCI 扩展卡分配 I/O 或内存地址,那么我必须编写一个资源分配器以供 DOS 使用!我接受这个问题可能看起来像一些硬件故障排除问题,但事实并非如此。它远不止于此。 :)
-
@JonathonReinhart 这是一个有效的编程问题。
-
@jacks 评论撤回 :-) 如果我可以撤回我的近距离投票,我会的。但出于某种原因SO doesn't have that feature.
-
@JonathonReinhart- 没关系。我只能说,总是在下结论之前先戳一下。
-
从软件的角度来看,LPC 和 ISA 几乎是一回事。 LPC 设备映射在(半)固定 I/O IRQ 上,您可以像与 ISA 设备一样与它们通信。 (我们在我们的系统中实现了定制的 LPC 设备。)LPC 主要用于超级 I/O 和 BIOS 闪存芯片。但是,较新的 Intel 芯片组使用 SPI 接口作为 BIOS 芯片。
标签: dos bios pci pci-bus plug-and-play