下一页 上一页 目录

4. 如何处理 PnP 卡

4.1 PnP 设备处理简介

如今几乎所有新的内部板卡(卡)都是即插即用 (PnP) 的。因此,总线资源的配置在几乎所有情况下都应该是完全自动的。如果设备无法工作,请查看是否已检测到它,可以尝试重启。如果设备驱动程序无法配置资源,那么希望方法 2-6 中的一个或多个可以

  1. 设备驱动程序配置
  2. /sys 用户界面配置 内核 2.6 +(尚不适用于 PCI,其他严重限制)
  3. BIOS 配置(对于 PCI 总线,您只需要 PCI BIOS,否则您需要 PnP BIOS)
  4. 仅限 ISA 卡:禁用 PnP 通过跳线或 DOS/Windows 软件(但许多卡无法做到这一点)
  5. ISA 总线:Isapnp 是一个您可以始终用来配置 ISA PnP 设备的程序
  6. PCI 工具 用于配置 PCI 总线,但设备驱动程序应该处理它
  7. Windows 配置 然后您从 Windows/DOS 中启动 Linux。作为最后的手段使用

以上任何一种方法都将在硬件中设置总线资源,但只有第一种(可能还有第二种)会告诉驱动程序已完成的操作。驱动程序如何获得通知取决于驱动程序。您可能需要做些什么来通知它。请参阅告诉驱动程序配置

4.2 设备驱动程序配置,保留资源

设备驱动程序(在内核提供的代码的帮助下)可以编写为使用 PnP 方法在硬件中设置总线资源,但仅限于它们控制的设备。但是,许多设备驱动程序只是接受 BIOS 或 Linux 已配置的内容,并使用内核提供的代码来找出此设备是如何配置的。由于驱动程序已检查配置并可能重新配置了它,因此它显然知道配置,您无需告诉它此信息。这显然是最简单的方法,因为如果驱动程序完成所有操作,您无需做任何事情。

如果您有旧的 pre-PnP ISA 硬件,Linux PnP 软件可能不知道它及其所需的总线资源。因此,它可能会错误地将此旧硬件需要的资源分配给其他设备。结果是资源冲突,但有一种方法可以尝试避免它。您可以通过在启动时(通常)配置 BIOS、isa-pnp 模块或内核(如果 PnP 构建到内核中)来保留旧 ISA 卡所需的资源。例如,要保留 IRQ 5,请将此参数传递给 isa-pnp 模块(或内核):isapnp_reserve_irq=5。请参阅 BootPrompt-HOWTO。除了 ..._irq 之外,还有 _io、_dma 和 _mem。

对于 PCI 设备,大多数驱动程序将配置 PnP。不幸的是,驱动程序可能会占用其他设备需要的总线资源(但内核尚未将其分配给它们)。因此,更复杂的 PnP Linux 内核会更好,其中内核在所有请求都完成后进行分配。请参阅Linux 如何进行 PnP

4.3 /sys 用户界面配置

从内核 2.6 开始,据说用户可以使用 /sys 目录树进行资源配置的新方法。但截至 2004 年 8 月,在大多数情况下它不能用于配置。请参阅/sys 目录树

4.4 BIOS 配置

使用 BIOS 配置 PnP 简介

如果您有 PnP BIOS,它可以配置硬件。如果驱动程序无法做到,BIOS 可能可以。这意味着您的 BIOS 读取所有设备的资源需求并配置它们(将总线资源分配给它们)。它是 PnP 操作系统的替代品,除了 BIOS 不会将驱动程序与其设备匹配,也不会告诉驱动程序它是如何进行配置的。它通常应该使用存储在其非易失性存储器 (ESCD) 中的配置。如果它发现新设备或存在冲突,BIOS 应该对配置进行必要的更改,并且可能不使用与 ESCD 中相同的配置。在这种情况下,它应该更新 ESCD 以反映新情况。

