在阅读有关硬件/设备独立性的文章时,维基百科(computing)的这条声明指出:
应用软件不需要了解使用它的硬件的任何信息。相反,它通过标准化的抽象层发现硬件的功能,然后使用抽象的命令来控制硬件。
我想知道BIOS例程/设备驱动程序/HAL/OS与设备控制器之间关于发现硬件功能的低级交互。
请帮助我理解这些实体之间的通信发生,这有助于硬件独立。
发布于 2014-11-11 09:04:15
通常,硬件设备通过某种标准总线连接到主控制器。例如- PCI,PEX,USB。
总线控制器将为总线上的每个连接设备分配设备#、总线#、函数#等。
现代总线控制器要么为主控制器提供执行扫描的能力,要么在设备热插拔到总线时发送事件。
根据每个已发现的设备,可以使用总线控制器标准命令(如设备的读/写寄存器、设备ID、总线号等)询问设备的详细信息,如:
在每种总线类型中,所有这些细节都必须以相同的方式提供给每个连接的HW设备,从而使操作系统能够使用抽象层。
一旦设备被发现和识别,操作系统将调用所有特定的总线注册设备驱动程序的探测函数,该功能使用上述细节来决定是否能够处理它。当设备驱动程序探测成功时,将分配驱动程序的一个实例,并可由需要访问HW的应用程序直接使用。
例如: USB连接到USB端口。事件由USB总线控制器发送到主CPU。CPU将使用标准USB总线控制器功能来学习制造商&设备ID/s、设备类、功能等,并调用所有已注册的USB设备驱动程序探测函数。
如果安装(注册)适当的设备驱动程序,它将成功地创建设备的一个实例,视频应用程序(如skype)可以通过驱动程序SW提供的DLL直接使用它。
希望这能有所帮助。
https://stackoverflow.com/questions/26860695
复制相似问题