operating-system – 操作系统如何检测硬件?

操作系统是从B IOS获取此信息还是单独扫描总线以检测系统上安装的硬件.在网上浏览不同的消息来源说不同的事情.有人说BIOS检测到硬件,然后将其存储在操作系统随后读取的内存中,其他人说操作系统扫描总线(例如pci)以了解硬件.

我会想到现代操作系统会忽略BIOS并自行完成.

任何帮助,将不胜感激.

谢谢.

一般来说,大多数现代操作系统( WindowsLinux)将重新扫描检测到的硬件作为启动顺序的一部分.信任BIOS以检测所有内容并正确设置已被证明是不可靠的.

在典型的x86 PC中,有一些用于检测连接硬件的技术组合.

PCI和PCI Express总线有一个称为Configuration Space的标准机制,您可以扫描该机制以获取连接设备的列表.这包括安装在PCI / PCIe插槽中的设备,以及芯片组中的控制器(视频控制器,SATA等).

如果检测到IDE或SATA控制器,则OS / BIOS必须与控制器通信以获取连接的驱动器列表.

如果检测到USB控制器,则OS / BIOS加载USB协议栈,然后加载enumerates连接的集线器和设备.

对于“传统”ISA设备,情况稍微复杂一些.即使您的主板上没有ISA插槽,您通常在系统中仍有许多“ISA”设备(串行端口,并行端口等).这些设备通常缺乏真正标准化的自动检测方法.要检测这些设备,有两个选项:

>探测已知地址 – 串行端口通常位于0x3F8,0x2F8,0x3E8,0x2E8,因此从这些地址读取并查看是否存在看起来像串行端口UART的内容.这远非完美.您可能在非标准地址处有一个未扫描的串行端口.您可能还在其中一个地址处有一个非串行端口设备,这些设备对被探测的响应不佳.还记得Windows 95和98在安装过程中检测硬件时如何锁定很多东西吗?
> ISA Plug-n-Play – 由于ISA逐渐取消支持PCI,因此该标准在热门时刻非常流行.您可能不会遇到许多支持此功能的设备.我相信在Windows Vista及更高版本中默认禁用ISA PnP,但我现在很难找到它的来源.
> ACPI枚举 – 操作系统可以依靠BIOS在ASL代码中描述这些设备. (见下文.)

另外,系统中可能存在许多非固定地址的非PnP设备,例如TPM chip,HPET,或笔记本电脑键盘上的那些“特殊”按钮.对于要向OS解释的这些设备,标准方法是使用ACPI.

BIOS ACPI表应提供操作系统的主板上设备列表.这些表使用称为ASL (or AML for the compiled form)的语言编写.在引导时,OS读入ACPI表并枚举任何描述的设备.请注意,为此,主板制造商必须正确编写其ASL代码. This is not always the case.

当然,如果所有自动检测方法都失败了,您可能会被迫手动安装驱动程序.您可以通过Windows中的“添加新硬件向导”执行此操作. (具体步骤因您安装的Windows版本而异.)

相关文章
相关标签/搜索