您的 BIOS 需要支持这种配置,并且在某些情况下它无法正确或完整地执行。可能需要通过 CMOS 菜单告诉 BIOS 它不是 PnP 操作系统。虽然许多设备驱动程序将能够自动检测 BIOS 已完成的操作,但在某些情况下,您可能需要确定它(并非总是容易)。请参阅我的当前配置是什么?让 BIOS 执行此操作的一个可能的优势是,它在 Linux 启动之前完成其工作,因此所有工作都在启动过程的早期完成。

大约 1996 年之后制造的大多数 BIOS ?? 可以资源配置 PCI 和 ISA 总线。但有人声称,一些较旧的 BIOS 只能进行 PCI 配置。当然,对于只有 PCI 总线的 PC,BIOS 只需要进行 PCI 配置。要想了解更多关于您的 BIOS 的信息,请在 Web 上查找。请不要问我,因为我没有这方面的数据。您想了解的 BIOS 的详细信息可能很难找到(或不可用)。一些旧的 BIOS 可能只有最基本的 PnP 功能,并且似乎期望操作系统正确地执行它。如果发生这种情况,您要么必须找到另一种方法,要么尝试设置 ESCD 数据库(如果 BIOS 有的话)。请参阅下一节。

BIOS 的 ESCD 数据库

BIOS 维护一个非易失性数据库,其中包含它将尝试使用的 PnP 配置(如果您声明它不是 PnP 操作系统)。它被称为 ESCD(扩展系统配置数据)。同样,提供 ESCD 是可选的,但大多数 PnP-BIOS 都具有它。ESCD 不仅存储 PnP 设备的资源配置,还存储非 PnP 设备的配置信息(并将它们标记为这样),以避免冲突。ESCD 数据通常保存在芯片上,并在断电时保持完整,但有时它会保存在硬盘上??

ESCD 旨在保存上次使用的配置。但是,由于 Linux 可以更改设备配置方式(包括用户使用 isapnp 或 pci 实用程序),因此 ESCD 不会知道这一点,也不会将此配置保存在 ESCD 中。一个好的 PnP 操作系统可能会更新 ESCD,以便您以后可以将其用于非 PnP 操作系统(如标准 Linux)。MS Windows9x 仅在特殊情况下执行此操作。请参阅使用 Windows 设置 ESCD。从内核 2.6 开始,Linux 能够修改 ESCD,但尚未使用(截至 2004 年 8 月)。

要使用 ESCD 中设置的内容,请确保您已在 BIOS 的 CMOS 中设置“不是 PnP 操作系统”或类似内容。然后,每次 BIOS 启动时(在 Linux 操作系统加载之前),它都应该以这种方式配置事物。如果 BIOS 检测到 ESCD 中没有的新 PnP 卡,则它必须为该卡分配总线资源并更新 ESCD。它甚至可能必须更改分配给现有 PnP 卡的总线资源并相应地修改 ESCD。

有一个程序您可以用来查看 ESCD 的内容。它显示 IRQ 和 IO 地址等,但缺少设备名称(只有 EISA 设备 ID 号)。它位于:Index of /home/gunther.mayer/lsescd

如果每个设备都将其上次配置保存在其硬件中,则每次启动 PC 时都不需要硬件配置。但它不是这样工作的。因此,如果您使用 BIOS 进行 PnP,则需要保持所有 ESCD 数据的正确性。有些 BIOS 没有 ESCD,但确实有一些非易失性存储器来存储有关哪些总线资源已预留供非 PnP 卡使用的信息。许多 BIOS 两者都有。

使用 Windows 设置 ESCD

最终 Linux 内核可能会设置 ESCD。从内核 2.6 开始,如果内核已使用 PNPBIOS 编译,则新代码中的一个函数可以做到这一点。但它目前在代码中未使用。

如果 BIOS 没有按照您想要的方式(或应该的方式)设置 ESCD,那么有一个 Linux 实用程序来设置 ESCD 将会很好。可以尝试使用 Windows 来执行此操作(如果您在同一台 PC 上安装了 Windows)。

