【问题标题】:Resource allocation by Plug-and-Play BIOS通过即插即用 BIOS 分配资源
【发布时间】: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 负责满足下列要求:

  1. 所有'静态'设备的配置已知系统BIOS:

    “最少”,这包括系统板设备。它“可以”还包括“即插即用 ISA 卡”位于 EISA、ISA、PCI 或任何其他静态设备上的设备可用的总线架构。

    *实际上,上述声明表明,设备“嵌入/集成”在系统板上的任何静态总线(例如 PCI、ISA 或 EISA)上。)“必须”配置通过 BIOS,因为 *BIOS 作为设计部分了解嵌入在主板上的'所有'设备。*系统 BIOS 程序员必须包含这些规定将嵌入主板的设备配置为系统设计部分。

    这是否还包括“安装在 PCI/ISA/EISA 卡插槽中的卡”?

  2. BIOS POST 资源仲裁: 系统 BIOS 现在必须知道系统资源的使用情况。使用通过运行时服务提供的信息(将在后面的部分中描述)以及系统 BIOS 已知的资源信息,可以避免关键的资源冲突。 '在禁用冲突设备的情况下加载操作系统比导致资源冲突和可能的系统故障要好。'

    *这似乎适用于嵌入/集成在主板或 ISA/EISA 扩展卡插槽上的 ISA/EISA 设备。 由于 PCI 设备的资源在 I/O(或内存)地址分配方面不能冲突(因为地址对于 PCI 设备没有硬连线,因此在BIOS 的 “手” 分配不冲突的地址。)和 irq 分配(因为 PCI 中断在设计上是可共享的。),所以 这意味着“所有” PCI 设备(嵌入式或non-embedded) 将被初始化/分配内存或 I/O 地址和 irq 分配。

  3. 支持即插即用和非即插即用操作系统: 即插即用系统 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


【解决方案1】:

“PnP OS”选项仅与 ISA PnP 设备相关,这些天几乎不存在。这就是为什么您不再看到该选项的原因。在没有 ISA 插槽的主板上,这基本上是无关紧要的。如果您可以将串行端口基地址设置为“自动”,可能仍然具有一定的相关性。

BIOS 应始终配置 PCI BAR 和 INTx 到 IRQ 的映射。无论 PnP OS 选项如何,它都应该这样做。这包括板载 PCI 设备(例如集成以太网)和 PCI/PCIe 插槽板。我从未见过可以启动到 DOS 并且没有配置 BAR 的(工作)BIOS。

当 BIOS 设置 PCI 配置空间时,它会考虑 ISA PnP 信息。例如,如果它知道一个 ISA PnP 设备正在使用 IRQ 9,那么 PCI init 例程应该足够智能,不会将 IRQ 9 映射到任何 PCI INTx 行。

另外,请记住,当您的操作系统加载时,可以随意覆盖 BAR 和 IRQ 映射。 Windows 通常在激活 APIC 和 ACPI 时重新执行 IRQ 映射。 BAR 通常不会更改,但可能存在特殊情况,例如需要操作系统填充 BAR 的 PCIe 热插拔事件。

【讨论】:

  • +1 让它更清晰。 :) 所以,简而言之,这意味着,在具有 PnP BIOS 的 PC 中,当我启动到 DOS(或任何非 PnP 操作系统)时,我可以假设 all PCI 设备(包括板载 PCI 设备和 PCI/PCIe 插槽板。)也已分配 I/O 或内存地址和 IRQ,即我可以使用它的 bus:dev:func 并读取它的 BAR 以 获取分配的 I/O 或内存地址和 IRQ 映射,然后简单地发出 x86 IN/OUT 或 MOV(无论适用)指令进行数据传输到/从那个 PCI 设备。我说的对吗?
  • 我希望 all PnP BIOS 也是如此——至少对于 1995 年左右之后制造的 PC 来说是这样。我正在使用非常旧的 PC。 :)
  • 我在 PnP 或 PCI 规范文档中找不到这种行为的正式保证。然而,我已经为 DOS 编写 PCI 设备测试软件 10 年了,我从未见过在 POST 期间故意不配置所有 PCI BAR 和 IRQ 的 BIOS。 (我看到一些 BIOS 存在处理 PCI 到 PCI 桥的错误,但它们通常在多个操作系统下存在问题,并且可以通过主板制造商的更新来修复。)
  • 您的评论是正确的。您可以查询 PCI 配置空间以获取 BAR 和 IRQ 值(CF8/CFC 或 INT 1A)。如果 BAR 是 I/O 映射的,则可以使用 IN/OUT。如果 BAR 是内存地址,则可以使用内存操作 (MOV)。 请记住,内存条将是高地址。您需要处于保护模式或虚幻模式才能与他们交谈。
  • 作为参考,我刚刚在实验室的一个系统上运行了一个实验。我启动了一个系统并在 PnP OS 设置为“No”的情况下转储 PCI 配置空间,然后在 PnP OS 设置为“Yes”的情况下重复实验。 PCI 配置空间没有改变。 (我意识到这只是一个数据点。)
【解决方案2】:

“PnP OS”选项仅与 ISA PnP 设备相关,这些天几乎不存在。 - 错误的! 这个选项对Windows OS中的中断分布有很大的影响!证明上述说法的实验本身非常简单!

【讨论】:

  • 这对我来说更像是一个评论......不是一个真正的建设性答案。
猜你喜欢
  • 2018-11-19
  • 1970-01-01
  • 2017-04-26
  • 2012-05-27
  • 2015-10-26
  • 2012-02-11
  • 2018-04-07
  • 2013-08-01
  • 1970-01-01
相关资源
最近更新 更多