0

在阅读有关硬件/设备独立性的信息时,来自维基百科 ( http://en.wikipedia.org/wiki/Device_independence#Desktop_computing ) 的声明指出:

应用程序软件不需要知道要使用它的硬件的任何信息。相反,它通过标准化的抽象层发现硬件的能力,然后使用抽象的命令来控制硬件。

我想了解 BIOS 例程/设备驱动程序/HAL/OS 和设备控制器之间关于发现硬件功能的较低级别的交互。

请帮助我了解这些实体之间发生的通信,这有助于硬件独立性。

4

1 回答 1

1

硬件设备通常通过某种标准总线连接到主控制器。例如 - PCI、PEX、USB。

总线上的每个连接的设备都将被总线控制器分配一个设备号、总线号、功能号等。

现代总线控制器要么为主控制器提供执行扫描的能力,要么在设备热插入总线时发送事件。

对于每个发现的设备,可以使用总线控制器标准命令(例如设备的读/写寄存器,通过设备 ID、总线号等)来询问设备以获取详细信息,例如:

  • 制造商编号
  • 设备编号
  • 类(控制器/网络设备/人机界面/成像设备/等等)

对于每种总线类型,所有这些详细信息必须以相同的方式用于每个连接的硬件设备,从而使操作系统能够使用抽象层。

一旦设备被发现和识别,操作系统将调用所有特定总线注册的设备驱动程序的探测函数,它使用上面提到的细节来决定是否可以处理它。当设备驱动程序探测成功时,将分配一个驱动程序实例,并可供需要访问硬件的应用程序直接使用。

例如:USB PC CAM 连接到 USB 端口。USB 总线控制器向主 CPU 发送一个事件。CPU 将使用标准 USB 总线控制器函数来学习制造商和设备 ID、设备类、功能等,并将调用所有 USB 注册的设备驱动程序探测函数。

如果安装(注册)了适当的设备驱动程序,它将成功创建设备实例,并且视频应用程序(例如Skype)可以通过驱动程序软件提供的DLL直接使用它。

希望这可以帮助。

于 2014-11-11T09:04:15.463 回答