有三种方法可以使用 Windows 来尝试设置/修改 ESCD。一种方法是使用为 DOS 或 Windows 3.x 设计的 ICU 实用程序。它也应该适用于 Windows 9x/2k ?? 另一种方法是在 Windows 9x/2k 下手动(“强制”)设置设备,以便 Windows 在正常关闭 Windows 时将此信息放入 ESCD 中。第三种方法仅适用于非即插即用的旧设备。如果 Windows 知道它们以及它们使用的总线资源,那么 Windows 应该将此信息放入 ESCD 中。

如果 PnP 设备由 Windows 自动配置,而用户没有“强制”它更改设置,那么这些设置可能不会进入 ESCD。当然,Windows 很可能会自行决定配置与 ESCD 中设置的相同,因此它们可能会巧合地变得相同。

Windows 9x 是 PnP 操作系统,并自动 PnP 配置设备。它们在注册表中深处维护着自己的 PnP 数据库(存储在二进制 Windows 文件中)。除了 PnP 总线资源之外,注册表中还有许多其他配置内容。内存中既有当前的 PnP 资源配置,硬盘上也有另一个(可能大致相同)的配置。要在 Windows98 中查看此内容或强制对其进行更改,您可以使用设备管理器。

在 Windows98 中,有两种方法可以进入设备管理器:1. 我的电脑 --> 控制面板 --> 系统属性 --> 设备管理器。 2.(右键单击)我的电脑 --> 属性 --> 设备管理器。然后在设备管理器中,您选择一个设备(如果同一类设备有多个,有时需要多个步骤)。然后单击“属性”,然后单击“资源”。要尝试手动更改资源配置,请取消选中“使用自动设置”,然后单击“更改设置”。现在尝试更改设置,但可能不允许您更改它。如果它确实允许您更改,则您已“强制”更改。应该有一条消息通知您它正在被强制执行。如果您想保留 Windows 显示的现有设置,但使其“强制”,那么您将不得不强制更改为其他设置,然后再强制将其更改回其原始设置。

要查看 Windows98 下“强制”的内容,请查看“强制硬件”列表:开始 --> 程序 --> 附件 --> 系统工具 --> 系统信息 --> 硬件资源 --> 强制硬件。当您在 Windows 中“强制”更改总线资源时,它应该将您的更改放入 ESCD 中(前提是您正常退出 Windows)。从“系统信息”窗口,您还可以检查 IRQ 和 IO 端口在 Windows 下是如何分配的。

即使 Windows 显示没有总线资源冲突,Linux 下也可能存在冲突。这是因为 Windows 分配总线资源的方式可能与 ESCD 不同。在罕见的情况下,如果 Windows 下的所有设备都是旧设备或已被“强制”,那么 Windows 和 ESCD 配置应该是相同的。

添加新设备(在 Linux 或 Windows 下)

如果您添加了一个新的 PnP 设备并将 BIOS 设置为“不是 PnP 操作系统”,那么 BIOS 应该自动配置它并将配置存储在 ESCD 中。如果它是非 PnP 旧设备(或通过跳线等方式制成的设备),那么这里有一些处理它的选项:

您也许可以直接告诉 BIOS(通过 CMOS 设置菜单)它使用的某些总线资源(例如 IRQ)是保留的,并且不应由 PnP 分配。这不会将此信息放入 ESCD 中。但是,可能会有一个 BIOS 菜单选项,用于选择在发生冲突时是否让这些 CMOS 选择覆盖 ESCD 中的内容。另一种方法是在 DOS/Windows 下运行 ICU。还有一种方法是在 Windows 9x/2k 下手动安装它,然后确保其配置是“强制的”(请参阅上一节)。如果它是“强制的”,则当您关闭 PC 时,Windows 应该更新 ESCD。

4.5 仅限 ISA 卡:禁用 PnP ?

PCI 设备本质上是 PnP,因此无法禁用它。但是,一些 ISA 设备曾经可以通过跳线或运行设备随附的 Windows 程序(无跳线配置)来禁用 PnP。如果设备驱动程序无法配置它,这将避免执行 PnP 配置的可能复杂任务。不要忘记告诉 BIOS 这些总线资源是保留的。但是,由于 Linux 对 PnP 的支持有所改进,您通常不想禁用 PnP。这里有一些更多支持 PnP 的论据:

  1. 如果您在同一台机器上安装了 MS Windows,那么您可能希望允许 PnP 在 Windows 下配置设备的方式与在 Linux 下不同。
  2. 除非您使用 PnP,否则 IRQ 号码(或端口地址)等的选择范围可能太有限。
  3. 您可能有一个 Linux 设备驱动程序,它使用 PnP 方法搜索它控制的设备。
  4. 如果您将来需要更改配置,如果是 PnP,则可能更容易做到这一点(无需设置跳线或运行 Dos/Windows 程序)。

一旦配置为非 PnP 设备,它们就不能由 PnP 软件或 PnP-BIOS 配置(除非您移动跳线和/或再次使用 Dos/Windows 配置软件)。

4.6 ISA 总线:Isapnp(isapnptools 的一部分)

isapnp 独立程序仅适用于 ISA 总线(非 PCI)上的 PnP 设备。在 2.4 内核之前,它非常必要。在 2.4 内核之后,它提供了允许驱动程序处理 ISA PnP 的功能,isapnp 独立程序的重要性降低了。此外,BIOS 可能会令人满意地配置 ISA PnP。但是,isa-pnp 模块(或内置于内核中的等效模块)现在非常重要,因为各种 ISA 设备驱动程序都调用它来配置总线资源。在内核 2.6 之前,它产生了一个 /proc/isapnp “文件”,该文件可用于手动配置(请参阅内核文档中的 isapnp.txt)。

在某些情况下,Linux 发行版已设置为在启动时自动运行 isapnp。2004 年仍然这样做,但如果设备驱动程序工作良好,则实际上不需要它。如果您需要自己设置它,除非您了解 PnP 的基础知识,否则 isapnp 的大部分文档都难以理解。本 HOWTO 应该帮助您理解它以及 isapnp 随附的 FAQ。在启动时运行 Linux 程序“isapnp”会将此类设备配置为 /etc/isapnp.conf 中指定的资源值。可以自动创建此配置文件,但您随后应手动编辑它以在各种选项之间进行选择。然后,为了让驱动程序知道资源,您通常需要将它们指定为适当模块(驱动程序)的参数。这是通过配置文件完成的,通常在 /etc 目录中。在那里查找名为 mod* 等的文件。如果驱动程序内置于内核中,那么它们有时可能会作为内核的参数给出。请参阅 BootPrompt-HOWTO。

使用 isapnp 曾经存在一个问题,即内置于内核的设备驱动程序可能在 isapnp 在硬件中设置地址等之前运行得太早。这导致设备驱动程序无法找到设备。驱动程序尝试了正确的地址,但该地址尚未在硬件中设置。这仍然是一个问题吗??

如果您的 Linux 发行版自动安装了 isapnptools,则 isapnp 可能已经在启动时运行。在这种情况下,您需要做的就是按照 "man isapnp.conf" 编辑 /etc/isapnp.conf。请注意,这就像手动配置 PnP 一样,因为您在编辑配置文件时决定如何配置。

如果配置文件错误或不存在,您可以使用程序“pnpdump”来帮助创建配置文件。它几乎为您创建了一个配置文件,但您必须在使用它之前巧妙地编辑它一下。它包含一些注释来帮助您编辑它。虽然 BIOS 也可能配置 ISA 设备(如果您已告诉它您没有 PnP 操作系统),但 isapnp 将重新执行它。

/etc/isapnp.conf 文件中使用的术语起初可能看起来很奇怪。例如,对于 IO 地址 0x3e8,您可能会看到“(IO 0 (BASE 0x3e8))”代替。“IO 0”表示这是此设备使用的第一个(第 0 个)IO 地址范围。表达所有这些的另一种方式是:“IO[0] = 0x3e8”,但 isapnp 不会这样做。“IO 1”表示这是此设备使用的第二个 IO 地址范围,等等。“INT 0”具有类似的含义,但用于 IRQ(中断)。单个卡可能包含多个物理设备,但以上解释仅针对其中一个设备。

4.7 PCI 工具

PCI Utilities 包(= pciutils,有时称为“pcitools”)允许人们手动 PnP 配置 PCI 总线(但有难度)。“lspci”或“scanpci”列出总线资源,而“setpci”在硬件设备中设置资源分配(IRQs 除外)。看来 setpci 主要用于脚本,并且需要了解 PCI 配置寄存器的详细信息才能使用它。这是一个此处或 setpci 手册页中未解释的主题。

人们使用它来配置驱动程序未能配置的 PCI 设备。在我的 Modem-HOWTO 和 Serial-HOWTO 中的“PCI:启用已禁用的端口”小节中可以找到一个示例。但是,除非您有适用于该设备的工作驱动程序,否则启用设备毫无用处。

4.8 Windows 配置

此方法使用 MS Windows 进行配置,并且只有在所有其他方法都失败时才应使用。如果您在同一台 PC 上安装了 Windows9x(或 2k),那么只需启动 Windows 并让它配置 PnP。然后使用 loadlin.exe 等从 Windows(或 DOS)启动 Linux。但是,PCI 设备的 IRQ 可能存在问题。当 Windows 关闭(没有任何消息)为 Linux 让路时,它可能会擦除(归零)存储在 PCI 设备配置寄存器之一中的 IRQ。Linux 会抱怨它找到了一个 IRQ 为零。

据报道,如果您使用快捷方式(PIF 文件)启动 Linux,则会发生上述情况。但是,据报道,有一种解决方法是您仍然使用快捷方式 PIF。快捷方式类似于 Linux 中的符号链接,但它不仅仅是符号链接,因为它可能是“配置过的”。要从 DOS 启动 Linux,您需要创建一个批处理文件(脚本),该文件启动 Linux。(启动 Linux 的程序在名为“loadlin”的包中)。然后为该批处理文件创建一个 PIF 快捷方式,并进入该快捷方式的“属性”对话框。选择“高级”,然后选中“MS-DOS 模式”,使其在真正的 MS-DOS 中启动。

现在,这是防止 PCI IRQ 归零的技巧。单击“指定新的 MS-DOS 配置”。然后,要么接受呈现给您的默认配置,要么单击“配置”进行更改。现在,当您通过单击快捷方式启动 Linux 时,将根据您的新配置创建新的配置文件(Config.sys 和 Autoexec.bat)。

旧文件存储为“Config.wos 和 Autoexec.wos”。在您完成使用 Linux 并关闭 PC 后,您将再次需要这些文件,以便下次启动 PC 时可以运行 DOS。您需要确保名称恢复为 *.sys 和 *.bat。当您离开 Windows/DOS 进入 Linux 时,Windows 期望当您完成使用 Linux 后将返回 Windows,以便 Windows 可以自动将这些文件恢复为其原始名称。但这不会发生,因为当您退出 Linux 时,您会关闭 PC 并且不会返回 Windows。那么您如何重命名这些文件呢?这很容易,只需将命令放入您的“start-Linux”批处理文件中,将这些文件重命名为它们的 *.bat 和 *.sys 名称即可。将这些重命名命令放入您的批处理文件中,就在加载 Linux 的行之前。

另据报道,您应该单击“常规”选项卡(快捷方式的“属性”对话框),并选中“只读”。否则,Windows 可能会将“高级设置”重置为“使用当前 MS-DOS 配置”,PCI IRQ 将归零。因此,当您使用当前 MS-DOS 配置时,Windows 会擦除 IRQ,但在您使用新配置(实际上可能会将事物配置为与旧配置相同)时不会擦除。Windows 似乎不是很一致。

4.9 PnP 软件/文档


下一页 上一页 目录